Фильтры-модификаторы PHx в Modx Revolution
Здравствуйте. Давно хотел себе под руку написать статью по фильтрам-модификаторам Modx Revo. В итоге просто скопировал сюда, чтобы самому использовать и другим в помощь
Примеры использования PHx фильтра в MODx
Пример 1:
Есть логотип на главной странице
<img src="logo.svg">
А это логотип на внутренних страниах. сссылкой на главную:
<a href="[[~1]]"><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`]]]]
Фильтры-модификаторы условия
Модификатор | Описание | Пример |
---|---|---|
if,input | if - задает дополнительное условие input - добавляет в тег обратываемые данные |
[[+phx:input=`/assets/img/photo.gif`]]- добавляем в тег phx входное значение, следующим модификатором, например, можно обработать изображение. Или [[+phx:input=`/assets/img/photo.gif`:contains=`photo.gif`:then=`da`:else=`net`]]проверить есть ли в пути определенная последовательность символов. [[*id:is=`1`:and:if=`[[*id]]`:ne=`2`:then=`da`:else=`net`]]- если id-ресурса = 1 и не равно 2, выводим "da", или же "net" |
or,and | or - условие "ИЛИ" and - условие "И" |
[[*id:is=`1`:or:if=`[[*id]]`:is=`2`:then=`da`:else=`net`]]- если id-ресурса = 1 или = 2, выводим "da", или же "net". [[*id:is=`1`:and:if=`[[*id]]`:ne=`2`:then=`da`:else=`net`]]- если id-ресурса = 1 и не равно 2, выводим "da", или же "net" |
isequalto, isequal, equalto, equals, is, eq | Если тег равен модификатору, используется с "then" и "else." |
[[*id:is=`1`:then=`da`:else=`net`]]- если id-ресурса = 1, выводим "da", или же "net" |
notequalto, notequals, isnt, isnot, neq, ne | Если тег не равен модификатору, используется с "then" и "else". |
[[*id:ne=`1`:then=`da`:else=`net`]]- если id-ресурса не равно 1, выводим "da", или же "net" |
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte | Если тег больше или равен модификатору, используется с "then" и "else". |
[[*id:ge=`1`:then=`da`:else=`net`]]- если id-ресурса больше или равен 1, выводим "da", или же "net" |
isgreaterthan, greaterthan, isgt, gt | Если тег больше модификатора, используется с "then" и "else". |
[[*id:gt=`1`:then=`da`:else=`net`]]- если id-ресурса больше 1, выводим "da", или же "net" |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte | Если тег меньше или равен модификатору, используется с "then" и "else". |
[[*id:el=`10`:then=`da`:else=`net`]]- если id-ресурса меньше или равно 10, выводим "da", или же "net" |
islowerthan, islessthan, lowerthan, lessthan, islt, lt | Если тег меньше модификатора, используется с "then" и "else". |
[[*id:lt=`10`:then=`da`:else=`net`]]- если id-ресурса меньше 10, выводим "da", или же "net" |
contains | Если тег содержит модификатор, используется с "then" и "else". |
[[+author:contains=`Сэ́мюэл Кле́менс`:then=`Марк Твен`]]- если в теге содержится фраза "Сэ́мюэл Кле́менс" выводим "Марк Твен" |
containsnot | Если тег не содержит модификатор, используется с "then" и "else". |
[[+author:containsnot=`Сэ́мюэл Кле́менс`:then=`Кто-нибудь еще`]]- если в теге не содержится фраза "Сэ́мюэл Кле́менс" выводим "Кто-нибудь еще" |
hide | Если предыдущий модификатор возвращает положительное значение ("then"), то не выводим обработанный тег. |
[[*id:is=`10`:hide]]- если id-ресурса = 10, ничего не выводим |
show | Если предыдущий модификатор возвращает положительное значение ("then"), то выводим обработанный тег. |
[[*id:is=`10`:show]]- если id-ресурса = 10, выводим. |
then | Условие, если тег соответствует модификатору, выводим сообщение, иначе ничего не выводим |
[[*id:is=`10`:then=`ept`]]- если id-ресурса = 10, выводим "ept". |
else | Условие, если тег не соответствует модификатору, выводим сообщение. Используется только в связке с "then" |
[[*id:is=`10`:then=`ept`:else=`nooo`]]- если id-ресурса = 10, выводим "ept" иначе "nooo". |
select | Установить свое значение, в зависимости от модификатора и вывода тега. Так же можно использовать "else", например если значение
[[+controls]]- не подходит под шаблон select |
[[+controls:select=`0=ВЫКЛ&1=ВКЛ&2=ХЗ`:else=`Ошибка`]]- если тег [[+controls]]- выводит "0", значит выводим "ВЫКЛ", если тот же тег равен "1" выводим "ВКЛ", если "2" выводим "ХЗ", если тег не подходит нашей выборке, то выводим "Ошибка". |
in | Работает аналогично php in_array, если тег совпадет с одним из элементов модификатора (разделяются они запятыми), то выводим then, если не совпало else |
[[*template:in=`3,4`:then=`[[$myChank]]`:else=`пробел`]]- если тег [[*template]](текущий шаблон) - равен "3" или "4", значит выводим [[$myChank]], если не равен, выводим else. |
Фильтры-модификаторы строки
Модификатор | Описание | Пример |
---|---|---|
cat | Добавляет к тегу строку. |
[[+num:cat=` раз`]]- выведет к примеру "10 раз" |
lcase, lowercase, strtolower | Переведет значение тега в нижний регистр, аналогично функции php strtolower. |
[[*pagetitle:lcase]] |
ucase, uppercase, strtoupper | Переведет текст в верхний регистр, аналогично функции php strtoupper. |
[[*pagetitle:ucase]] |
ucwords | Переведет каждую первую букву, каждого слова в верхний регистр, аналогично функции php ucwords. |
[[*pagetitle:ucwords]] |
ucfirst | Переведет только первую букву строки в верхний регистр, аналогично функции php ucfirst. |
[[*pagetitle:ucfirst]] |
htmlent, htmlentities | Преобразует все символы в соответствющие HTML сущности (для тех символов, для которых HTML сущности существуют), аналогично функции php htmlentities. Использует текущие настройки системы "modx_charset" с флагом "ENT_QUOTES". |
[[*pagetitle:htmlentities]] |
esc,escape | Экранирует разные "плохие символы", так же экранирует
[, ] и `. |
[[*content:esc]] |
strip | Заменяет все переносы строк, табуляции и множественные пробелы с на один пробел. |
[[*content:strip]] |
stripString | Вырезает из строки заданную строку. |
[[*pagetitle:stripString=`писька`]] |
replace | Обычная замена. |
[[*pagetitle:replace=`писька==конфетка`]] |
striptags, stripTags,notags,strip_tags | Вырезает все теги, кроме разрешенных, аналогично функции php strip_tags |
[[*longtitle:strip_tags=``]]
|
len,length, strlen | Возвращает длину строки, аналогично функции php strlen |
[[*longtitle:strlen]] |
reverse, strrev | Переворачивает строку, аналогично функции php strrev |
[[*longtitle:reverse]] |
wordwrap | Устанавливает переносы в зависимости от кол-ва символов слова, аналогично функции php wordwrap |
[[*pagetitle:wordwrap=`10`]] |
limit | Устанавливает лимит на длинну строки и обрезает ее. |
[[*pagetitle:limit=`10`]] |
ellipsis | Устанавливает лимит на длинну строки и обрезает ее, добавляя три точки в конце |
[[*pagetitle:ellipsis=`10`]] |
tag | Экранирование. Отображает элемент так как он есть, без :tag. Для использования в документации |
[[+showThis: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]] [[*pagetitle:nl2br]] |
date | Аналогично функции PHP strftime. Значение - отформатировано. |
[[+birthyear:date=`%Y`]] |
strtotime | Аналогично функции PHP strtotime. Вернет дату. |
[[*createdon:strtotime]]- вернет типа "2017-03-15 08:02:08" |
fuzzydate | Вернет дату. Типа вчера, сегодня.... |
[[*createdon:fuzzydate]]- вернет типа "Mar 15" |
ago | Вернет дату в прошедших секундах, минутах, неделях или месяцах. |
[[*createdon:ago]]- вернет типа "4 гг., 2 мес. назад" |
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]] |
toPlaceholder | Помещает результат вывода тега в плейсхолдер, причем там где был помещен - ничего не выводится, а телепортируется в указанный плейсхолдер. До этого модификатора можно использовать любые другие модификаторы. |
[[+number:toPlaceholder=`итого`]]помещает содержимое [[+number]]в плейсхолдер [[+итого]]
Можно усложнять запись добавляя в левую часть выражения любые другие модификаторы:
[[+number:is=`10`:then=`ровно 10`:else=`точно не 10!`:toPlaceholder=`итого`]]если [[+number]]= 10, тогда выводим в плейсхолдер [[+итого]]
: "ровно 10", если же нет "точно не 10!". |
cssToHead | Прописывает файл CSS в <link> элемент перед закрывающим тегом </head>, где значение тега модификатора вписывается в аттрибут "href". Используется modX.regClientCSS. |
[[+cssTV:cssToHead]]перед закрывающим тегом </head> регистрирует CSS, например: <link rel="stylesheet" href="значение +cssTv" type="text/css" /> |
htmlToHead | Вписывает значение тега перед закрывающим тегом </head>. Используется modX.regClientStartupHTMLBlock. |
[[+htmlTV:htmlToHead ]]перед закрывающим тегом </head>, регистрирует значение тега [[+htmlTV]]в HTML код. |
htmlToBottom | Вписывает значение тега перед закрывающим тегом </body>. Используется
modX.regClientHTMLBlock |
[[+htmlTV:htmlToBottom]]перед закрывающим тегом </body> регистрирует значение тега [[+htmlTV]]в HTML код. |
jsToHead | Прописывает файл JS в <link> элемент перед закрывающим тегом </head>. Используется
modX.regClientStartupScript |
[[+jsTV:jsToHead]]перед закрывающим тегом </head>, регистрирует JS, например: <script type="text/javascript" src="значение +jsTv"></script> |
jsToBottom | Прописывает файл JS в <link> элемент перед закрывающим тегом </body>. Используется
modX.regClientScript |
[[+jsTV:jsToBottom]]перед закрывающим тегом </body>, регистрирует JS, например: <script type="text/javascript" src="значение +jsTv"></script> |
urldecode | Аналогично функции php urldecode |
[[+stringi:urldecode]] |
Вывод информации о пользователе
Внутренний ключ пользователя:
[[!+modx.user.id:userinfo=`internalKey`]]
Логин:
[[!+modx.user.id:userinfo=`username`]]
Полное имя:
[[!+modx.user.id:userinfo=`fullname`]]
Роль:
[[!+modx.user.id:userinfo=`role`]]
E-mail:
[[!+modx.user.id:userinfo=`email`]]
Телефон:
[[!+modx.user.id:userinfo=`phone`]]
Мобильный телефон:
[[!+modx.user.id:userinfo=`mobilephone`]]
Факс:
[[!+modx.user.id:userinfo=`fax`]]
День рождения:
[[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]]
Пол:
[[!+modx.user.id:userinfo=`gender`]]
Страна:
[[!+modx.user.id:userinfo=`country`]]
Штат:
[[!+modx.user.id:userinfo=`state`]]
Zip код:
[[!+modx.user.id:userinfo=`zip`]]
Фото:
[[!+modx.user.id:userinfo=`photo`]]
Комментарий:
[[!+modx.user.id:userinfo=`comment`]]
Дата последнего входа:
[[!+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]]
Количество входов:
[[!+modx.user.id:userinfo=`logincount`]]
[[!+modx.user.id]]
возвращает ID вошедшего в систему пользователя. Вы, конечно, можете заменить, его на
[[*createdby]]
или другое поле ресурса или любой плейсхолдер, который возвращает числовое представление ID пользователя.
Обратите внимание, что ID пользователя и его логин уже доступны по умолчанию в MODX, так что вам не нужно использовать модификатор User Info:
[[!+modx.user.id]]
- Выведет ID пользователя
[[!+modx.user.username]]
- Выведет логин пользователя
Особое внимание обращаем на восклицательный знак !
[[!+modx.user.id]]
Он позволяет НЕ кэшировать содержимое вывода. Лучше всего эти плейсхолдеры вызывать некешируемыми, чтобы избежать неожиданных результатов. Почему нужно не кешировать...
Комментарии ()