MODX. phx фильтры

Phx, что это, с чем, и как использовать?

Phx фильтры, или как их еще называют «модификаторы», позволяют выводить на страницах MODX информацию, с применением тех или иных условий. По сути, они являются упрощенной заменой php, которую можно применять в чанках. Можно использовать фильтры предусмотренные системой, или создавать свои, любой фильтр можно применять к любому тегу MODX.

Недостатки phx

У этого метода есть значительный недостаток — повышенная в сравнении с php и xpdo нагрузка на сервер, связанная с особенностью кеширования информации системой MODX. Не стоит увлекаться применением phx.

Часто встречаемые конструкции

[[*id:is=`1`:then=`[[$slider]]`]]

Если id страницы не 1 и страница — каталог, то... 

[[*id:ne=`1`:and:if=`[[*isfolder]]`:is=`1`:then=``]]

Предустановленные фильтры

условия

Модификатор Описание Пример
if,input if — задает дополнительное условие
input — добавляет в тег обратываемые данные
[[+phx:tag:input=`/assets/upload/img.jpg`]] — добавляем в тег phx входное значение, следующим модификатором, например, можно обработать изображение.<br /> [[*id:tag:is=`1`:and:if=`[[*id:tag]]`:ne=`2`:then=`yes`:else=`no`]] — если id-ресурса = 1 и не равно 2, выводим «yes», или же «no»
or,and or — условие «ИЛИ»
and — условие «И»
[[*id:tag:is=`1`:or:if=`[[*id:tag]]`:is=`2`:then=`yes`:else=`no`]] — если id-ресурса = 1 или = 2, выводим «yes», или же «no»
isequalto, isequal, equalto, equals, is, eq Если тег равен модификатору, используется с «then» и «else.» [[*id:tag:is=`1`:then=`yes`:else=`no`]] — если id-ресурса = 1, выводим «yes», или же «no»
notequalto, notequals, isnt, isnot, neq, ne Если тег не равен модификатору, используется с «then» и «else». [[*id:tag:ne=`1`:then=`yes`:else=`no`]] — если id-ресурса не равно 1, выводим «yes», или же «no»
greaterthanorequalto, equalorgreaterthen,ge, eg, isgte, gte Если тег больше или равен модификатору, используется с «then» и «else». [[*id:tag:ge=`1`:then=`yes`:else=`no`]] — если id-ресурса больше или равен 1, выводим «yes», или же «no»
isgreaterthan, greaterthan, isgt, gt Если тег больше модификатора, используется с «then» и «else». [[*id:tag:gt=`1`:then=`yes`:else=`no`]] — если id-ресурса больше 1, выводим «yes», или же «no»
equaltoorlessthan, lessthanorequalto, el, le, islte, lte Если тег меньше или равен модификатору, используется с «then» и «else». [[*id:tag:el=`10`:then=`yes`:else=`no`]] — если id-ресурса меньше или равно 10, выводим «yes», или же «no»
islowerthan, islessthan, lowerthan, lessthan, islt, lt Если тег меньше модификатора, используется с «then» и «else». [[*id:tag:lt=`10`:then=`yes`:else=`no`]] — если id-ресурса меньше 10, выводим «yes», или же «no»
hide Если предыдущий модификатор возвращает положительное значение («then»), то не выводим обработанный тег. [[*id:tag:is=`10`:hide]] — если id-ресурса = 10, ничего не выводим
show Если предыдущий модификатор возвращает положительное значение («then»), то выводим обработанный тег. [[*id:tag:is=`10`:show]] — если id-ресурса = 10, выводим.
then Условие, если тег соответствует модификатору, выводим сообщение, иначе ничего не выводим [[*id:tag:is=`10`:then=`ID is 10`]] — если id-ресурса = 10, выводим «ID is 10».
else Условие, если тег не соответствует модификатору, выводим сообщение. Используется только в связке с «then» [[*id:tag:is=`10`:then=`ID is 10`:else=`[[*id:tag]]`]] — если id-ресурса = 10, выводим «ID is 10» иначе выводим id текущей страницы.

строки

