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

Конечно по установке MODX Revolution в Интернете много информации, в том числе и видеоуроков. Но мне часто задают вопросы типа «Посмотрите на общую структуру моего сайта», или «Не могли бы вы дать рекомендации по оптимизации сайта» и т.п. Кстати, немного забегая вперед, скажу, что пожалуй один из самых правильных вопросов был: В ваших проектах наверняка есть куча шаблонов, чанков и полей. Наверняка есть категории, правила именования и так далее. Не могли бы вы поделиться сим ценным опытом Этот вопрос мы обязательно рассмотри более детально в одном из следующих уроков. Так вот, изучая такие подопытные сайты, могу выявить пару самых важных ошибок, которые допускают начинающие MODX-программисты: 1) Слишком много сторонних пакетов. Куча чанков, сниппетов, плагинов (которые работают тогда, когда это вообще не нужно). И это даже на мелких сайтах-визитках. 2) Слишком много пользовательских объектов в принципе. Огромная куча чанков, сниппетов и т.п. просто по любому случаю. Но это часто не только «помойка» в целом (в плане сложностей структурирования такого количества объектов), это еще и огромное количество ненужных вызовов этих элементов. Вот яркий пример:

[[++site_name]] - [[*pagetitle]] [[$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`]] [[$myKovchegTemplateBegin]] [[*content]] [[$myKovchegTemplateEnd]] 3) Не оптимизированные шаблоны. Вот пример шаблона: [[$HEAD]]
[[$Menu.left]]
[[*content]] Узнать больше
            </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>
    <div class="clrflt">
    </div>
Такое, с мелкими изменениями, присутствует в каждом шаблоне. А шаблонов двадцать. Представьте сколько работы нужно провести, чтобы обновить дизайн такого сайта… Да и элементарное сопровождение такого сайта. 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, а так же установка самых необходимых пакетов из официального репозитория + установка пакета локально.