Главная Новости

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
rss