Модификатор Описание Пример
cat Добавляет к тегу строку. [[+num:cat=` раз`]], выведет "10 раз".
lcase, lowercase, strtolower Переведет значение тега в нижний регистр, аналогично функции php strtolower. [[*pagetitle:lcase]]
ucase, uppercase, strtoupper Переведет текст в верхний регистр, аналогично функции php strtoupper. [[*pagetitle:ucase]]
ucwords Переведет каждую первую букву, каждого слова в верхний регистр, аналогично функции php ucwords. [[*pagetitle:ucwords]]
ucfirst Переведет только первую букву строки в верхний регистр, аналогично функции phpucfirst. [[*pagetitle:ucfirst]]
htmlent, htmlentities Преобразует все символы в соответствющие HTML сущности (для тех символов, для которых HTML сущности существуют), аналогично функции phphtmlentities. Использует текущие настройки системы "modx_charset" с флагом "ENT_QUOTES". [[*pagetitle:htmlentities]]
esc,escape Экранирует разные "плохие символы", так же экранирует [, ] и `. [[*content:esc]]
strip Заменяет все переносы строк, табуляции и множественные пробелы с на один пробел. [[*content:strip]]
stripString Вырезает из строки заданную строку. [[*pagetitle:stripString=`modx`]]
replace Обычная замена. [[*pagetitle:replace=`modx==конфетка`]]
striptags, stripTags,notags,strip_tags Вырезает все теги, кроме разрешенных, аналогично функции php strip_tags [[*longtitle:strip_tags=``]]
len,length, strlen Возвращает длину строки, аналогично функции php strlen/td> [[*longtitle:strlen]]
reverse, strrev Переворачивает строку, аналогично функции php strrev [[*longtitle:reverse]]
wordwrap Устанавливает переносы в зависимости от количества символов слова, аналогично функции php wordwrap [[*pagetitle:wordwrap=`10`]]
limit Устанавливает лимит на длинну строки и обрезает ее. [[*pagetitle:limit=`10`]]
ellipsis Устанавливает лимит на длинну строки и обрезает ее, добавляя три точки в конце [[*pagetitle:ellipsis=`10`]]
tag Вернет, запись тега. [[*pagetitle:ellipsis=`10`:tag]] вернет: [[*pagetitle:ellipsis=`10`:tag]]
add, increment, incr Вернет, значение + модификатор ( по умолчанию +1 ). [[+num:incr]] или [[+num:add=`97`]]
subtract, decrement, decr Вернет, значение - модификатор ( по умолчанию -1 ). [[+num:decr]] или [[+num:decr=`97`]]
multiply, mpy Вернет, значение * модификатор ( по умолчанию *2 ). [[+num:mpy]] или [[+num:mpy=`5`]]
divide, div Вернет, значение / модификатор ( по умолчанию /2 ). [[+num:div]] или [[+num:div=`5`]]
modulus, mod Вернет, значение % модификатор ( по умолчанию %2 ). Вернет 1 или 0. [[+num:mod]] или [[+num:mod=`5`]]
ifempty, default, empty, isempty Вернет, указанный модификатор, если значение пусто. [[*pagetitle:empty=`Пусто`]]
notempty, !empty, ifnotempty, isnotempty Вернет, указанный модификатор, если значение не пусто. [[*pagetitle:!empty=`Не пусто!`]]
nl2br Вернет строку с "<br />" или "<br>" вставленные перед всеми (\r\n, \n\r, \n и \r)..., аналогично функции php nl2br [[*pagetitle:nl2br]]
date Аналогично функции PHP strftime. [[+birthyear:date=`%Y`]]
strtotime Аналогично функции PHP strtotime. Вернет дату. [[*createdon:strtotime]], - вернет типа "1505900347"
fuzzydate Вернет дату. Типа вчера, сегодня.... [[*createdon:fuzzydate]], - вернет типа "сент. 20"
ago Вернет дату в прошедших секундах, минутах, неделях или месяцах. [[*createdon:ago]], - вернет типа "5 месяцев назад"
md5 Аналогично функции php md5. [[+password:md5]].
cdata Вставляет строку в оболочку "CDATA" тегов. [[*pagetitle:cdata]].
userinfo Возвращает запрошенные модификаторов данные о пользователе. Значение должно быть id-пользователя ( modUser ). [[+modx.user.id:userinfo=`username`]].
isloggedin Возвращает true, если пользователь авторизирован в этом контексте. [[+modx.user.id:isloggedin]].
isnotloggedin Возвращает true, если пользователь не авторизирован в этом контексте. [[+modx.user.id:isnotloggedin]].
urlencode Аналогично функции php urlencode. [[+stringi:urlencode]].
urldecode Аналогично функции php urldecode. [[+stringi:urldecode]].

Создание своего фильтра

Модификаторы по сути являются сниппетами и создаются соответственно также. 

код сниппета с модификатором

<?php
return $input;

вызов модификатора

[[*content:имя_модификатора=`передаваемый текст`]]
Была ли статья полезной?