Замена условия «and If» с помощю сниппета логических операций «If» в MODX Revo
Invite pending
В MODX Revo есть сниппет If, очень полезная штука, если штатных средств не достаточно. Но бывает что и сниппета If тоже не достаточно. Когда нужно задать довольно сложные условия.
Попробую проиллюстрировать свою задачу:

и подобные условия нужно определить для всех товаров и их папок.
По всему интернет магазину в правом столбике сайта идет «барабан» где располагается самая ходовая продукция, товары в «барабане» отображаются с помощю сниппета getResources
моя задача состояла в том чтобы запрограммировать чанк vmenuid, так чтобы выводился нужный товар в нужных разделах и страницах (пример таких условий указан на схеме)
И вместо того чтобы можно было написать:
где
&andif=`1` — выдуманный мною — вымышленный, и не рабочий параметр, наличие которого облегчило наверное мою жизнь.
[[*parent]] — id родительского документа.
&operator=`ia` — «in array» соответствует ли одному из значений в массиве, условие при котором срабатывает &then.
[[$vmenuid-inner]] это тоже набор условий If, код которого приведен ниже.
Числа это id необходимых для вывода документов
&else=`295,296` — набор id выводимых по умолчанию, через запятую можно вывести сколько угодно
Пришлось методом проб и ошибок, придумывать работающую аналогию:
привожу фрагмент кода чанка vmenuid-inner (если выводить без чанка, работать не будет)
Если есть более изящное решение, я его не нашел.
Литература:
http://rtfm.modx.com/display/ADDON/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