Фильтры ввода/вывода MODX Revolution PHx (модификаторы)

В этой статье мы расскажем о самых актуальных на 2016 год PHx фильтрах (модификаторах). В конце статьи вы найдёте ссылку на материал о том, как увеличить скорость обработки тегов с фильтрами и общую оптимизацию.

Что такое PHx фильтры?


PHx фильтры в MODX Revolution позволяют обрабатывать значения тегов непосредственно в шаблонах, сниппетах и чанках.

Как и зачем использовать PHx фильтры?


Пример 1:

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

Т.к. в MODX чаще всего вы используете шаблоны страниц, в данном случае вам бы потребовалось создать два шаблона.
Один для главной без ссылки:
<img src="logo.svg">
Второй для внутренних страниц со ссылкой:
<a href="index.html"><img src="logo.svg"></a>
Это неудобно.

С помощью PHx модификатора is (равенство) вы можете сделать так:
[[*id:is=`1`:then=`<img src="logo.svg">`:else=`<a href="[[~1]]"><img src="logo.svg"></a>`]]
Если id страницы равен 1, вернуть логотип со ссылкой, а если id не равен 1, вернуть логотип без ссылки.
Тем самым вы избавляетесь от создания двух практически идентичных шаблонов и обходитесь одним, но с модификатором вывода.

Пример 2:

Нам требуется вывести разные названия страницы в зависимости от шаблона.
[[*template:is=`1`:or:is=`2`:then=`[[*pagetitle]]`:else=`[[*longtitle]]`]]
Если шаблон страницы равен 1 или равен 2, вернуть [[*pagetitle]], иначе вернуть [[*longtitle]]
Как видите, можно использовать несколько модификаторов в одной цепочке.

Хотя, правильнее было бы написать так:
[[[[*template:is=`1`:or:is=`2`:then=`*pagetitle`:else=`*longtitle`]]]]
Почему? Ответ будет в следующей статье "Оптимизация PHx фильтров ввода/вывода (модификаторов) в MODX Revolution".

PHx модификаторы условия


PHx модификатор
Описание Пример
if, input
if — дополнительное условие "если"
input — добавляет в тег данные для обработки
[[*id:is=`1`:and:if=`[[*template]]`:ne=`2`:then=`Yes`]]
Если id равен 1 и template не равен 2, возвращаем Yes.
[[*content:input=`Текст красивый`:ucase]]
C помощью модификатора input назначим тегу content значение и модифицируем его.
or, and
or — условие "ИЛИ"
and — условие "И"
[[*id:is=`1`:or:is=`2`:then=`Yes`]]
Если id равен 1 или 2, возвращаем Yes.
[[*id:is=`1`:and:if=`[[*template]]`:is=`2`:then=`Yes`]]
Если id равен 1 и template равен 2, возвращаем Yes.
is
синонимы
isequalto, isequal, equalto, equals, eq

Если значение тега равно значению модификатора, выполняется
следующее действие или модификатор. Используется с «then» и «else».
[[*id:is=`1`:then=`Yes`:else=`No`]]
Если id равен 1, возвращаем Yes, иначе Нет.
ne
синонимы
notequalto, notequals, isnt, isnot, neq

Если значение тега не равно значению модификатора, выполняется
следующее действие или модификатор. Используется с «then» и «else».
[[*id:ne=`1`:then=`Yes`:else=`No`]]
Если id не равен 1, возвращаем Yes, иначе Нет.
ge
синонимы
greaterthanorequalto, equalorgreaterthen, eg, isgte, gte

Если значение тега больше или равно значению модификатора, выполняется
следующее действие или модификатор. Используется с «then» и «else».
[[*id:ge=`1`:then=`Yes`:else=`No`]]
Если id больше или равен 1, возвращаем Yes, иначе Нет.
gt
синонимы
isgreaterthan, greaterthan, isgt

Если значение тега больше значения модификатора, выполняется
следующее действие или модификатор. Используется с «then» и «else».
[[*id:gt=`1`:then=`Yes`:else=`No`]]
Если id больше 1, возвращаем Yes, иначе Нет.
el
синонимы
equaltoorlessthan, lessthanorequalto, le, islte, lte

Если значение тега меньше или равно значению модификатора, выполняется
следующее действие или модификатор. Используется с «then» и «else».
[[*id:el=`1`:then=`Yes`:else=`No`]]
Если id меньше или равен 1, возвращаем Yes, иначе Нет.
lt
синонимы
islowerthan, islessthan, lowerthan, lessthan, islt

Если значение тега меньше значения модификатора, выполняется
следующее действие или модификатор. Используется с «then» и «else».
[[*id:lt=`1`:then=`Yes`:else=`No`]]
Если id меньше 1, возвращаем Yes, иначе Нет.
contains
Если значение тега содержит значение модификатора, выполняется
следующее действие или модификатор. Используется с «then» и «else».
Регистрозависимый!
[[*content:contains=`Искомый текст`:then=`Yes`:else=`No`]]
Если content содержит строку «Искомый текст», возвращаем Yes, иначе Нет.
containsnot
Если значение тега не содержит значение модификатора, выполняется
следующее действие или модификатор. Используется с «then» и «else».
Регистрозависимый!
[[*content:containsnot=`Искомый текст`:then=`Yes`:else=`No`]]
Если content не содержит строку «Искомый текст», возвращаем Yes, иначе Нет.
Отредактировать

Комментарии (0)

Напишите комментарий