Для упрощения логики парсинга, ускорения и избежания путаницы, все таги в MODX Revolution сделаны в едином формате, отличаются лишь токеном или набором токенов перед строкой, которая идентифицирует Элемент контента или Контент тег для его обработки; например [[tokenIdenticator]].
Формат тегов в MODX Revolution
Элементы контента Evolution (Старый) Revolution (Новый) Примеры для Revolution
Шаблоны нет представления тегом нет представления тегом
Поля ресурса [field] [[*field]] [[*pagetitle]]
Переменные шаблона [templatevar] [[*templatevar]] [[*tags]]
Чанки {{chunk }} [[$chunk]] [[$header]]
Сниппеты [[snippet]] [[snippet]] [[getResources]]
Плагины нет представления тегом нет представления тегом
Модули нет представления тегом не существует в Revolution, используйте ПСМ
Контент теги
Заполнители [+placeholder+] [[+placeholder]] [[+modx.user.id]]
Ссылки
[link]
[[link]]
[[[[*id]]? &scheme=full]]
Системные настройки
[(system_setting)]
[[++system_setting]]
[[++site_start]]
Языки нет представления тегом [[%language_string_key]]
Комментарий (см. ниже)) [[-это комментарий]]
Принятие нового формата в Revolution позволило новому парсеру быть полностью рекурсивным, использующем механизм, который не зависит от регулярных выражений.
Ранее какждый таг парсился независимо в особом порядке, один уровень за раз, встроенные теги ожидали своего прохода. Теперь теги парсятся так как они идут по очереди не зависимо от типа элемента, что они представляют и встроенные теги парсятся перед внешними для возможности создания более сложных конструкций из тего. Вместе с возможностью использования предварительно зарезервированного ? & и = символов в теговых строках, MODX контент теги являют мощный набор возможностей для управления контентом.
Теги комментарии
Эта дискуссия на форуме показывает, что некоторые люди испытывают потребность в тегах-комментариях. Поведение по-умолчанию, когда тег представляет несуществующий элемент, то он тихо игнорируется полностью. Используя это свойство вы можете добавлять комментарии в ваших шаблонах, чанках и содержимом и ничего из этого не будет видно во фронт-энде.
Так начиная с версии MODX Revolution 2.2, любой тег, что начинается с тире (-) игнорируется парсером и любые теги, которые он включает будут игнорироваться. До этой версии можно было использовать аналогичный приём, но теги в них парсились и оказывали влияние на производительность.
[[- этот комментарий может быть удалён]]
Структура Тега
Тег содержит много частей:
[[ (отрывающие теги)**
!** (опционально - некешируеммый флаг)**
elementToken** (опционально - токен идентифицирующий тип элемента, если он не сниппет, $=чанк, =поле ресурса/ТВ, +=заполнитель/плейсхолдер и др.)*
elementName****
@propertyset** (опционально - идентификатор Набора параметров)**
:filterName=modifier:… (опционально - один или несколько фильтров вывода)
?** (опционально; показывает начало строки параметров)**
&propertyName=propertyValue** &… (опционально; любые дополнительные параметры разделённые &)**
]]** (закрывающие теги)
Теги можно располагать на одной линии или в несколько. Любой вариант является приемлемым:
[[!getResources? &parents=123 &limit=5]]
[[!getResources?
&parents=123
&limit=5
]]
Параметры
Все теги - а не только сниппеты, в MODX принимают параметры и могут их использовать. Например, давайте возьмём чанк ‘Hello’ с содержимым:
Привет [[+name]]!
Теперь можно передать параметр этому чанку:
[[$Hello?name=Виктор]]
Это выведет
Привет Виктор!
Синтакс для параметров такой же как и в Эволюшн.
Кеширование
В Evolution сниппеты, которые должны были быть обработаны с каждым запросом должны быть на некешированной странице или Сниппет сам по себе должен был вызываться некешированно: [!snippet!]
В Revolution любой тег может быть вызван некешированно сразу же после двойных скобок: [[!snippet]], [[!$chunk]], [[!+placeholder]], [[!*template_var]], и др
Если у вас продвинутая установка, в которой настройка site_url - устанавливается по запросу, но ваши ссылки [[~[[*id]]]] не генерируются правильно, помните, что любой тег может вызываться некешированно включая ссылку или анкор-тег:
[[!~[[*id]]]]
В то же время, это вам нужно будет лишь тогда, когда site_url устанавливается динамически и отличается при запросах. Обычно используется кешированная запись.
Порядок парсинга
Если вы можете вызвать сниппет некешированно, то он будет выполнен в последнюю очередь парсинга.
Если у вас ещё ниже есть закешированные заполнители, то они будут определены перед выполнением Сниппета - это значит, что они получат последнее значение хранимое в кеше этого Сниппета ранее (или пустое, если ещё не было установлено).
Если вы хотите вызвать Сниппет некешированно, который установит заполнители, то вам нужно убедится, что заполнители некешированные тоже:
[[!Profile]] Привет [[!+username]]