Конструкция условий 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к раз

Я пытаюсь обернуть в своем шаблоне блок в условных выражениях:

 
Забронировать онлайн
<дел> html/#id=[*trip-slug*]">Забронировать онлайн

Мне нужно показать этот блок, только если присутствует [*trip-slug*] .

Я прочитал форум и документацию, но не могу понять синтаксис правильно.

Что я упускаю?

  • modx
  • modx-evolution

В Evolution вам понадобится плагин PHx (https://github.com/Temus/PHx) для обработки тегов переменных ресурсов или шаблонов. С этим плагином вы можете использовать следующий код:

 [*trip-slug:ne=`
  <дел>
    
Забронировать онлайн
<дел> Забронировать онлайн