Содержимое

Когда MODX установлен, настроен и загружены основные пакеты, можно приступать к разработке сайта.

Для начала давайте разберем архитектуру системы MODX и ее основные сущности, с которыми будем работать, и как они друг с другом связаны.

Сущности

Ресурсы

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

Ресурс может быть и обычной HTML страницей, и другим файлом - .css, .js, .php и так далее.

Есть 4 типа ресурсов - документ, ссылка, символическая ссылка и файл.

При разработке мы будем работать в основном с первым типом - документ, который представляет на выходе простую html страницу. Но остальные типы тоже могут быть полезны - например, при создании карты сайта MODX мы создаем ресурс типа Файл с расширением XML.

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

Если нам нужны дополнительные поля, например, цена товара или просмотры статьи - мы используем TV поля. Принцип их работы разберем дальше.

Шаблоны

За внешний вид ресурса отвечает шаблон. Если у ресурса не будет шаблона, то при открытии этой страницы в браузере выведется поле ресурса "содержимое".

Таким образом можно создавать любые страницы просто на HTML, CSS и JS, не вникая в синтаксис MODX.

Вопрос только, зачем тогда использовать шаблоны.

Давайте пойдем от совсем простого - у нас есть элементы, которые повторяются на каждой странице - шапка и подвал сайта.

Если разместить код каждой страницы в поле "содержимое", то при изменении кода шапки или подвала придется заходить и редактировать каждый ресурс. При большом количестве страниц это слишком долго и неудобно.

Тут на помощь приходят шаблоны. Мы создадим базовый шаблон с шапкой и подвалом, а между ними укажем поле "содержимое". Тогда шапку и подвал мы сможем редактировать один раз - в шаблоне, а контент странице отдельно в ресурсах.

Шаблон - это заранее сформированный код страницы, в котором мы указываем, где и какие поля ресурса, чанки или сниппеты нам вывести.

У большинства сайтов есть типовые страницы - статья, раздел, каталог, товар, вопрос-ответ и подобное. Каждый тип страницы - это отдельный шаблон.

Для создания шаблона мы возьмем верстку статьи, и вместо конкретного заголовка и текста просто укажем, что вы этих местах нужно вывести поля ресурса "заголовок" и "содержимое".

Теперь нужно "привязать" шаблон к ресурсу. Для этого на странице ресурса нужно выбрать в поле "Шаблон" нужный вариант. При генерации страницы MODX заменит указанные в шаблоне переменные на их значения у конкретного ресурса.

Можно также создать базовый шаблон страницы, где будет только шапка и подвал, а между ними будет выводиться содержимое ресурса. Это будет полезно для создания отдельных страниц, которые встречаются на сайте в единственном экземпляре - "о нас", "контакты", "правила", "доставка" и подобные, где шаблон как таковой не нужен.

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

Запомнили: ресурс - это страница или файл, шаблон - это верстка страницы, где указаны переменные, которые MODX заменяет на конкретные значения при генерации страницы. Ресурсу мы назначаем шаблон, но при этом ресурс может быть и без шаблона - тогда на странице выведется код поля "содержимое".

Чанки

Чанк - это дословно "кусок" кода. В чанках мы можем использовать только html, js, css и теги MODX. Чистый PHP в чанках работать не будет, но его можно вызывать через сниппеты, которые мы разберем дальше.

Зачем нужны чанки, если у нас уже есть шаблоны? Давайте представим, что нужно сделать 3 шаблона - "пустая страница", "товар" и "категория". В каждом из шаблонов нам нужна будет одинаковая шапка сайта и подвал, а также форма обратной связи.

По логике, шаблон - это верстка, поэтому мы сверстаем эти страницы в виде html, и слздаем шаблоны, правильно?

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

Было бы неплохо хранить и редактировать код этих элементов в одном месте, а вызывать в нужных местах как переменную, верно? Как раз для этого нужны чанки.

Мы создадим 3 новый чанка, например, tplHeader, tplFooter и tplForm - и в каждом размещаем соответствующий html код этого элемента.

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

Или, например, нам нужно вывести список статей. Айтем статьи в списке имеет определенную верстку, а их должно быть много. Размножать вручную, что ли? Нет - мы создаем чанк с разметкой превью статьи, и при вызове списка статей указываем его как шаблон. Как это делается, разберем позже, пока просто принцип работы чанков.

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

TV поля (поля шаблонов)

