Условие в MODX, условие and if при помощи сниппета if в MODX. Условие в modx
Использование условий 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 (строка разделённая запятой) |
bmweb.org
if - задает дополнительное условие input - добавляет в тег обратываемые данные |
[[*id:is=`1`:and:if=`[[*id]]`:ne=`2`:then=`da`:else=`net`]] |
Объединение нескольких модификаторов связью ИЛИ | [[*id:is=`5`:or:is=`6`:then=`номер 5 или 6`:else=`другое`]] |
Объединение нескольких модификаторов связью И | [[*id:is=`5`:or:is=`6`:then=`номер 5 или 6`:else=`другое`]] |
Скрывает элемент, если условие выполняется | [[*id:lt=`1`:hide]] |
Отображает элемент, если условие выполняется | [[*id:gt=`0`:show]] |
Используется для составления условий | [[*id:gt=`0`:then=`Книги в наличии!`]] |
Используется для составления условий (совместно с «then») | [[*id:gt=`0`:then=`Книги в наличии!`:else=`Все продано`]] |
Установить свое значение, в зависимости от модификатора и вывода тега. Так же можно использовать "else", например если значение [ [+controls]] - не подходит под шаблон select |
[[+controls:select=`0=ВЫКЛ&1=ВКЛ&2=ХЗ`:else=`Ошибка`]] |
Сравнивает передаваемое значение с установленным. Если значения совпадают, выводится значение «then», если нет - «else» |
[[*id:is=`5`:then=`номер 5`:else=`номер не 5`]] |
Если значения НЕ совпадают, выводится значение «then», если нет - «else» |
[[*id:is=`5`:then=`номер 5`:else=`номер не 5`]] |
То же, только условие «Больше или равно» | [[*id:gte=`5`:then=`номер 5 или больше`:else=`меньше пятого номера`]] |
То же, только условие «Строго больше» | [[*id:gt=`5`:then=`номер больше пяти`:else=`номер 5 или меньше`]] |
То же, только условие «Меньше или равно» | [[*id:lte=`5`:then=`номер 5 или меньше`:else=`больше, чем номер 5`]] |
То же, только условие «Строго меньше» | [[*id:lte=`5`:then=`номер точно меньше 5`:else=`номер 5 или больше`]] |
Проверяет, является ли пользователь членом указанной группы пользователей | [[+modx.user.id:memberof=`Administrator`]] |
obninsksite.ru
IF MODX Revolution условия
Что такое if?
Условный логический сниппет, обеспечивающий выполнение условных выражений в MODx
История создания
IF написан Джейсоно Ковардом (Jason Coward), известным как opengeek, и Шоном Маккормиком, известным как splittingred и опубликован 29 октября 2009.
Загрузка
Вы можете загрузить ПО с помощью менеджера MODx Revolution, используя Package Management, или из хранилища дополнений MODx.
Использование
Сниппет 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]].` ]]www.modx.cc
Условие в MODX, как задать условие MODX, условие and if при помощи сниппета if в MODX
Столкнулся с проблемой при верстке сайта на MODX - у меня меню - иконки, причем когда я нажимаю на конкретную иконку она пропадает и под логотипом появляется надпись - название категории.
Первое что очевидно, но делать не хочется - множественные шаблоны, благо MODX это позволяет, но решение явно не изящное. Решение есть и это пакет MODX - "if". Устанавливаем его и теперь можно сделать следующие вещи:
[ [!If? &subject=`[ [*id]]` &operator=`in_array` &operand=`1` &then=`[ [$chank1]]`]][ [!If? &subject=`[ [*id]]` &operator=`in_array` &operand=`2` &then=`[ [$chank2]]`]]
В чанках нужный мне кусок кода меню)
Можно сразу код:
[ [!If? &subject=`[ [*id]]` &operator=`in_array` &operand=`2` &then=`(Пункт меню1),(Пункт меню3),(Пункт меню4)`]][ [!If? &subject=`[ [*id]]` &operator=`in_array` &operand=`2` &then=`(Пункт меню1),(Пункт меню2),(Пункт меню4)`]]
Можно использовать условие (опять же что бы не плодить кучу шаблонов) для некликабельного Логотипа на главной странице:
[ [!If? &subject=`[ [*id]]` &operator=`in_array` &operand=`1` &then=`<img src="logo.png" alt="" />`&else=`<a href="http://site.ru/"><img src="logo.png" alt="" /></a>`]]
В двух словах что тут написано):
Первое - субъект, в нашем случае id и из оператора понятно что id наших документов, далее операнд - это конкретные id документа, либо документов через запятую)
Возможны также более сложные варианты:
[ [!If? &subject=`[ [*id]]` &operator=`in_array` &operand=`12,48` &then=`[ [!If? &subject=`[ [*id]]` &operator=`in_array` &operand=`1` &then=`действие1`]][ [!If? &subject=`[ [*id]]` &operator=`in_array` &operand=`2` &then=`действие2`]]`&else=`действие`]]
Очевидно что можно использовать как, например, для верхнего меню с активными классами, когда присутствует, например, боковое меню, выведенное через Wayfinder, так и довольно сложные схемы. Например для поднятия форума на MODX
Комментарии (0)
about-cms.com
Замена условия «and If» с помощю сниппета логических операций «If» в MODX Revo
В MODX Revo есть сниппет If, очень полезная штука, если штатных средств не достаточно. Но бывает что и сниппета If тоже не достаточно. Когда нужно задать довольно сложные условия. Попробую проиллюстрировать свою задачу:и подобные условия нужно определить для всех товаров и их папок. По всему интернет магазину в правом столбике сайта идет «барабан» где располагается самая ходовая продукция, товары в «барабане» отображаются с помощю сниппета getResources
[[getResources? &includeContent=`1` &includeTVs=`1` &tpl=`ver.carusel.tpl.2013` &resources=`[[$vmenuid]]` &limit=`0` &parents=`-1` ]]моя задача состояла в том чтобы запрограммировать чанк vmenuid, так чтобы выводился нужный товар в нужных разделах и страницах (пример таких условий указан на схеме) И вместо того чтобы можно было написать:
[[If? &subject=`[[*parent]]` &operator=`ia` &operand=`21,132,133`&andif=`1` (было бы не плохо расширить функционал сниппета If такой штукой)
&subject=`[[*id]]` &operator=`ia` &operand=`21,132,133`
&then=`[[$vmenuid-inner]]` &else=`295,296` ]]
где&andif=`1` — выдуманный мною — вымышленный, и не рабочий параметр, наличие которого облегчило наверное мою жизнь.[[*parent]] — id родительского документа.&operator=`ia` — «in array» соответствует ли одному из значений в массиве, условие при котором срабатывает &then.[[$vmenuid-inner]] это тоже набор условий If, код которого приведен ниже. Числа это id необходимых для вывода документов&else=`295,296` — набор id выводимых по умолчанию, через запятую можно вывести сколько угодно
Рабочая замена And if — вложенный if
Пришлось методом проб и ошибок, придумывать работающую аналогию: [[If? &subject=`[[*parent]]` &operator=`ia` &operand=`21,132,133`&then=`[[$vmenuid-inner]]` &else=` [[If? &subject=`[[*id]]` &operator=`ia` &operand=`21,132,133` &then=`[[$vmenuid-inner]]` &else=`295,296` ]] ` ]]
привожу фрагмент кода чанка vmenuid-inner (если выводить без чанка, работать не будет)
[[If? &subject=`[[*parent]]` &operand=`21` &then=`280,222` ]] [[If? &subject=`[[*id]]` &operand=`21` &then=`280,300` ]] [[If? &subject=`[[*parent]]` &operand=`133` &then=`110,150` ]] [[If? &subject=`[[*id]]` &operand=`133` &then=`110,111` ]]Если есть более изящное решение, я его не нашел.
Литература:http://rtfm.modx.com/display/ADDON/If
habr.com
IF MODX Revolution. IF обработка условий MODX Revolution
Под час работы с MODxRevolution, в случае если быть более точным, под час создании шаблонов, зачастую возникает надобность прибавления всевозможных условий и вычислений на лету. К примеру, считается ли эта страничка Главной либо страничкой Контактов, в случае если да, то вывести ссылку Карта сайта. Либо для интернета магазина, в случае если для документа предписано значение TV-параметра с размером скидки, то вывести вместо обыкновенной стоимости товаров, стоимость со скидкой. Для обработки условий в MODx’е имеется типичный сниппет If, который скачивается посредством менеджер пакетов, приведу перевод мануала сrtfm.modx.com СниппетIf вызвается с применением тега:
<code>[[If]]</code>или же, в случае, когда ваш Основной параметр (subject) может поменяться до того, как обновится кэш ресурса:<code>[[!If]]</code>Доступные характеристики Имя Описание Значение по умолчанию<code>subject Основной параметр, значение над которым исполняются условия operator Оператор для с сопоставления с основным параметром = operand Операнд, в случае если нужен — значение, которое нужно сопоставить с основным параметром, применяя Оператор then Вывести данное, в случае если результат сопоставления: true else Вывести данное, в случае если результат сопоставления: false debug В случае если true, вывести все подвергнутые обработке параметры 0 die В случае если debugand данный параметр true, исполнить die() после вывода всех параметров 0</code> Доступные операторы Оператор Описание<code> !=,neq,not,isnot,isnt,unequal,notequal Исполняется в случае если Основной параметр не равняется Операнду. ==,=,eq,is,equal,equals,equalto Исполняется в случае если Главный параметр равняется Операнду. <,lt,less,lessthan Исполняется в случае если Главный параметр менее Операнда. >,gt,greater,greaterthan Исполняется в случае если Основной параметр более Операнда. <=,lte,lessthanequals,lessthanorequalto Исполняется в случае если Главный параметр менее, или равен Операнду. >=,gte,greaterthanequals,greaterthanequalto Исполняется в случае если Главный параметр более, или равен Операнду. isempty,empty Исполняется в случае если Главный параметр пустой. !empty,notempty,isnotempty Исполняется в случае если Главный параметр не пустой. isnull,null Исполняется в случае если Главный параметр располагает значением null. inarray,in_array,ia Исполняется в случае если Главный параметр есть в списке перечисленном через запятую в Операнде.</code> ПримерыЦифровое сопоставление:
<code> [[!If? &subject=`[[+total]]` &operator=`GT` &operand=`3` &then=`У вас более нежели 3 штуки!`]]</code> Строковое сопоставление:<code>[[!If? &subject=`[[+name]]` &operator=`EQ` &operand=`George` &then=`Hey George! Long time no see!` &else=`You’re not George. Goaway.` ]]</code> Встроенный вызов сниппета:<code>[[!If? &subject=`[[+modx.user.id]]` &operator=`EQ` &operand=`0` &then=`[[Login]]` &else=`[[Logout]]` ]]</code> Проверка поля ресурса либо TV-параметра (либо всякого иного значения, которое не изменится до обновления кэша ресурса) под час вызова сниппетаIf, удостоверьтесь, что применяете кэшируемый вызов сниппета для проверки условия, для того чтобы не было надобности исполнять эту проверку при любом запросе.www.modx.cc
Условия использования материалов сайта
Все авторские и смежные права на материалы, опубликованные на сайте MODX.RU, за исключением случаев, когда автор материала указан отдельно, принадлежат сайту MODX.RU.
Все материалы, авторские права на которые принадлежат MODX.RU, могут воспроизводиться в любых СМИ - газетах, журналах, радиостанциях, телеканалах и сайтах сети Интернет. При перепечатке или ретрансляции материалов необходимо указать ссылку на первоисточник, а при перепечатке материалов в сети Интернет обязательным условием является наличие гиперссылки на MODX.RU как на источник материала.
Мы разрешаем частичное использование материалов сайта MODX.RU, однако запрещаем полное зеркалирование материалов сайта в сети Интернет. Перепечатка новостей, статей и прочих материалов на сторонних веб-сайтах и в печатных изданиях возможно только при соблюдении следующих условий:
- Материал может быть размещен на вашем ресурсе при условии указания прямой действующей гиперссылки на оригинал публикуемого материала на нашем сайте. "Прямая гиперссылка" подразумевает отсутствие в коде гиперссылки перенаправления (редиректа) запроса либо скриптов, закрывающих гиперссылку от поисковых машин. "Действующей" считается гиперссылка, щелкнув на которой мышью, пользователь попадет на страницу проекта MODX.RU. Указанная ссылка должна быть размещена сразу под заголовком публикуемого материала или в конце текста на странице неотрывно от материала (если материал многостраничный - на каждой странице) и иметь следующий вид (пример HTML кода):
Оригинал статьи: <a href="http://modx.ru/blog/modx-0962/">"Выпущен новый релиз MODx 0.9.6.2"</a><br/> Источник: <a href="http://modx.ru/">Русская поддержка MODX</a>
- Запрещается изменение подписей, благодарностей, изображений и любой другой справочной информации, указанной в материале, а также любые корректировки материала.
- О каждом факте использования наших материалов необходимо уведомлять администрацию проекта MODX.RU.
- Обращаем ваше внимание, что установка прямых текстовых гиперссылок на MODX.RU является обязательным условием любого копирования материалов с нашего сайта.
В случае возникновения вопросов по поводу использования наших материалов, обращайтесь к администрации проекта MODX.RU.
Если вы считаете, что какие-либо материалы, размещенные на нашем сайте, нарушают чьи-либо права на собственность, пожалуйста, свяжитесь с нами и мы урегулируем этот вопрос.
Отказ от ответственности
Вся информация предоставлена исключительно в ознакомительных или образовательных целях. Администрация сайта MODX.RU не несет ответственности за прямой или косвенный ущерб, понесенный в результате использования информации, размещенной на данном сайте. Вы используете эту информацию на свой страх и риск.
Администрация сайта MODX.RU не несет ответственности за содержание сообщений, публикуемых пользователями в форуме и комментариях к материалам, но приложит все усилия для выявления и удаления сообщений, нарушающих чьи-либо права.
Положение пользователя и/или компании в рейтинге MODX.RU может лишь косвенно служить одним из многих возможных критериев оценки знаний, опыта и любых других характеристик данного пользователя и/или компании.
Используя информацию с сайта MODX.RU, вы соглашаетесь, что вы самостоятельно без какого-либо участия MODX.RU формируете свои собственные критерии оценки и делаете выводы о принципиальной возможности, финансовой привлекательности, рисках и прочих условий сотрудничества с данным исполнителем.
MODX.RU отказывается от каких-либо персональных оценок, утверждений и гарантий о профессионализме и надежности пользователей и/или компаний, вне зависимости от их положения в рейтинге в любой момент времени.
Если вы не согласны с данными условиями, вы должны покинуть этот сайт немедленно.
modx.ru