Конструкция условий 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=`[[+total]]` &operator=`GT` &operand=`3` &then=`You have more than 3 items!`]]
Сравнение строк:
[ [!If? &subject=`[[+name]]` &operator=`EQ` &operand=`George` &then=`Hey George! Long time no see!` &else=`You're not George. Go away.` ]]
Встраиваемый вызов сниппета
[ [!If? &subject=`[[+modx.user.id]]` &operator=`EQ` &operand=`0` &then=`[[Login]]` &else=`[[Logout]]` ]]
При использовании сниппета IF для проверки поля ресурса или шаблонной переменной (или другого значения, не измененного до очистки кэша), убедитесь, что используете кэшируемый вызов сниппета для проверки состояния. Это нужно, чтобы быть уверенным, что этот процесс не нужен при каждом запросе.
[ [If? &subject=`[[*hidemenu]]` &operator=`EQ` &operand=`1` &then=`This resource is not visible in the menu.` &else=`This resource shows up in the menu in spot [[*menuindex]].` ]]
Скачиваем и устанавливаем пакет IF
Например, нам нужно что бы слайдер отображлся только на главной странице, с id=1, тогда вставляем в шаблон:
[ [If? &subject=`117` &operator=`EQ` &operand=`1` &then=`[[$slider]]`]]
или через модификаторы
[ [*id:is=`1`:then=`[[$slider]]`: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 — Выполняется если Главный параметр находится в списке, перечисленном через запятую, в Операнде
«
Использование условий 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)
Если/иначе в Modx —
— Qaru спросил
Изменено 7 лет, 7 месяцев назад
Просмотрено 2к раз
Я пытаюсь обернуть в своем шаблоне блок в условных выражениях:
Мне нужно показать этот блок, только если присутствует
[*trip-slug*]
.
Я прочитал форум и документацию, но не могу понять синтаксис правильно.
Что я упускаю?
- modx
- modx-evolution
В Evolution вам понадобится плагин PHx (https://github.com/Temus/PHx) для обработки тегов переменных ресурсов или шаблонов. С этим плагином вы можете использовать следующий код:
[*trip-slug:ne=` <дел><дел> Забронировать онлайнЗабронировать онлайн