Конечно по установке 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, а так же установка самых необходимых пакетов из официального репозитория + установка пакета локально.