Temlate Value - в обиходе "TV поля". Как уже писал выше в разделе про ресурсы, TVs - это дополнительные поля для хранения информации о ресурсе. Например, цена товара, просмотры статьи, изображение товара и подобные.

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

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

Например, нам нужно создать поле "цена товара" - давайте разберем процесс пошагово.

Для начала создаем шаблон страницы товара - "Товар". Затем создаем ресурс и указываем у него в настройках шаблон "Товар". После создаем TV "Цена товара" и привязываем его к шаблону. Теперь у созданного ресурса появится дополнительное поле "Цена". Создавать можно и в другом порядке, я просто хочу показать связи.

Сниппеты

В отличие от чанков, где мы могли использовать только html, css и js, сниппеты - это как раз блоки PHP кода, которые могут либо просто выполнять какое-то действие, либо возвращать результат.

Зачастую сниппет возвращает HTML код или какое-то значение. Для использования большинство пакетов как раз вызываются сниппеты.

В чанке или шаблоне указывается вызов сниппета с определенными параметрами - при парсинге выполняется PHP код сниппета, сниппет вернет значение и оно подставится в место где вызван сниппет.

В какой-то степени сниппет можно рассмотреть, как функцию - он получает какие-то данные на вход и возвращает результат.

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

Однако для полноценной работы, в идеале подтянуть знания PHP и изучить MODX API - тогда Вы сможете разрабатывать нужные сниппеты самостоятельно, что сильно повышает вашу ценность как специалиста и дает гибкость при разработке сайтов на MODX.

Сниппеты - это универсальный инструмент, так как в них можно использовать MODX API и самостоятельно прописывать гибкую логику формирования ответа.

Плагины

Плагин - это также фрагмент PHP кода, но он как раз ничего не возвращает при генерации страницы, мы не можем вызвать его из шаблонов, чанков и тд.

Плагин будет выполняться по определенным событиям - например, при загрузке страницы на сайте, или при загрузке страницы ресурса в админке.

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

Например, плагин можно использовать, чтобы встроить на страницу админки собственные стили. Или чтобы перед рендерингом статьи на сайте прогнать текст через типограф.

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

Подобные фишечки иногда экономят кучу времени.

Системные настройки

@TODO: Дописать про системные настройки MODX

Синтаксис

Мы изучили основные сущности. Их можно использовать в виде тегов MODX - вызывать в шаблоне, в поле содержимого ресурса, в чанках, и с помощью API в сниппетах.

Формат вызова тегов:

  • [[$tplChunk]] - чанк
  • [[phpSnippet]] - сниппет
  • [[*pagetitle]] - поле ресурса
  • [[*TVValue]] - TV поле
  • [[++setting]] - системная настройка
  • [[~link]] - ссылка

Комментирование тегов

Кэширование тегов

Фильтры и модификаторы

Параметры

Подход к разработке

MODX в целом позволяет создать сайт без знания PHP - для этого в менеджере пакетов имеется целая куча дополнений, которые предоставляют готовый функционал - вывод листинга с пагинацией, вывод меню, хлебных крошек и подобного. Для создания всего этого без пакетов пришлось бы писать на PHP.

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

Из минусов - все равно нужно будет разбираться в работе пакетов и сниппетов из них, но они существуют уже достаточно давно и в сети есть куча информации, как официальной документации разработчиков, так и специалистов по MODX. И это проще, чем изучать PHP.

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

Переписывать решения на пакетах имеет смысл только для оптимизации нагрузки, так как пакеты - это универсальное решение, которое учитывает все возможные варианты использования и может быть "перегружено" функционалом для конкретного проекта.

Если вы собираетесь выполнять задачи по клиентским сайтам на MODX, скорее всего там будут использоваться пакеты, но могут встретиться и самописные решения, поэтому нужно уметь использовать оба варианта.

Кроме того, есть еще возможность использования других шаблонизиторов, например Fenom. Это дает дополнительное удобство при написании шаблонов, но концептуально ничего не меняется - вы все равно будете использовать чанки, сниппеты, устанавливать пакеты. Поэтому шаблонизиторы лучше изучать уже после хотя бы понимания базовых вещей.

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

Дополнительно

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

Надеюсь, эта статья объяснит основы разработки на MODX и поможет начать создавать сайты. Можете добавить ее в закладки браузера и поделиться в соцетях. Спасибо за прочтение!