Pull to refresh

Замена условия «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
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.