Как скрыть блок от дочерних элементов ресурса в MODX Revo?

У меня есть виджет в сайдбаре, который я хочу показывать на всех страницах, кроме дочерних контейнера с id, например, 418 (при этом виджет должен быть виден для 418). В пакете IF ничего подобного не нашел.


person Azamat Safarov    schedule 27.03.2017    source источник
comment
Вы используете getResources? В этом случае используйте &parents="1,2,3,-418" в вызове сниппета (где 1,2 и 3 представляют идентификаторы других ресурсов).   -  person MeltingDog    schedule 28.03.2017
comment
У меня ~800 ресурсов, думаю это не мой случай.   -  person Azamat Safarov    schedule 28.03.2017


Ответы (1)


Первым и несколько примитивным решением может быть просто создание нового шаблона путем небольшого изменения текущего (удаление виджета), а затем установка вновь созданного шаблона для страниц, на которых виджет не должен отображаться.

Второй подход, о котором я подумал, — это получить каким-то образом родительский идентификатор ресурса, а затем использовать его в "прокси" блоке (вместо прямого вызова блока виджета) внутри вашего текущего шаблона следующим образом:

[[!If?
&subject=`[[!getParentId]]`
&operator=`EQ`
&operand=`418`
&then=``
&else=`[[$yourWidget]]`
]]

Должны быть некоторые дополнения с необходимой функциональностью для получения идентификатора родителя, или вы всегда можете написать свой собственный небольшой фрагмент «getParentId» на основе этого:

return $modx->getParentIds( $modx->resource->id );
person curveball    schedule 28.03.2017
comment
Родительский идентификатор можно получить с помощью [[*parent]]. Я думал об этом подходе, но остановился на реализации нескольких значений для ключа &operand. Нашел ответ здесь stackoverflow.com/questions/35101931/ - person Azamat Safarov; 29.03.2017
comment
ооо... ты прав, я просто пропустил [[*parent]]. МОДХ классный!) - person curveball; 29.03.2017