MODx Revolution — начало - Творческая мастерская Игоря Петунина

Опубликовано: 31.10.2017

На предыдущий шаг...

Ну вот движок установлен, что дальше?

Для начала, думаю, следует ознакомиться с его особенностями.

Прежде всего, отметим, что сайт под управлением MODx Revolution будет у нас содержать и показывать в админке контент, организованный в виде "папочек" (раздел ресурсы ), и элементы, этим контентом управляющие, то есть, организующие удобное и красивое представление материалов нашего сайта посетителю. Тоже в виде папок, естественно,  (раздел элементы ), как и раздел файлы, о назначении которого легко догадаться и без объяснений...

Я покажу как работать с сайтом на примерах, но сначала, познакомтесь с сущностью "элементов" конструктора, с которым нам предстоит работать...

Шаблон ( Template ). В MODx Revolution очень сильно развита модель MVC , то есть отделение визуализации от програмной части.  Для всех типичных страниц не надо каждый раз прописывать весь HTML-код в отдельности, достаточно создать один HTML-шаблон, в котором будет присутствовать плейсхолдер , который в момент генерации страницы будет заменен на контент конкретной страницы. Так же в шаблоне могут быть использованы и другие объекты MODx, такие как сниппеты, чанки, TV-параметры и т.п. Дополнительные параметры ( TV или Template Variables ). В шаблоне вызывается . Очень полезная штука. К примеру, в каждом документе у нас есть базовые поля (Заголовок, расширенный заголовок, псевдоним, контент и т.п.). Но мы хотим так же добавить поле, в котором мы будем указывать путь к картинке превью. Вот мы создаем новый TV-параметр, указываем для каких шаблонов он доступен, и в дальнейшем, когда мы будем редактировать документ с таким шаблоном, у нас будет дополнительное поле, с помощью которого мы сможем выбрать картинку для этого документа. А в шаблоне мы просто вставим , и в этом месте будет выводиться значение этого дополнительного параметра. Сниппеты ( Snippets ). В шаблоне вызываются (кэшируемый сниппет) или (некэшируемый сниппет). Данный элемент содержит исполняемый PHP-код (только). Переданные в сниппет параметры будут доступны внутри кода сниппета как PHP-параметры. К примеру вызываем (наклонные ковычки ` используются для более явного опраделения начала и конца строкового значения параметра). Внутри сниппета эти параметры нам будут доступны как $param1 и $param2. 

Рассмотрим простой пример: если вы хотите в  шаблоне, к примеру, выводить текущее время, вы можете создать сниппет date , в нем прописать <?php return date('Y-m-d H:i:s');, а в шаблоне вызвать . В результате при генерации страницы в месте вызова этого сниппета будут выведены дата и время.

Вот на этом простом примере мы сразу и рассмотрим разницу между выводом кэшируемого сниппета () и некэшируемого (). Если страница кэшируемая (указывается соответствующей галочкой в настройках каждой конкретной страницы), то в момент генерации конечной страницы создается ее кэш, и весь конечный HTML-код хранится в таком кэше, и в момент следующего вызова этой страницы не происходит повторной генерации страницы в полной мере, а просто отдается HTML-код из кэша. Так вот, если мы вызываем кэшируемый сниппет (), то результат выполнения этого сниппета (в нашем случае дата и время), будет закэширован, то есть при обращении к этой же странице мы увидим не актуальную дату, а старую, не меняемую. Для того, чтобы сниппет каждый раз опять выполнялся, мы вызываем его с восклицательным знаком, который указывает, что данный сниппет некэшируемый (). В результате у нас будет все закэшировано, кроме этого сниппета, который будет вызываться каждый раз при обращении к странице. Так, грамотно оперируя с моделью страницы, мы можем значительно снизить нагрузку на сервер, сократить время генерации страниц, и при этом не потерять в функциональности. Чанки ( Chunks ).  В шаблоне вызывается . Данный элемент используется для HTML-кода. Переданные в чанк параметры будут видны в коде чанка как плейсхолдеры, то есть .

К примеру у вас во всех шаблонах будет выводиться одно и то же меню. Не нужно в каждом шаблоне прописывать это меню. Достаточно создать свой пользовательский чанк , к примеру mainMenu , прописать в этом чанке код меню, а к нужны шаблонах в месте вывода меню просто прописать чанк . Так же в чанк вы можете прописать не только статический HTML, но и другие объекты MODx. К примеру, для динамического формирования меню вы используете сниппет Wayfinder. Тогда в чанке вы прописываете вызов сниппета с параметрами (если они нужны) &level=2&outerClass=`main`]], а чанк уже вставить в шаблон в виде . В процессе генерации страницы MODx обработает переменную и заменит ее на системную настройку корня сайта, передаст это значение в сниппет Wayfinder, который сгенерирует код меню и вернет этот код в чанк, а конечный код чанка в свою очередь будет выведен в шаблон в место расположения этого чанка.

Все это может показаться довольно сложным, но поверьте - это на самом деле очень удобно, так как вы четко отделяете логику от статики. Вы четко отделяете динамические и статические элементы, и используете их как конструктор, оперируя ими как отдельными сущностями. В результате, когда вам нужно будет что-то поменять, вы не будете ковырять весь движек, а будете редактировать четко отдельный элемент. А за нагрузку не беспокойтесь. В MODx шикарная система кэширования, и раз сгенерировав страницу, в следующий раз при обращении к этой странице большая часть логики уже лежит как статический HTML. Плейсхолдеры ( Placeholders ). В шаблоне вызываются . Плейсхолдеры - это статические переменные шаблонизатора. То есть если мы в шаблоне пропишем , то объявив плейсхолдер date и передав в него какое-либо значение, в момент обработки кода шаблонизатором, плейсхолдер будет заменен на его значение.

Плейсхолдер может быть объявлен двумяспособами: Как мы уже говорили выше, он может быть передан в виде параметра в чанк. Через API MODx в сниппете или плагине: $modx->setPlaceholder($placeholderNname, $value). Системные настройки . В шаблоне вызываются . В качестве системных настроек мы можем перехватить, к примеру, название сайта (), полный адрес сайта (), адрес корня сайта () и т.п., а можем и свои указывать. Все настройки можно увидеть во вкладке Система->Настройки системы.

Системные настройки - отдельная история и будут рассмотрены в отдельной статье. Плагины ( Plugins ). В шаблоне не вызываются никак. Плагины вызываются, срабатывая на определенные события (мы сами указываем на какие, к примеру OnWebPageInit , то есть  в момент инициализации страницы, или OnPageNotFound , то есть в момент, когда страница не найдена).

Конечно плагин можно вызвать и через API MODx, но это не правильно.

Плагины - очень мощный инструмент, позволяющий легко расширить платформу, практически не трогая кода самой платформы. К примеру, я хочу добавить свой модуль к системе. Создаем плагин, называем его как хотим, назначаем ему выполнение в момент иинициализации страницы. В плагине прописываем, наш PHP код. В момент инициализации страницы код нашего плагина срабатывает внутри системы с полным доступом к объекту $modx. В результате мы можем и работать с настройками платформы, и воздействовать на всю логику в целом и т.п.

Итак,  самое главное - это освоить эти элементы каждый в отдельности, и научиться использовать их совместно. В результате вы не заморачиваетесь с разработкой самой модели сайта, а программируете непосредственно сам сайт.

3D стерео фильмы для 5D
    Как купить билеты на поезд

    Я всегда в последнее время пользуюсь услугами настоящего интернет сайта. Он у меня внушает доверие. И здесь придбати квитки возможно в любое

    Ведущие корпоративов
    Хотя до наступления зимы осталось еще полтора месяца, многие коллективы уже сейчас планируют, как они будут встречать Новый год. Руководство рассматривает суммы, которые могли бы быть потрачены на корпоратив,

    Custom plugins and WordPress themes
    Шаблоны страниц в WordPress являются отличным способом изменить структуру страниц или добавить им функциональности. Создание собственного шаблона страниц может быть не простым делом, особенно для новичков,

    Продукт WooCommerce
    Каждый умный человек в современном мире прекрасно понимает, что в двадцать первом веке просто нельзя упускать возможность узнать или же научиться чему-либо новому. Особенно, если речь касается электронной

    Магазин видеонаблюдения
    При создании системы видеонаблюдения необходим целый ряд определенного оборудования. Для этого сегодня существует огромное количество различных магазинов по продаже специальной техники для организации

    Заказ такси в Киеве от 30 грн
    Если неудачи в жизни для вас нормой, в первую очередь необходимо проанализировать, откуда растут корни ваших проблем. Скорее всего, вы человек неорганизованный и постоянно опаздываете. В мегаполисе это

    Тайверб Тайверб
    Прочие ингредиенты: целлюлоза микрокристаллическая, повидон К30, натрия крахмалгликолят, магния стеарат, opadry желтый YS-1-12524-A. Лапатиниб содержится в форме лапатиниба дитосилата моногидрата. № UA/8847/01/01

    Шкафы купе в наличии
    Известно, что шкафы-купе поступили в ассортимент магазинов корпусной мели более 20 лет назад и сразу же заняли ведущие роли среди другой мебели. Их используют в помещениях, где разместить стандартный

    Копаксон
    Конкурентно замещает антигены миелина в местах связывания с молекулами главного комплекса гистосовместимости класса II на поверхности клеток, несущих антигены. Следствием этого является активация образования

    Begin.com.ua/
    Подбором персонала занимается HR-менеджер, но часто такая должность отсутствует в компании, и его обязанности берут на себя или директор, или его заместитель. Если выбор сотрудников окажется неправильным 

rss