Николай Ланец
30 июня 2013 г., 17:10

Устанавливаем MODX Revolution

Конечно по установке MODX Revolution в Интернете много информации, в том числе и видеоуроков. Но мне часто задают вопросы типа «Посмотрите на общую структуру моего сайта», или «Не могли бы вы дать рекомендации по оптимизации сайта» и т.п. Кстати, немного забегая вперед, скажу, что пожалуй один из самых правильных вопросов был:
В ваших проектах наверняка есть куча шаблонов, чанков и полей. Наверняка есть категории, правила именования и так далее. Не могли бы вы поделиться сим ценным опытом
Этот вопрос мы обязательно рассмотри более детально в одном из следующих уроков.
Так вот, изучая такие подопытные сайты, могу выявить пару самых важных ошибок, которые допускают начинающие MODX-программисты:
1) Слишком много сторонних пакетов. Куча чанков, сниппетов, плагинов (которые работают тогда, когда это вообще не нужно). И это даже на мелких сайтах-визитках.
2) Слишком много пользовательских объектов в принципе. Огромная куча чанков, сниппетов и т.п. просто по любому случаю. Но это часто не только «помойка» в целом (в плане сложностей структурирования такого количества объектов), это еще и огромное количество ненужных вызовов этих элементов. Вот яркий пример:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>[[++site_name]] - [[*pagetitle]]</title> <base href="[[++site_url]]" /> [[$myIncludeCSS? &name=`jquery-ui-1.9.1`]] [[$myIncludeCSS? &name=`common`]] [[$myIncludeCSS? &name=`ucp`]] [[$myIncludeCSS? &name=`login`]] [[$myIncludeCSS? &name=`mainpage`]] [[$myIncludeCSS? &name=`container`]] [[$myIncludeCSS? &name=`comments`]] <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.0/jquery-ui.min.js"></script> </head> <body> [[$myKovchegTemplateBegin]] [[*content]] [[$myKovchegTemplateEnd]] </body> </html>
3) Не оптимизированные шаблоны. Вот пример шаблона:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> [[$HEAD]] </head> <body> <!--header_wrap-start--> <div id="header_wrap"> <!--header-start--> <div id="header"> [[$Header]] </div> <!--header-end--> </div> <div class="greenline"></div> <!--header_wrap-end--> <div class="banner"> <div class="banner_left"> [[$Menu.Slider]] </div> <div class="banner_right"> [[$Menu.top]] </div> <div class="clrflt"> </div> <div class="margin5"> </div> <div class="greenline"></div> <div class="clrflt"> </div> <div class="margin3"> </div> <marquee loop="infinite" behavior="altemate" bgcolor="#14601e" direction="left" height="23" width="100%" scrollamount="3" style="color:#fff; font-size:1.1em; padding:7px 0 0 0; font-family:Georgia, Times New Roman, Times, serif; font-style:italic; ">[[$Stroka]]</marquee> <div class="clrflt"> </div> </div> <!--banner-end--> <div id="content"> <!--content-start--> [[$Menu.left]] <div class="content_right fltright"> <div class="right_box1"> <!--div class="right_box1_left fltleft"><img src="inc/img/right_box1_pic.png" alt="" width="187" height="187" /></div--> <!--div class="right_box1_right fltright"--> [[*content]] <a href="[[~4]]">Узнать больше</a> <!--div class="clrflt"> </div> </div--> <div class="clrflt"> </div> </div> <div class="right_box2"> <h2>Наш коллектив</h2> <div class="infiniteCarousel"> <div class="wrapper"> <ul> [[getResources? &parents=`45` &tpl=`tpl.gR.Slider_foto.row` &includeTVs=`1` &processTVs=`1` &tvPrefix=`` &hideContainers=`1` &limit=`0` &sortdir=`ASC` &sortby=`[[getResourcesTree? &parents=`45` &depth=`100`]]` &tvFilters=`show_in_carusel==on` ]] </ul> </div> </div> <!-- --> </div> <div class="right_box3"> [[$Block_news]] [[$Block_Article]] <div class="clrflt"> </div> </div> <div class="clrflt"> </div> </div> <!--content-end--> <!--footer-start--> <div id="footer"> [[$Footer]] </div> <!--footer-end--> </body> </html>
Такое, с мелкими изменениями, присутствует в каждом шаблоне. А шаблонов двадцать. Представьте сколько работы нужно провести, чтобы обновить дизайн такого сайта… Да и элементарное сопровождение такого сайта.
4. Слишком много чанков, и очень мало PHP-кода. Конечно, если у вас сайт-визитка на 5 страниц, можно и чанками обойтись. Но если вы хоть сколько-нибудь серьезный сайт делаете, то надо больше писать чистого PHP-кода. А для этого надо изучать API MODX. И здесь не стоит бояться низкого уровня знаний PHP. На 95% задач достаточно API MODX в чистом виде. Ведь очень много веб-программистов клепают всякие плюшки на jQuery, и просто используют его в повседневной работе. При этом многие не знают pure-javascript методов типа document.getElementByID, document.getElementsByTagName, не знают, что в IE есть метод outerHTML, и нет его в FireFox и т.д. При этом активно используют $('tag').find('.class',function(){}) и т.д. А ведь это тоже практически ООП. Просто многие этого не боятся, потому что не знают. Так вот, не надо бояться ООП, и больше изучать API MODX. Оно довольно интуитивно и не плохо документировано. Нет ничего сложного в использовании
$docs = $modx->getCollection('modResource', array( 'parent' => $modx->getOption('site_start') ));
или
$context = $modx->getContext('web'); $contextConfig = $context->config;
В последующих уроках мы будем много внимания уделять именно PHP-программированию с использованием API MODX, потому что только так можно научиться делать какие-то серьезные проекты, и так, чтобы они работали стабильно и эффективно.
Итак, после такого большого вступления, зададимся вопросом: «Как же всего этого избежать?». Ответ: научиться конечно предстоит многому, но главное, с чего надо начать, это научиться устанавливать ту минимальную сборку MODX Revolution, которая позволила бы решать 95% процентов повседневных задач, и при этом не захламлять систему. Я имею ввиду голую установку + минимум самых важных пакетов. Лично для меня минимальный список пакетов такой:
  • CodeMirror (подсветка кода в чанках, сниппетах и т.п. Кто-то предпочитает Ace)
  • TinyMCE (контент-редактор)
  • Wayfinder (для генерации меню)
  • MetaX (Формирует правильные Meta-теги страницы)
  • GoogleSiteMap (про сеошность ведь тоже не забываем)
  • Login (авторизация во фронтенде)
Второстепенные пакеты:
  • Breadcrumbs (хлебные крошки)
  • Gallery (понятно дело, что галерея)
  • DirectResize (неплохой пакет для автоматического «обрезания» картинок на сайте, когда на страницу попадают картинки, искусственно уменьшенные (стилями или атрибутами)), и автоматически оборачивающий такие картинки в галереи типа Colorbox, HighSlide и т.п.
  • getResources (Замена Эволюшинскому Ditto. Вывод новостных лент, постраничности и т.п.)
Да, getResources у меня во второстепенных пакетах (хотя многие удивятся, ведь это третий по популярности пакет, и все его ставят). Более того, я его не ставил уже года полтора, и не поставлю больше никогда. Потому что он очень тяжелый и крайне глючный, а написать свой компонент для вывода новостей — пара часов. И будет это быстрее работать, а главное — будет полный контроль над фильтрами и т.п. Но в список его добавил, потому что понимаю, что многим будет без него не обойтись, а какой сайт без новостей и статей?
UPD:Видео. В ролике демонстрируется закачка установочного пакета MODX сразу на сервер по SSH командой wget, полная установка MODX Revolution, а так же установка самых необходимых пакетов из официального репозитория + установка пакета локально.

Добавить комментарий