Фильтры phx ( модификаторы ) в MODx REVOLUTION. Модификаторы modx
Фильтры ввода-вывода - Модификаторы MODX Revolution
Фильтры в MODX Revolution позволяют обрабатывать и изменять значения тегов внутри ваших шаблонов, чанков, сниппетах. В настоящее время фильтры ввода используются при подготовке к обработке фильтров вывода. Обычно они используются только внутри ядра MODX.
Фильтры вывода
В MODX Revolution фильтры вывода используются как один или нескольких модификаторов вывода, они схожи с PHx вызовами в MODx Evolution, но отличаются тем, что уже изначально встроены в ядро.
Синтаксис модификаторов:
[[element:modifier=`value`]]Фильтры могут применяться последовательно (пишутся слева направо):
[[element:modifier=`value`:anothermodifier=`value2`:andanothermodifier:yetanother=`value3`]]Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):
[[Snippet:modifier=`value`? &SnippetParam=`something`]]
Модификаторы вывода
В таблице представлены некоторые модификаторы и примеры их использования. В примерах они применяются к плейсхолдерам, но вы должны помнить, что модификаторы могут применяться к любым тегам MODX.
Модификатор | Описание | Пример использования |
if, input | ||
or | Объединение нескольких модификаторов связью ИЛИ | [[+numProducts:is=`10`:or:is=`11`:then=`Здесь 10 или 11 товаров`:else=`Не уверен, сколько товаров`]] |
and | Объединение нескольких модификаторов связью И | |
isequalto, isequal, equalto, equals, is, eq | Сравнивает передаваемое значение с установленным. Если значения совпадают, выводится значение «then», если нет — «else» | [[+numProducts:isequalto=`10`:then=`Здесь 10 товаров`:else=`Не уверен, сколько товаров`]] |
notequalto, notequals, isnt, isnot, neq, ne | Сравнивает передаваемое значение с установленным. Если значения НЕ совпадают, выводится значение «then», если нет — «else» | [[+numProducts:notequalto=`10`:then=`Не уверен, сколько товаров`:else=`Здесь 10 товаров`]] |
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte | То же, только условие «Больше или равно» | [[+numProducts:gte=`10`:then=`Здесь 10 товаров или больше`:else=`Здесь меньше 10 товаров`]] |
isgreaterthan, greaterthan, isgt, gt | То же, только условие «Строго больше» | [[+numProducts:gt=`10`:then=`Здесь больше 10 товаров`:else=`Здесь 10 товаров или меньше`]] |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte | То же, только условие «Меньше или равно» | [[+numProducts:lte=`10`:then=`Здесь 10 товаров или меньше`:else=`Здесь больше 10 товаров`]] |
islowerthan, islessthan, lowerthan, lessthan, islt, lt | То же, только условие «Строго меньше» | [[+numProducts:lte=`10`:then=`Здесь меньше 10 товаров`:else=`Здесь 10 товаров или больше`]] |
hide | Скрывает элемент, если условие выполняется | [[+numProducts:lt=`1`:hide]] |
show | Отображает элемент, если условие выполняется | [[+numProducts:gt=`0`:show]] |
then | Используется для составления условий | [[+numProducts:gt=`0`:then=`Товары в наличии!`]] |
else | Используется для составления условий (совместно с «then») | [[+numProducts:gt=`0`:then=`Товары в наличии!`:else=`Простите, но все продано.`]] |
select | ||
memberof, ismember, mo | Проверяет, является ли пользователь членом указанной группы пользователей | [[+modx.user.id:memberof=`Administrator`]] |
Модификаторы для работы со строками
cat | Добавляет значение после тега | [[+numProducts:cat=` товаров`]] |
lcase, lowercase, strtolower | Переводит все буквы в нижний регистр | [[+title:lcase]] |
ucase, uppercase, strtoupper | Переводит все буквы в верхний регистр | [[+longtitle:ucase]] |
ucwords | Делает первую букву в словах заглавной | [[+title:ucwords]] |
ucfirst | Делает первую букву в строке заглавной | [[+name:ucfirst]] |
htmlent, htmlentities | Преобразует все символы в HTML-сущности | [[+email:htmlent]] |
esc,escape | Безопасно экранирует символы, используя регулярные выражения и str_replace. Также экранирует символы [, ] и ` | [[+email:escape]] |
strip | Заменяет все переносы, табуляции и любое количество пробелов только одним пробелом | [[+textdocument:strip]] |
stripString | Вырезает из строки указанную подстроку | [[+name:stripString=`Mr.`]] |
replace | Производит замену подстрок | [[+pagetitle:replace=`Mr.==Mrs.`]] |
striptags, stripTags,notags,strip_tags | Вырезает все теги (можно указать разрешенные теги). | [[+code:strip_tags=`<p>`]] |
len,length, strlen | Выводит длину строки | [[+longstring:strlen]] |
reverse, strrev | Переворачивает строку символ за символом | [[+mirrortext:reverse]] |
wordwrap | Вставляет перенос строки после каждого n-ого символа (слова не разбиваются) | [[+bodytext:wordwrap=`80`]] |
wordwrapcut | Вставляет перенос строки после каждого n-ого символа, даже если этот символ будет внутри слова | [[+bodytext:wordwrapcut=`80`]] |
limit | Выводит определенное количество символов с начала строки (значение по умолчанию — 100) | [[+description:limit=`50`]] |
ellipsis | Добавляет многоточие и обрезает строку, если она длиннее, чем определенное количество символов (значение по умолчанию — 100) | [[+description:ellipsis=`50`]] |
tag | Экранирование. Отображает элемент так как он есть, без:tag. Для использования в документации | [[+showThis:tag]] |
math | Возвращает результат продвинутых вычислений (нагружает на процессор. Не рекомендуется) | |
add,increment,incr | Прибавляет указанное число (значение по умолчанию +1) | [[+downloads:incr]][[+blackjack:add=`21`]] |
subtract,decrement,decr | Вычитает указанное число (значение по умолчанию -1) | [[+countdown:decr]][[+moneys:subtract=`100`]] |
multiply,mpy | Умножает на указанное число (значение по умолчанию *2) | [[+trifecta:mpy=`3`]] |
divide,div | Делит на указанное число (значение по умолчанию /2) | [[+rating:div=`4`]] |
modulus,mod | Возвращает модуль числа(по-умолчанию: %2, возвращает 0 или 1)) | [[+number:mod]] |
ifempty,default,empty, isempty | Возвращает значение модификатора, если значение тега пусто | [[+name:default=`anonymous`]] |
notempty, !empty, ifnotempty, isnotempty | Возвращает значение модификатора, если значение тега НЕ пусто | [[+name:notempty=`Привет, [[+name]]!`]] |
nl2br | Заменяет символы новой строки (\n) на HTML-тег <br /> | [[+textfile:nl2br]] |
date | Переводит таймстамп в текст, в соответствии с указанным форматом (Формат даты) | [[+birthyear:date=`%Y`]] |
strtotime | Переводит дату в виде текста в UNIX таймстамп | [[+thetime:strtotime]] |
fuzzydate | Возвращает дату в формате «вчера, сегодня, …». Принимает значение даты. | [[+createdon:fuzzydate]] |
ago | Возвращает число секунд, минут, недель или месяцев, прошедших с даты, указанной в теге. | [[+createdon:ago]] |
md5 | Создает MD5-хеш значения | [[+password:md5]] |
cdata | Оборачивает вывод тегами CDATA | [[+content:cdata]] |
userinfo | Возвращает запрашиваемое значение из профиля пользователя. Необходимо указывать ID пользователя | [[+modx.user.id:userinfo=`username`]] |
isloggedin | Возвращает true, если пользователь аутентифицирован в текущем контексте | [[+modx.user.id:isloggedin]] |
isnotloggedin | Возвращает true, если пользователь НЕаутентифицирован в текущем контексте | [[+modx.user.id:isnotloggedin]] |
urlencode | Конвертирует значение в URL | [[+mystring:urlencode]] |
urldecode | Конвертирует значение из URL | [[+myparam:urldecode]] |
Кеширование
В общем случае, содержимое плейсхолдера, которое изменяется динамически, не должно кешироваться.Например:
[[+placeholder:default=`К сожалению, ничего не найдено`]]Результат работы примера может быть пустым, а может и нет. Как мы можем кешировать это? Пример, приведенный выше, отражает природу модификатора вывода.Возможно применение модификаторов вывода в кешируемом плейсхолдере — но только если Сниппет может быть кеширован. Иначе, мы совершаем алогичное действие — пытаемся кешировать то, что не является статическим содержимым. Получаем правило: нельзя устанавливать кеширование плейсхолдера в некешируемом сниппете, если результат работы сниппета может изменяться.
Использование модификаторов вывода совместно с параметрами
Если у тега есть параметры, то их необходимо прописывать сразу после модификатора:
[[!pdoResources:default=`К сожалению, ничего не найдено`?&parents=`5`&depth=`5`&tpl=`news_tpl`&includeTVs=`image`]]Создание пользовательского модификатора
Любой сниппет может использоваться и как модификатор вывода. Для его использования просто укажите имя сниппета вместо модификатора. К примеру, создадим сниппет makeExciting, добавляющий к выводу определенное количество восклицательных знаков:
[[*pagetitle:makeExciting=`4`]]Такой вызов тега передаст в сниппет makeExciting следующие параметры для обработки:
Значение | Значение в примере | |
input | Значение элемента | В переменной $input будет значение заголовка страницы ([[*pagetitle]]) |
options | Значение модификатора (после знака =) | $options = 4; |
token | Тип элемента | $token = «*«; (символ, определяющий, что данный элемент — поле ресурса |
name | Имя элемента | $name = «pagetitle»; |
tag | Весь тег полностью | $tag = «[[*pagetitle:makeExciting=`4`]]«; |
Модификатор UserInfo
Прямой доступ к данным из таблицы modx_user_attributes в базе данных, с помощью модификаторов вывода вместо сниппетов, может быть достигнуто просто за счет использования модификатора UserInfo. Выберите нужный столбец из таблицы и укажите его в качестве свойства модификатора, например, так:
Значение | Модификатор |
Внутренний ключ пользователя | [[!+modx.user.id:userinfo=`internalKey`]] |
Логин | [[!+modx.user.id:userinfo=`username`]] |
Полное имя | [[!+modx.user.id:userinfo=`fullname`]] |
Роль | [[!+modx.user.id:userinfo=`role`]] |
[[!+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`]] |
Почтовый индекс | [[+modx.user.id:userinfo=`zip`]] |
Фото | [[+modx.user.id:userinfo=`photo`]] |
Комментарий | [[+modx.user.id:userinfo=`comment`]] |
Пароль | [[+modx.user.id:userinfo=`password`]] |
Кеш пароля | [[+modx.user.id:userinfo=`cachepwd`]] |
Последняя авторизация | [[+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]] |
[[+modx.user.id:userinfo=`thislogin`:date=`%Y-%m-%d`]] | |
Количество авторизаций | [[+modx.user.id:userinfo=`logincount`]] |
[[!+modx.user.id]] возвращает ID вошедшего в систему пользователя. Вы, конечно, можете заменить, его на [[*createdby]] или другое поле ресурса или любой плейсхолдер, который возвращает числовое представление ID пользователя.
Обратите внимание, что ID пользователя и его логин уже доступны по умолчанию в MODX, так что вам не нужно использовать модификатор UserInfo:
[[!+modx.user.id]] — Выведет ID пользователя[[!+modx.user.username]] — Выведет логин пользователя
Лучше всего эти плейсхолдеры вызывать некешируемыми, чтобы избежать неожиданных результатов.
Также фильтры можно использовать несколькими способами (что уменьшает время их выполнения):
// Используем модификатор:[[+title:lcase]][[+something:notempty=`Hello[[+name]]`]]// Используем сниппет:[[lcase? &subject=`title`]][[notempty? &subject=`something` &then=`Hello[[+name]]`]]
// Используем общий сниппет фильтра:[[Filter? &subject=`title` &operator=`lcase`]][[Filter? &subject=`something` &operator=`notempty` &meter=`Hello [[+name]]`]]
www.modx.cc
Фильтры phx и модификаторы в modx revolution
Сегодня полезная статья про фильтры phx и их модификаторы при помощи которых вы сможете прямо внутри шаблонов, манипулировать значением различных тегов.
Зачем они нужны?
phx модификаторы облегчают жизнь modx разработчикам. Допустим у нас есть сайт с каруселью изображений (ну или с баннером), который нужно выводить только на главной странице. Для этого достаточно поместить его в отдельный чанк и затем вывести в шаблоне при помощи такой конструкции
[[*id:is=`1`:then=`[[$carusel]]`]]
[[*id:is=`1`:then=`[[$carusel]]`]] |
Где: 1 — id главной страницы,$carusel — чанк с кодом карусели (баннера).Только полные чайники создают новый шаблон, ради нескольких строк кода карусели. Я тоже таким был, в общем не отчаиваемся и внедряем phx в разработку.
Разберем вышеприведенную конструкцию по подробнее:
[[*id:is=`1`:then=`[[$carusel]]`]]
[[*id:is=`1`:then=`[[$carusel]]`]] |
*id — выводит id текущей страницы;
— проверяет равно ли *id == 1? и если равно, то выводится содержимое then;$carusel — выводит чанк carusel.
Вместо *id, можно использовать и другие поля, например *template — выведет текущий используемый шаблон. Либо можно проверять заполнено или нет TV-поле (пусть будет *keywords) и если оно заполнено, то выводить его. Разберем данный случай поподробнее. Дано стандартная разметка:
<meta name="keywords" content="ключ, ключ, ключ">
<meta name="keywords" content="ключ, ключ, ключ"> |
Задача: не выводить эту строку, если TV keywords не заполнено.Решение.
[[*keywords:!empty=`<meta name="keywords" content="*keywords">`]]
[[*keywords:!empty=`<meta name="keywords" content="*keywords">`]] |
Нагрузки
Нужно следить за обработкой модификаторов, бездумное их использование вызовет лишние нагрузки. Вернемся к карусели, данная запись считывается слева направо и МОДХ выполняет все вложенные условия, в независимости от того, верное условие или нет, будет ли выводится на текущей странице содержимое [[$carusel]], в любом случае его содержимое обработается. В связи с этим более целесообразно переписать запись:
[[$caru[[*id:is=`1`:then=`sel`]]]]
[[$caru[[*id:is=`1`:then=`sel`]]]] |
В этом случае, содержимое чанка $carusel, будет обработано в случае, если выполняется условие
т.к. выполняется
[[*id:is=`1`:then=`sel`]]
[[*id:is=`1`:then=`sel`]] |
и если id текущей страницы равно 1, последнее что обрабатывается — [[$carusel]], если id не равно 1, тогда — [[$caru]]. А если чанка $caru — нет в элементах, то и нагрузки не будет.
А вообще идеальный вывод будет выглядеть так.
[[$[[*id:is=`1`:then=`carusel`]]]]
[[$[[*id:is=`1`:then=`carusel`]]]] |
О том, как правильно интегрировать верстку в modx revo в рекомендую почитать здесь.
Примечание! Вы можете комбинировать сколько угодно модификаторов под логику работы компонентов сайта, но главное помните, их основная суть — облегчить разработку, а не усложнять без того сложные задачи. Обычно, самый эффективный и действенный способ — это самый простой, так как чем проще и понятней конструкция — тем легче с ней будет работать в дальнейшем. Ниже перечислены основные модификаторы, которые можете использовать для любого тега МОДХ Рево.
Модификаторы условия
Модификаторы строки
Цепочки модификаторов
Хорошим примером построения цепочки будет отформатировать строку даты в другой формат, например, так:
[[+mydate:strtotime:date=`%Y-%m-%d`]]
[[+mydate:strtotime:date=`%Y-%m-%d`]] |
Прямой доступ к таблице «modx_user_attributes» в базе данных с использованием выходных модификаторов вместо сниппета можно осуществить просто путем использования модификатора userinfo. Выбрать соответствующий столбец из таблицы и указать его в качестве свойства выходного модификатора, например, так:
Внутренний ключ пользователя: [[!+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`]]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Внутренний ключ пользователя: [[!+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]]. Он позволяет НЕ кэшировать содержимое вывода. Почему нужно не кешировать? Представим это так: на сайте 5 пользователей. Первый пользователь зашел на страницу с вызовом:
Добро пожаловать, [[!+modx.user.id:userinfo=`username`]]!
Добро пожаловать, [[!+modx.user.id:userinfo=`username`]]! |
По задумке на этой странице, выводится приветственное сообщение пользователю. Так вот, если результат будет кешироваться, то при первом входе на эту страницу — сохранится имя пользователя который только что зашел — и всем остальным будет показываться не их имя, а имя того пользователя который вошел на эту страницу первым. Чтобы этого избежать — просто не кэшируем этот тэг, с помощью восклицательного знака перед вызовом [[!+modx…
P.s.: Не забываем отключать кэширование тегов, где нужно! Чтобы это сделать — нужно ИЗБАВЛЯТЬСЯ от восклицательных знаков ( ! ). Результаты большинства сниппетов вплоне себе могут работать из кэша. В следующем уроке разберем Форматирование дат и времени.
web-revenue.ru
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=`5`]] |
limit | Устанавливает лимит на длинну строки и обрезает ее. | [[*pagetitle:limit=`30`]] |
ellipsis | Устанавливает лимит на длинну строки и обрезает ее, добавляя три точки в конце | [[*pagetitle:ellipsis=`30`]] |
tag | Вернет, запись тега. | [[*pagetitle:limit=`10`:tag]]вернет: [[*pagetitle:limit=`10`:tag]] |
add, increment, incr | Вернет, значение + модификатор ( по умолчанию +1 ). | [[+num:incr]] или [[+num:add=`5`]] |
subtract, decrement, decr | Вернет, значение - модификатор ( по умолчанию -1 ). | [[+num:decr]] или [[+num:decr=`5`]] |
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]] |
fuzzydate | Вернет дату. "вчера", "сегодня". | [[*createdon:fuzzydate]] |
ago | Вернет дату в прошедших секундах, минутах, неделях или месяцах. | [[*createdon:ago]] |
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]]. |
pitrooo.ru
Фильтры ввода-вывода MODX
Фильтры в Revolution позволяют манипулировать тем, как будут обрабатываться те или иные теги. Они позволяют вам изменять значения прямо внутри ваших шаблонов.
Фильтры ввода
В настоящее время фильтры ввода используются при подготовке к обработке фильтров вывода. Обычно они используются только внутри движка MODX.
Фильтры вывода
В MODX Revolution Фильтры вывода используются как один или нескольких модификаторов вывода, они схожи с PHx вызовами в MODx Evolution, но отличаются тем, что уже изначально встроены в ядро. Синтаксис модификаторов:
Фильтры могут применяться последовательно. Для этого напишите их подряд (слева направо):
Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):
Модификаторы вывода
В таблице представлены некоторые модификаторы и примеры их использования. В примерах модификаторы применяются к плейсхолдерам, но вы должны помнить, что они могут применяться к любым тегам MODX. Убедитесь, что используемый тег выводит хоть что-то, что модификатор будет обрабатывать.
Условные модификаторы вывода
if, input | ||
or | Объединение нескольких модификаторов связью ИЛИ | [[+numbooks:is=`5`:or:is=`6`:then=`Здесь 5 или 6 книг`:else=`Не уверен, сколько книг`]] |
and | Объединение нескольких модификаторов связью И | |
isequalto, isequal, equalto, equals, is, eq | Сравнивает передаваемое значение с установленным. Если значения совпадают, выводится значение «then», если нет - «else» | [[+numbooks:isequalto=`5`:then=`Здесь 5 книг`:else=`Не уверен, сколько книг`]] |
notequalto, notequals, isnt, isnot, neq, ne | Сравнивает передаваемое значение с установленным. Если значения НЕ совпадают, выводится значение «then», если нет - «else» | [[+numbooks:notequalto=`5`:then=`Не уверен, сколько книг`:else=`Здесь 5 книг`]] |
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte | То же, только условие «Больше или равно» | [[+numbooks:gte=`5`:then=`Здесь 5 книг или больше`:else=`Здесь меньше пяти книг`]] |
isgreaterthan, greaterthan, isgt, gt | То же, только условие «Строго больше» | [[+numbooks:gt=`5`:then=`Здесь больше пяти книг`:else=`Здесь 5 книг или меньше`]] |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte | То же, только условие «Меньше или равно» | [[+numbooks:lte=`5`:then=`Здесь 5 книг или меньше`:else=`Здесь больше пяти книг`]] |
islowerthan, islessthan, lowerthan, lessthan, islt, lt | То же, только условие «Строго меньше» | [[+numbooks:lte=`5`:then=`Здесь меньше пяти книг`:else=`Здесь 5 книг или больше`]] |
hide | Скрывает элемент, если условие выполняется | [[+numbooks:lt=`1`:hide]] |
show | Отображает элемент, если условие выполняется | [[+numbooks:gt=`0`:show]] |
then | Используется для составления условий | [[+numbooks:gt=`0`:then=`Книги в наличии!`]] |
else | Используется для составления условий (совместно с «then») | [[+numbooks:gt=`0`:then=`Книги в наличии!`:else=`Простите, но все продано.`]] |
select | ||
memberof, ismember, mo | Проверяет, является ли пользователь членом указанной группы пользователей | [[+modx.user.id:memberof=`Administrator`]] |
Модификаторы для работы со строками
cat | Добавляет значение после тега | [[+numbooks:cat=` книг`]] |
lcase, lowercase, strtolower | Переводит все буквы в нижний регистр | [[+title:lcase]] |
ucase, uppercase, strtoupper | Переводит все буквы в верхний регистр | [[+headline:ucase]] |
ucwords | Делает первую букву в словах заглавной | [[+title:ucwords]] |
ucfirst | Делает первую букву в строке заглавной | [[+name:ucfirst]] |
htmlent, htmlentities | Преобразует все символы в HTML-сущности | [[+email:htmlent]] |
esc,escape | Безопасно экранирует символы, используя регулярные выражения и str_replace. Также экранирует символы [, ] и ` | [[+email:escape]] |
strip | Заменяет все переносы, табуляции и любое количество пробелов только одним пробелом | [[+textdocument:strip]] |
stripString | Вырезает из строки указанную подстроку | [[+name:stripString=`Mr.`]] |
replace | Производит замену подстрок | [[+pagetitle:replace=`Mr.==Mrs.`]] |
striptags, stripTags,notags,strip_tags | Вырезает все теги (можно указать разрешенные теги). Не используйте для обеспечения безопасности. | [[+code:strip_tags=`<p>`]] |
len,length, strlen | Выводит длину строки | [[+longstring:strlen]] |
reverse, strrev | Переворачивает строку символ за символом | [[+mirrortext:reverse]] |
wordwrap | Вставляет перенос строки после каждого n-ого символа (слова не разбиваются) | [[+bodytext:wordwrap=`80`]] |
wordwrapcut | Вставляет перенос строки после каждого n-ого символа, даже если этот символ будет внутри слова | [[+bodytext:wordwrapcut=`80`]] |
limit | Выводит определенное количество символов с начала строки (значение по умолчанию - 100) | [[+description:limit=`50`]] |
ellipsis | Добавляет многоточие и обрезает строку, если она длиннее, чем определенное количество символов (значение по умолчанию - 100) | [[+description:ellipsis=`50`]] |
tag | Экранирование. Отображает элемент так как он есть, без :tag. Для использования в документации | [[+showThis:tag]] |
math | Возвращает результат продвинутых вычислений (нагружает на процессор. Не рекомендуется) | |
add,increment,incr | Прибавляет указанное число (значение по умолчанию +1) | [[+downloads:incr]] [[+blackjack:add=`21`]] |
subtract,decrement,decr | Вычитает указанное число (значение по умолчанию -1) | [[+countdown:decr]] [[+moneys:subtract=`100`]] |
multiply,mpy | Умножает на указанное число (значение по умолчанию *2) | [[+trifecta:mpy=`3`]] |
divide,div | Делит на указанное число (значение по умолчанию /2) | [[+rating:div=`4`]] |
modulus,mod | Возвращает модуль числа (по-умолчанию: %2, возвращает 0 или 1) ) | [[+number:mod]] |
ifempty,default,empty, isempty | Возращает значение модификатора, если значение тега пусто | [[+name:default=`anonymous`]] |
notempty, !empty, ifnotempty, isnotempty | Возращает значение модификатора, если значение тега НЕпусто | [[+name:notempty=`Hello [[+name]]!`]] |
nl2br | Заменяет символы новой строки (\n) на HTML-тег <br /> | [[+textfile:nl2br]] |
date | Переводит таймстамп в текст, в соответствии с указанным форматом (Формат даты) | [[+birthyear:date=`%Y`]] |
strtotime | Переводит дату в виде текста в UNIX таймстамп | [[+thetime:strtotime]] |
fuzzydate | Возвращает дату в формате "вчера, сегодня...". Принимает значение даты. | [[+createdon:fuzzydate]] |
ago | Возвращает число секунд, минут, недель или месяцев, прошедших с даты, указанной в теге. | [[+createdon:ago]] |
md5 | Создает MD5-хеш значения | [[+password:md5]] |
cdata | Оборачивает вывод тегами CDATA | [[+content:cdata]] |
userinfo | Возвращает запрашиваемое значение из профиля пользователя. Необходимо указывать ID пользователя | [[+modx.user.id:userinfo=`username`]] |
isloggedin | Возвращает true, если пользователь аутентифицирован в текущем контексте | [[+modx.user.id:isloggedin]] |
isnotloggedin | Возвращает true, если пользователь НЕаутентифицирован в текущем контексте | [[+modx.user.id:isnotloggedin]] |
urlencode | Конвертирует значение в URL | [[+mystring:urlencode]] |
urldecode | Конвертирует значение из URL | [[+myparam:urldecode]] |
Кеширование
В общем случае, содержимое плейсхолдера, которое изменяется динамически, не должно кешироваться. Например:
Результат работы примера может быть пустым, а может и нет. Как мы можем кешировать это? Пример, приведенный выше, отражает природу модификатора вывода. Возможно применение модификаторов вывода в кешируемом плейсхолдере - но только если Сниппет может быть кеширован. Иначе, мы совершаем алогичное действие - пытаемся кешировать то, что не является статическим содержимым. Получаем правило: нельзя устанавливать кеширование плейсхолдера в некешируемом сниппете, если результат работы сниппета может изменяться.
Использование модификаторов вывода совместно с параметрами
Если у тега есть параметры, то их необходимо прописывать сразу после модификатора:
Создание пользовательского модификатора
Любой сниппет может использоваться и как модификатор вывода. Для его использования просто укажите имя сниппета вместо модификатора. К примеру, создадим сниппет makeExciting, добавляющий к выводу определенное количество восклицательных знаков:
Такой вызов тега передаст в сниппет makeExciting следующие параметры для обработки:
input | Значение элемента | В переменной $input будет значение заголовка страницы ([[*pagetitle]]) |
options | Значение модификатора (после знака =) | $options = 4; |
token | Тип элемента | $token = "*"; (символ, определяющий, что данный элемент - поле ресурса |
name | Имя элемента | $name = "pagetitle"; |
tag | Весь тег полностью | $tag = "[[*pagetitle:makeExciting=`4`]]"; |
Цепочки фильтров (Множественные модификаторы)
Хорошим примером цепочки фильтров будет форматирование даты, например, так:
Модификатор UserInfo
Прямой доступ к данным из таблицы modx_user_attributes в базе данных, с помощью модификаторов вывода вместо сниппетов, может быть достигнуто просто за счет использования модификатора UserInfo. Выберите нужный столбец из таблицы и укажите его в качестве свойства модификатора, например, так:
[[!+modx.user.id]] возвращает ID вошедшего в систему пользователя. Вы, конечно, можете заменить, его на [[*createdby]] или другое поле ресурса или любой плейсхолдер, который возвращает числовое представление ID пользователя.
Обратите внимание, что ID пользователя и его логин уже доступны по умолчанию в MODX, так что вам не нужно использовать модификатор UserInfo:
[[!+modx.user.id]] - Выведет ID пользователя [[!+modx.user.username]] - Выведет логин пользователяЛучше всего эти плейсхолдеры вызывать некешируемыми, чтобы избежать неожиданных результатов.
Также фильтры можно использовать несколькими способами (что уменьшает время их выполнения):
modx.ws
Фильтры ввода-вывода (модификаторы) в MODX Revo // Веб студия cat-Art
Фильтры в Revolution позволяют обрабатывать и изменять значения тегов внутри ваших шаблонов, чанков, сниппетах.
Фильтры ввода
В настоящее время фильтры ввода используются при подготовке к обработке фильтров вывода. Обычно они используются только внутри ядра MODX.
Фильтры вывода
В MODX Revolution фильтры вывода используются как один или нескольких модификаторов вывода, они схожи с PHx вызовами в MODx Evolution, но отличаются тем, что уже изначально встроены в ядро. Синтаксис модификаторов:
[[element:modifier=`value`]]
Фильтры могут применяться последовательно (пишутся слева направо):
[[element:modifier=`value`:anothermodifier=`value2`:andanothermodifier:yetanother=`value3`]]
Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):
[[Snippet:modifier=`value`? &SnippetParam=`something`]]
Модификаторы вывода
В таблице представлены некоторые модификаторы и примеры их использования. В примерах они применяются к плейсхолдерам, но вы должны помнить, что модификаторы могут применяться к любым тегам MODX.
Модификатор | Описание | Пример использования |
if, input | ||
or | Объединение нескольких модификаторов связью ИЛИ | [[+numProducts:is=`10`:or:is=`11`:then=`Здесь 10 или 11 товаров`:else=`Не уверен, сколько товаров`]] |
and | Объединение нескольких модификаторов связью И | |
isequalto, isequal, equalto, equals, is, eq | Сравнивает передаваемое значение с установленным. Если значения совпадают, выводится значение «then», если нет — «else» | [[+numProducts:isequalto=`10`:then=`Здесь 10 товаров`:else=`Не уверен, сколько товаров`]] |
notequalto, notequals, isnt, isnot, neq, ne | Сравнивает передаваемое значение с установленным. Если значения НЕ совпадают, выводится значение «then», если нет — «else» | [[+numProducts:notequalto=`10`:then=`Не уверен, сколько товаров`:else=`Здесь 10 товаров`]] |
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte | То же, только условие «Больше или равно» | [[+numProducts:gte=`10`:then=`Здесь 10 товаров или больше`:else=`Здесь меньше 10 товаров`]] |
isgreaterthan, greaterthan, isgt, gt | То же, только условие «Строго больше» | [[+numProducts:gt=`10`:then=`Здесь больше 10 товаров`:else=`Здесь 10 товаров или меньше`]] |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte | То же, только условие «Меньше или равно» | [[+numProducts:lte=`10`:then=`Здесь 10 товаров или меньше`:else=`Здесь больше 10 товаров`]] |
islowerthan, islessthan, lowerthan, lessthan, islt, lt | То же, только условие «Строго меньше» | [[+numProducts:lte=`10`:then=`Здесь меньше 10 товаров`:else=`Здесь 10 товаров или больше`]] |
hide | Скрывает элемент, если условие выполняется | [[+numProducts:lt=`1`:hide]] |
show | Отображает элемент, если условие выполняется | [[+numProducts:gt=`0`:show]] |
then | Используется для составления условий | [[+numProducts:gt=`0`:then=`Товары в наличии!`]] |
else | Используется для составления условий (совместно с «then») | [[+numProducts:gt=`0`:then=`Товары в наличии!`:else=`Простите, но все продано.`]] |
select | ||
memberof, ismember, mo | Проверяет, является ли пользователь членом указанной группы пользователей | [[+modx.user.id:memberof=`Administrator`]] |
Модификаторы для работы со строками
cat | Добавляет значение после тега | [[+numProducts:cat=` товаров`]] |
lcase, lowercase, strtolower | Переводит все буквы в нижний регистр | [[+title:lcase]] |
ucase, uppercase, strtoupper | Переводит все буквы в верхний регистр | [[+longtitle:ucase]] |
ucwords | Делает первую букву в словах заглавной | [[+title:ucwords]] |
ucfirst | Делает первую букву в строке заглавной | [[+name:ucfirst]] |
htmlent, htmlentities | Преобразует все символы в HTML-сущности | [[+email:htmlent]] |
esc,escape | Безопасно экранирует символы, используя регулярные выражения и str_replace. Также экранирует символы [, ] и ` | [[+email:escape]] |
strip | Заменяет все переносы, табуляции и любое количество пробелов только одним пробелом | [[+textdocument:strip]] |
stripString | Вырезает из строки указанную подстроку | [[+name:stripString=`Mr.`]] |
replace | Производит замену подстрок | [[+pagetitle:replace=`Mr.==Mrs.`]] |
striptags, stripTags,notags,strip_tags | Вырезает все теги (можно указать разрешенные теги). | [[+code:strip_tags=`<p>`]] |
len,length, strlen | Выводит длину строки | [[+longstring:strlen]] |
reverse, strrev | Переворачивает строку символ за символом | [[+mirrortext:reverse]] |
wordwrap | Вставляет перенос строки после каждого n-ого символа (слова не разбиваются) | [[+bodytext:wordwrap=`80`]] |
wordwrapcut | Вставляет перенос строки после каждого n-ого символа, даже если этот символ будет внутри слова | [[+bodytext:wordwrapcut=`80`]] |
limit | Выводит определенное количество символов с начала строки (значение по умолчанию — 100) | [[+description:limit=`50`]] |
ellipsis | Добавляет многоточие и обрезает строку, если она длиннее, чем определенное количество символов (значение по умолчанию — 100) | [[+description:ellipsis=`50`]] |
tag | Экранирование. Отображает элемент так как он есть, без:tag. Для использования в документации | [[+showThis:tag]] |
math | Возвращает результат продвинутых вычислений (нагружает на процессор. Не рекомендуется) | |
add,increment,incr | Прибавляет указанное число (значение по умолчанию +1) | [[+downloads:incr]][[+blackjack:add=`21`]] |
subtract,decrement,decr | Вычитает указанное число (значение по умолчанию -1) | [[+countdown:decr]][[+moneys:subtract=`100`]] |
multiply,mpy | Умножает на указанное число (значение по умолчанию *2) | [[+trifecta:mpy=`3`]] |
divide,div | Делит на указанное число (значение по умолчанию /2) | [[+rating:div=`4`]] |
modulus,mod | Возвращает модуль числа(по-умолчанию: %2, возвращает 0 или 1)) | [[+number:mod]] |
ifempty,default,empty, isempty | Возвращает значение модификатора, если значение тега пусто | [[+name:default=`anonymous`]] |
notempty, !empty, ifnotempty, isnotempty | Возвращает значение модификатора, если значение тега НЕ пусто | [[+name:notempty=`Привет, [[+name]]!`]] |
nl2br | Заменяет символы новой строки (\n) на HTML-тег <br /> | [[+textfile:nl2br]] |
date | Переводит таймстамп в текст, в соответствии с указанным форматом (Формат даты) | [[+birthyear:date=`%Y`]] |
strtotime | Переводит дату в виде текста в UNIX таймстамп | [[+thetime:strtotime]] |
fuzzydate | Возвращает дату в формате «вчера, сегодня, …». Принимает значение даты. | [[+createdon:fuzzydate]] |
ago | Возвращает число секунд, минут, недель или месяцев, прошедших с даты, указанной в теге. | [[+createdon:ago]] |
md5 | Создает MD5-хеш значения | [[+password:md5]] |
cdata | Оборачивает вывод тегами CDATA | [[+content:cdata]] |
userinfo | Возвращает запрашиваемое значение из профиля пользователя. Необходимо указывать ID пользователя | [[+modx.user.id:userinfo=`username`]] |
isloggedin | Возвращает true, если пользователь аутентифицирован в текущем контексте | [[+modx.user.id:isloggedin]] |
isnotloggedin | Возвращает true, если пользователь НЕаутентифицирован в текущем контексте | [[+modx.user.id:isnotloggedin]] |
urlencode | Конвертирует значение в URL | [[+mystring:urlencode]] |
urldecode | Конвертирует значение из URL | [[+myparam:urldecode]] |
Кеширование
В общем случае, содержимое плейсхолдера, которое изменяется динамически, не должно кешироваться.Например:
[[+placeholder:default=`К сожалению, ничего не найдено`]]
Результат работы примера может быть пустым, а может и нет. Как мы можем кешировать это? Пример, приведенный выше, отражает природу модификатора вывода.Возможно применение модификаторов вывода в кешируемом плейсхолдере — но только если Сниппет может быть кеширован. Иначе, мы совершаем алогичное действие — пытаемся кешировать то, что не является статическим содержимым. Получаем правило: нельзя устанавливать кеширование плейсхолдера в некешируемом сниппете, если результат работы сниппета может изменяться.
Использование модификаторов вывода совместно с параметрами
Если у тега есть параметры, то их необходимо прописывать сразу после модификатора:
[[!pdoResources:default=`К сожалению, ничего не найдено`?&parents=`5`&depth=`5`&tpl=`news_tpl`&includeTVs=`image`]]
Создание пользовательского модификатора
Любой сниппет может использоваться и как модификатор вывода. Для его использования просто укажите имя сниппета вместо модификатора. К примеру, создадим сниппет makeExciting, добавляющий к выводу определенное количество восклицательных знаков:
[[*pagetitle:makeExciting=`4`]]
Такой вызов тега передаст в сниппет makeExciting следующие параметры для обработки:
Параметр | Значение | Значение в примере |
input | Значение элемента | В переменной $input будет значение заголовка страницы ([[*pagetitle]]) |
options | Значение модификатора (после знака =) | $options = 4; |
token | Тип элемента | $token = «*«; (символ, определяющий, что данный элемент — поле ресурса |
name | Имя элемента | $name = «pagetitle»; |
tag | Весь тег полностью | $tag = «[[*pagetitle:makeExciting=`4`]]«; |
Модификатор UserInfo
Прямой доступ к данным из таблицы modx_user_attributes в базе данных, с помощью модификаторов вывода вместо сниппетов, может быть достигнуто просто за счет использования модификатора UserInfo. Выберите нужный столбец из таблицы и укажите его в качестве свойства модификатора, например, так:
Значение | Модификатор |
Внутренний ключ пользователя | [[!+modx.user.id:userinfo=`internalKey`]] |
Логин | [[!+modx.user.id:userinfo=`username`]] |
Полное имя | [[!+modx.user.id:userinfo=`fullname`]] |
Роль | [[!+modx.user.id:userinfo=`role`]] |
[[!+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`]] |
Почтовый индекс | [[+modx.user.id:userinfo=`zip`]] |
Фото | [[+modx.user.id:userinfo=`photo`]] |
Комментарий | [[+modx.user.id:userinfo=`comment`]] |
Пароль | [[+modx.user.id:userinfo=`password`]] |
Кеш пароля | [[+modx.user.id:userinfo=`cachepwd`]] |
Последняя авторизация | [[+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]] |
Дата текущей авторизации | [[+modx.user.id:userinfo=`thislogin`:date=`%Y-%m-%d`]] |
Количество авторизаций | [[+modx.user.id:userinfo=`logincount`]] |
[[!+modx.user.id]] возвращает ID вошедшего в систему пользователя. Вы, конечно, можете заменить, его на [[*createdby]] или другое поле ресурса или любой плейсхолдер, который возвращает числовое представление ID пользователя.
Обратите внимание, что ID пользователя и его логин уже доступны по умолчанию в MODX, так что вам не нужно использовать модификатор UserInfo:
[[!+modx.user.id]] — Выведет ID пользователя[[!+modx.user.username]] — Выведет логин пользователя
Лучше всего эти плейсхолдеры вызывать некешируемыми, чтобы избежать неожиданных результатов.
Также фильтры можно использовать несколькими способами (что уменьшает время их выполнения):
// Используем модификатор:[[+title:lcase]][[+something:notempty=`Hello[[+name]]`]]
// Используем сниппет:[[lcase? &subject=`title`]][[notempty? &subject=`something` &then=`Hello[[+name]]`]]
// Используем общий сниппет фильтра:[[Filter? &subject=`title` &operator=`lcase`]][[Filter? &subject=`something` &operator=`notempty` &meter=`Hello [[+name]]`]]
Материал взят отсюда — Фильтры ввода-вывода
cat-art.ru
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=`хуй`]] |
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 | Вернет, запись тега. | [[*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]][[*pagetitle:nl2br]] |
date | Аналогично функции PHP strftime. | [[+birthyear:date=`%Y`]] |
strtotime | Аналогично функции PHP strtotime. Вернет дату. | [[*createdon:strtotime]], - вернет типа "[[*createdon:strtotime]]" |
fuzzydate | Вернет дату. Типа вчера, сегодня.... | [[*createdon:fuzzydate]], - вернет типа "[[*createdon:fuzzydate]]" |
ago | Вернет дату в прошедших секундах, минутах, неделях или месяцах. | [[*createdon:ago]], - вернет типа "[[*createdon:ago]]" |
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]]. |
uscms.ru
Конструкция условий if else в MODx
В Modx есть собсвенные средства для проверок, т.к он не поддерживает PHP "в открытом виде"
В самом начале я напишу 2 проверки, которые я использую постоянно
Чтобы составить условие на существование в БД параметра modx и при условие, что оно не пустое, то пишем следующий скрипт
[ [*id:gt=`0`:then=`Книги в наличии!`:else=`Простите, но все продано.`] ]
Проверка на значение: Если id равен 5, то выводим значение, иначе выполняем другое дейсвтие
[ [*id:is=`5`:then=`номер 5`:else=`номер не 5`] ]
В MODx существуют встроенный синтаксис для использования конструкций if else.
Модификаторы вывода
В таблице представлены некоторые модификаторы и примеры их использования. В примерах модификаторы применяются к плейсхолдерам, но вы должны помнить, что они могут применяться к любым тегам MODX. Убедитесь, что используемый тег выводит хоть что-то, что модификатор будет обрабатывать.
Условные модификаторы вывода
Модификатор | Описание | Пример использования |
if, input | if - задает дополнительное условие input - добавляет в тег обратываемые данные |
[ [*id:is=`1`:and:if=`[ [*id]]`:ne=`2`:then=`da`:else=`net`]] |
or | Объединение нескольких модификаторов связью ИЛИ |
[ [*id:is=`5`:or:is=`6`:then=`номер 5 или 6`:else=`другой номер`]] |
and | Объединение нескольких модификаторов связью И |
[ [*id:is=`1`:and:if=`[ [*id]]`:ne=`2`:then=`da`:else=`net`]] |
isequalto, isequal, equalto, equals, is, eq | Сравнивает передаваемое значение с установленным. Если значения совпадают, выводится значение «then», если нет - «else» |
[ [*id:is=`5`:then=`номер 5`:else=`номер не 5`]] |
notequalto, notequals, isnt, isnot, neq, ne | Сравнивает передаваемое значение с установленным. Если значения НЕ совпадают, выводится значение «then», если нет - «else» |
[ [*id:isnot=`5`:then=`номер не 5`:else=`видимо номер 5`]] |
greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte | То же, только условие «Больше или равно» |
[ [*id:gte=`5`:then=`номер 5 или больше`:else=`меньше пятого номера`]] |
isgreaterthan, greaterthan, isgt, gt | То же, только условие «Строго больше» |
[ [*id:gt=`5`:then=`номер больше пяти`:else=`номер 5 или меньше`]] |
equaltoorlessthan, lessthanorequalto, el, le, islte, lte | То же, только условие «Меньше или равно» |
[ [*id:lte=`5`:then=`номер 5 или меньше`:else=`больше, чем номер 5`]] |
islowerthan, islessthan, lowerthan, lessthan, islt, lt | То же, только условие «Строго меньше» |
[ [*id:lte=`5`:then=`номер точно меньше 5`:else=`номер 5 или больше`]] |
hide | Скрывает элемент, если условие выполняется |
[ [*id:lt=`1`:hide]] |
show | Отображает элемент, если условие выполняется |
[ [*id:gt=`0`:show]] |
then | Используется для составления условий |
[ [*id:gt=`0`:then=`Книги в наличии!`]] |
else | Используется для составления условий (совместно с «then») |
[ [*id:gt=`0`:then=`Книги в наличии!`:else=`Простите, но все продано.`]] |
select | Установить свое значение, в зависимости от модификатора и вывода тега. Так же можно использовать "else", например если значение [ [+controls]] - не подходит под шаблон select |
[ [+controls:select=`0=ВЫКЛ&1=ВКЛ&2=ХЗ`:else=`Ошибка`]] |
memberof, ismember, mo | Проверяет, является ли пользователь членом указанной группы пользователей |
[ [+modx.user.id:memberof=`Administrator`]] |
Также для особых случаев существует модуль - сниппет, называется он IF
Использование
Сниппет If может быть вызван с использованием тегов:
[ [If]]или, в случае, если объект может быть изменен до того, как кэш ресурса будет очищен, используйте не кэшируемый синтаксис:
[ [!If]]Доступные свойства
Имя |
Описание |
Значение “по умолчанию“ |
subject |
Параметр, над значением которого выполняются условия. |
|
operator |
Оператор сравнения с subject |
= |
operand |
Используется при необходимости, значение для сравнения subject и operator. |
|
then |
Выводится, если состояние принимает значение true |
|
else |
Выводится, если состояние принимает значение false |
|
debug |
Если значение true, отображает все проверенные свойства |
0 |
die |
Если прошло обработку debug и значение true, после отображения свойств вывести die(). |
0 |
Доступные операторы
Оператор |
Описание |
!=,neq,not,isnot,isnt,unequal,notequal |
Принимается если subject не равен operand |
==,=,eq,is,equal,equals,equalto |
Принимается если subject равен operand |
<,lt,less,lessthan |
Принимается если subject меньше operand. |
>,gt,greater,greaterthan |
Принимается если subject больше operand. |
<=,lte,lessthanequals,lessthanorequalto |
Принимается если subject меньше или равен operand |
>=,gte,greaterthanequals,greaterthanequalto |
Принимается если subject больше или равен operand. |
isempty,empty |
Принимается если subject без значения. |
!empty,notempty,isnotempty |
Принимается если subject имеет значение. |
isnull,null |
Принимается если subject равен 0 |
inarray,in_array,ia |
Принимается если subject найден в списке операндов (строковый параметр, разделитель - запятая) |
Примеры
Сравнение чисел:
[ [!If? &subject=`` &operator=`GT` &operand=`3` &then=`You have more than 3 items!`]]Сравнение строк:
[ [!If? &subject=`` &operator=`EQ` &operand=`George` &then=`Hey George! Long time no see!` &else=`You're not George. Go away.` ]]Встраиваемый вызов сниппета
[ [!If? &subject=`0` &operator=`EQ` &operand=`0` &then=`` &else=`` ]]При использовании сниппета IF для проверки поля ресурса или шаблонной переменной (или другого значения, не измененного до очистки кэша), убедитесь, что используете кэшируемый вызов сниппета для проверки состояния. Это нужно, чтобы быть уверенным, что этот процесс не нужен при каждом запросе.
[ [If? &subject=`` &operator=`EQ` &operand=`1` &then=`This resource is not visible in the menu.` &else=`This resource shows up in the menu in spot 3.` ]]
Скачиваем и устанавливаем пакет IF
Например, нам нужно что бы слайдер отображлся только на главной странице, с id=1, тогда вставляем в шаблон:
[ [If? &subject=`38` &operator=`EQ` &operand=`1` &then=``]]
или через модификаторы
[ [*id:is=`1`:then=``:else=``]]
Еще например, нам надо что бы выводился ЗАГОЛОВОК, если РАСШИРЕННЫЙ ЗАГОЛОВОК пуст, тогда вписываем:
[ [If? &subject=`` &operator=`notempty` &then=``&else=`Конструкция условий if else в MODx` ]]
или
[ [*longtitle:is=``:then=`Конструкция условий if else в MODx`:else=``]]
Параметры IF для MODX REVO:
- subject - самый важный параметр, его сравниваем
- operator - каким образом сравниваем, по умолчанию =
- operand - с чем сравниваем
- then - что выводим, если верно
- else - что выводим, если ложно
- debug - выводим все обработанные параматры, если true
- die - если этот и прошлый параметр true, то выполняется die() после вывода всех параметров
Операторы IF:
- neq - не равно
- eq - равно
- lt - меньше
- gt - больше
- lte - меньше, либо равен
- gte - больше, либо равен
- isempty - выполняется если парамер пустой
- notempty - если не пустой
- null - если параметр имеет значение 0
- inarray - Выполняется если Главный параметр находится в списке, перечисленном через запятую, в Операнде
Просмотров: 695
Please enable JavaScript to view the comments powered by Disqus.perfkirill.ru