Использование условий if else в MODx. Modx модификаторы
Стандартные модификаторы Modx Revo и создание собственных модификаторов
май 3 , 2015
Модификаторы в Modx - это очень удобная штука, которая позволяет выполнять какие-то преобразования с плэйсхолдерами, дополнительными полями, не вызывая неудобную конструкцию сниппета с параметром. В статье приведены несколько модификаторов Modx Revo и показано, как самим создать модификатор под свои нужды.
Итак, модификаторы. Страница в официальной документации Не буду переписывать документацию, там расписано очень подробно и хорошо. Пример вызова модификатора:
[ [+description:limit=`50`] ]Можно применять модификаторы к результатам работы сниппетов. Например, посмотрим, равно ли у ресурса с id=10 значение дополнительного поля category_id 2 или 5, и в зависимости от этого выведем надпись yes или no. Будем использовать сниппет getResourceField
[ [getResourceField:is=`2`:or:is=`5`:then=`yes`:else=`no`? &id=`10` &field=`category_id` &isTV=`1`] ]Как создать собственный модификатор?
Очень просто. Нужно всего лишь создать сниппет с входным параметром $input и вернуть из него какой-то результат. Создадим модификатор, возвращающий входную строку с "Hello, " в начале. Создадим сниппет с названием hello_user return 'Hello, '.$input.'!';Применение модификатора выведет нам "Hello, admin!"
[ [+modx.user.username:hello_user] ]В большинстве случаев этого достаточно для создания своего модификатора. Более подробно расписано в официальной документации
Как Вам статья? Оцените!
Понравилась статья? Поделись с другими!
Подписка на новые статьи
Подписаться
Please enable JavaScript to view the comments powered by Disqus.Фильтры ввода и вывода / Основы / Система / docs.modx.pro
Фильтры в Revolution позволяют манипулировать тем, как будут обрабатываться те или иные теги. Они позволяют вам изменять значения прямо внутри ваших шаблонов.
Фильтры ввода
В настоящее время фильтры ввода используются при подготовке к обработке фильтров вывода. Обычно они используются только внутри движка MODX.
Фильтры вывода
В Revolution фильтры вывода ведут себя так же, как и PHx в Evolution, только фильтры теперь встроены прямо в движок MODX. Синтаксис выглядит так:
[[element:modifier=`value`]]Фильтры могут применяться последовательно. Для этого напишите их подряд (слева направо):
[[element:modifier:anothermodifier=`value`:andanothermodifier:yetanother=`value2`]]Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):
[[mySnippet:modifier=`value`? &mySnippetParam=`something`]]Модификаторы вывода
В таблице представлены некоторые модификаторы и примеры их использования. В примерах модификаторы применяются к плейсхолдерам, но вы должны помнить, что они могут применяться к любым тегам MODX. Убедитесь, что используемый тег выводит хоть что-то, что модификатор будет обрабатывать.
Условные модификаторы вывода
if, input | Передаёт произвольный текст на ввод, для следующего модификатора | [[*id:input=`[[+placeholder]]`:is=`1`:then=`Да`:else=`Нет`]] |
or | Объединение нескольких модификаторов связью ИЛИ | [[+numbooks:is=`5`:or:is=`6`:then=`Здесь 5 или 6 книг`:else=`Не уверен, сколько книг`]] |
and | Объединение нескольких модификаторов связью И | [[+numbooks:gt=`5`:and:lt=`10`:then=`Здесь от 5 до 10 книг`:else=`Книг или меньше 5, или больше 10`]] |
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=`Простите, но все продано.`]] |
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()`. Также экранирует теги MODX. | [[+email:escape]] |
strip | Заменяет все переносы, табуляции и любое количество пробелов только одним пробелом | [[+textdocument:strip]] |
stripString | Вырезает из строки указанную подстроку | [[+name:stripString=`Mr.`]] |
replace | Производит замену подстрок | [[+pagetitle:replace=`Mr.==Mrs.`]] |
striptags, stripTags,notags,strip_tags | Вырезает все теги (можно указать разрешенные теги). Не используйте для обеспечения безопасности. | [[+code:strip_tags]] |
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]] |
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 | Принимает таймстамп и возвращает дату в виде "Сегодня в 16:20 PM" | [[+createdon:fuzzydate]] |
ago | Возвращает число секунд, минут, недель или месяцев, прошедших с даты, указанной в теге. | [[+createdon:ago]] |
md5 | Создает MD5-хеш значения | [[+password:md5]] |
cdata | Оборачивает вывод тегами CDATA | [[+content:cdata]] |
userinfo | Возвращает запрашиваемое значение из профиля пользователя. Необходимо указывать ID пользователя | [[!+modx.user.id:userinfo=`username`]] |
isloggedin | Возвращает 1, если пользователь авторизован в текущем контексте | [[!+modx.user.id:isloggedin:is=`1`:then=`Yes`:else=`No`]] |
isnotloggedin | Возвращает 1, если пользователь неавторизован в текущем контексте | [[!+modx.user.id:isnotloggedin:is=`1`:then=`No`:else=`Yes`]] |
urlencode | Конвертирует значение как URL, то есть применяет PHP фнукцию `urlencode()` | [[+mystring:urlencode]] |
urldecode | Конвертирует значение как из URL, то есть применяет PHP фнукцию `urldecode()` | [[+myparam:urldecode]] |
Модификаторы для работы с пользователями нужно вызывать некэшированными, чтобы каждый юзер видел актуальные данные.
Использование модификаторов вывода совместно с параметрами
Если у тега есть параметры, то их необходимо прописывать сразу после модификатора:
Создание пользовательского модификатора
Любой сниппет может использоваться как модификатор вывода. Для этого просто укажите имя сниппета вместо модификатора. К примеру, создадим сниппет [[makeExciting]], добавляющий к выводу определенное количество восклицательных знаков:
[[*pagetitle:makeExciting=`4`]]Такой вызов тега передаст в сниппет makeExciting следующие параметры для обработки:
input | Значение элемента | $input = `[[*pagetitle]]`; | Значение элемента, к которому применяется модификатор. |
options | Значение модификатора | $options = 4; | Дополнительные параметры (после знака =) |
token | Тип элемента | $token = *; | Cимвол, определяющий тип тега. |
name | Имя элемента | $name = `pagetitle`; | Имя плейсхолдера, к которому применяется модификатор. |
tag | Весь тег полностью | $tag = `[[*pagetitle:makeExciting=`4`]]`; | Весь тег, полностью. |
Приведем пример кода нашего сниппета makeExciting:
<?php $defaultExcitementLevel = 1; $result = $input; if (isset($options)) { $numberOfExclamations = $options; } else { $numberOfExclamations = $defaultExcitementLevel; } for ($i = $numberOfExclamations; $i > 0; $i--) { $result = $result . '!'; } return $result;Тег выводит всё, что возвращает сниппет. В нашем случае он вернет значение тега [[*pagetitle]] с четырьмя восклицательными знаками.
Если сниппет вернет пустую строку, то на страницу будет выведено изначальное значение тега.
Цепочки фильтров (Множественные модификаторы)
Хорошим примером цепочки фильтров будет форматирование даты, например, так:
[[*publishedon:strtotime:date=`%d.%m.%Y`]]Модификатор 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 пользователя.
Обратите внимание, что профиль текущего пользователя уже доступен в MODX по умолчанию, так что вам не нужно использовать модификатор UserInfo для него:
- [[!+modx.user.id]] - Выведет идентификатор пользователя
- [[!+modx.user.username]] - Выведет логин пользователя
- [[!+modx.user.fullname]] - Полное имя пользователя
- [[!+modx.user.dob]] - Дата рождения
Фильтр userinfo нужно вызывать некэшированным, иначе пользователи будут видеть чужие закэшированные данные.
docs.modx.pro
Использование условий if else в MODx
В 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`]] |
Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):
[ [mySnippet:modifier=`value`? &mySnippetParam=`something`]]
Также для того что бы иметь возможность пользоваться вложеными конструкциями можно воспользоваться дополнительным пакетом, который имеет короткое и емкое название If. Загрузить его можно зайдя в Система-> Управление пакетами.
Так будет выглядить код условия:
[ [!If? &subject=`[ [+total]]` &operator=`GT` &operand=`3` &then=`You have more than 3 items!`]]
Параметры пакета if:
subject - Параметр, по которому выполняются условия.
operator - Оператор сравнения с subject
operand - Используеться по необходимости и являет собой значение subject (предмета сравнения) с использованием operator (оператора сравнения).
then - Код, который выводиться в том случае если условие принимает значение true
else - Код, который выводиться в том случае если условие принимает значение false
debug - Если значение true, отобразит все переданные параметры
die - Если отладка (debag) прошла успешно и соответствует значению true, то после вывода параметров применить функцию die().
Параметры
Название | Описание | По умолчания |
subject | Параметр, по которому выполняются условия. | |
operator | Оператор сравнения с subject | = |
operand | Используеться по необходимости и являет собой значение subject (предмета сравнения) с использованием operator (оператора сравнения). | |
then | Код, который выводиться в том случае если условие принимает значениеtrue | |
else | Код, который выводиться в том случае если условие принимает значениеfalse | |
debug | Если значение true, отобразит все переданные параметры | 0 |
die | Если отладка (debag) прошла успешно и соответствует значению 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 равен null |
inarray,in_array,ia | Проверяет если subject найден в списке operand (строка разделённая запятой) |
Комментарии (0)
about-cms.com