Синтаксис тегов в MODX Revolution
Для упрощения логики парсинга, ускорения и избежания путаницы, все таги в 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]], и др
[[!~[[*id]]]]
В то же время, это вам нужно будет лишь тогда, когда site_url устанавливается динамически и отличается при запросах. Обычно используется кешированная запись.
Порядок парсинга
Если вы можете вызвать сниппет некешированно, то он будет выполнен в последнюю очередь парсинга.
Если у вас ещё ниже есть закешированные заполнители, то они будут определены перед выполнением Сниппета - это значит, что они получат последнее значение хранимое в кеше этого Сниппета ранее (или пустое, если ещё не было установлено).
Если вы хотите вызвать Сниппет некешированно, который установит заполнители, то вам нужно убедится, что заполнители некешированные тоже:
[[!Profile]] Привет [[!+username]]02-10-2012 перевод документации Виктор Матушевский
Денис Васильев
03.02.2014 09:33— вы не поставили знак амперсанда (&) перед параметром name
В подразделе про кэширование у вас написано "В Revolution любой тег может быть вызван некешированно сразу же после двойных кавычек" — не двойных кавычек, а двойных скобок (или двойных открывающихся скобок)