Варианты тегов MODX
MODX предоставляет удобный массив тегов, различаемых токеном или набором токенов, которые появляются перед строкой. В приведенной ниже таблице указаны эти токены и где и как они могут быть использованы.
Тип | Токен | Пример | Использование |
---|---|---|---|
Коммент | - |
[[-Comment]] |
Определяет неразобранный комментарий. Например: [[-Это комментарий. Он будет удален из вывода страницы.]] |
Поле ресурса | * |
[[*fieldName]] |
Выводит значение поля, связанного с текущим ресурсом. Например: [[*pagetitle]] |
Переменная шаблона (TV) | * |
[[*tvName]] |
Выведите значение переменной шаблона. Например: [[*tags]] |
Чанк | $ |
[[$chunkName]] |
Определяет статический сниппет кода для визуализации. Например: [[$header]] |
Сниппет | [[snippetName]] |
Определяет сниппет кода PHP для выполнения. Например: [[pdoResources]] |
|
Плейсхолдер | + |
[[+placeholder]] |
Определяет плейсхолдер для значений из результатов запроса. Например: [[+pagetitle]] |
Ссылка | ~ |
[[~link]] |
Возвращает ссылку, полученную из значения. Например: [[~3? &scheme=full]] |
Настройки | ++ |
[[++settingName]] |
Определяет заполнитель специально для значений, определенных в системных настройках. Например: [[++site_name]] |
Язык | % |
[[%language]] |
Например: [[%string? &language=en &namespace=generic &topic=topic]] |
Деконструкция тега MODX
Тег MODX может быть расширен за счет дополнительных индикаторов и свойств. Приведенная ниже таблица полностью разбирает тег MODX и иллюстрирует, как и где можно использовать эти необязательные индикаторы и свойства.
Тип | Использование |
---|---|
[[ |
Открытие тега MODX. |
! |
указание, что тег НЕкешируемый (необязательно) |
Token |
тип элемента $ — чанк, * — поле элемента или ТВ, + — плейсхолдер, и т. д.Смотрите выше для большего количества вариантов |
Name |
Имя значения запрашиваемого элемента. |
@propertysetН |
Набор свойств для использования (необязательно) |
:modifier=`value` |
Определяет выходной фильтр или модификатор, который будет использоваться (необязательно) Пример: :gt=`0`:then=`Товар в доступен!` |
? |
Указывает MODX, что свойства сопровождают этот вызов. Требуется, если присутствуют свойства |
&property=`value` |
Определяет свойство и значение, которое будет использоваться с вызовом. Каждый набор свойств разделен & .Например: &prop1=`1` &prop2=`2` |
]] |
Закрытие тега MODX. |
Построение тега MODX
Используя и комбинируя всю вышеуказанную информацию, мы можем создать сложный тег MODX, который будет выглядеть следующим образом:
[[!MySnippet@myPropSet:filter1:filter2=`modifier`? &prop1=`x` &prop2=`y`]]
Однако, хотя MODX позволяет использовать сложные условные фильтры, пользователи должны быть осторожны при построении сложной логики тегов. В отличие от PHP, если у вас недопустимый синтаксис тега MODX, нет полезных сообщений с номерами строк, указывающими местоположение ошибки.
Наличие тегов, требующих отладки, отрицательно сказывается на чистом виде слоя. Держите их в чистоте и простоте.
Хорошее эмпирическое правило заключается в том, что ваши теги должны помещаться в одну строку, даже если вы разметите их на несколько строк для удобства чтения. Если вы полагаетесь на операторы if и другие условия в своих тегах MODX, тогда может потребоваться пересмотр логики потока.
Примечание MODX неоднозначен к пробелам, поэтому оба приведенных ниже примера также будут приемлемы:
[[!pdoResources?
&parents=`21`
&limit=`7`
]]
Свойства
Все теги MODX могут принимать свойства, не только Сниппеты.
В приведенном ниже примере у нас есть простой блок с именем «Hello».
Привет [[+name]]!
Внутри этого чанка у нас есть настройка плейсхолдера [[+name]]
для значения, которое будет отображаться. Мы можем передать это значение непосредственно в наш блок с помощью следующего кода:
[[$Hello? &name=`Николай`]]
Этот вызов будет выглядеть следующим образом:
Привет Николай!
Кеширование
Любой тег можно вызвать некэшированным, вставив восклицательный знак сразу после открывающей двойной скобки:
[[!snippet]]
, [[!$chunk]]
, [[!+placeholder]]
, [[!*template_var]]
, и так далее.
Если у вас есть какая-то расширенная настройка, в которой параметр site_url
устанавливается для каждого запроса, но ваш [[~[[*id]]]]
ссылки не генерируются должным образом, помните, что любой тег можно вызвать некэшированным, включая тег ссылки или якоря: [[!~[[*id]]]]
Тем не менее, вам понадобится только тогда, когда site_url
устанавливается динамически, может отличаться для каждого запроса, и вы генерируете полные URL-адреса вместо относительных. Любое нормальное использование может быть кэшировано.
Порядок разбора
Если вы вызовете некэшированный сниппет, он будет выполнен после обработки всех кэшированных тегов.
Если у вас есть кешированные плейсхолдеры ниже этого, они будут оцениваться до того, как будет выполнен этот сниппет — то есть они получат последнее значение, которое было сохранено в кэше ранее этим сниппетом (или пустым, если еще не установлено).
Если вы хотите вызвать Сниппет без кэширования, который устанавливает плейсхолдер, вам необходимо убедиться, что плейсхолдеры также установлены в некешированные:
[[!Profile]]
Привет [[!+username]]
Тайминг
В MODX есть несколько тегов синхронизации:
[^qt^]
— Время запроса — показывает, сколько времени MODX потратил на общение с базой данных[^q^]
— Количество запросов — Показывает, сколько запросов к базе данных выполнено MODX[^p^]
— Время разбора — показывает, сколько времени понадобилось MODX для разбора страницы[^t^]
— Общее время — показывает общее время, затраченное на анализ / рендеринг страницы.[^s^]
— Источник — показывает источник страницы, является ли база данных или кеш[^m^]
— Использование памяти — Показывает общий объем памяти, занятый для анализа / рендеринга страницы.
Проверка синтаксиса
Для многих новичков синтаксис тегов может показаться сложным, поэтому вы можете использовать плагин SyntaxChecker для проверки правильности написания тегов.
А лучше использовать редактор Ace, который хорошо подсвечивает синтаксив тегов MODX.