Скрываем только дочерние пункты определенного ресурса в pdoMenu в MODX Revo
Я думаю, что многие знают такой сниппет, как «pdoMenu» для MODX Revolution, который помогает без особого труда и с тонкими настройками сформировать меню на вашем сайте.
Я же (а точнее заказчик) использовал этот сниппет для генерации карты сайта на своем проекте. А почему бы и нет? Но вся проблема заключалась в том, что в этой карте нужно было скрыть большое количество дочерних элементов у нескольких ресурсов.
Конечно, организовать это можно через стандартную функцию «Не показывать в меню», но когда речь идет о скрытии сотен таких ресурсов – этот способ является не совсем рациональным.
По умолчанию, чтобы скрыть сам элемент и его дочерние ресурсы, существует параметр «&parents» с отрицательным значением или же параметр «&resources» (также с отрицательным значением), который позволяет точечно скрыть ненужные нам ресурсы.
Но как быть, если нам нужно как можно проще скрыть дочерние ресурсы определенного элемента?
Этим вопросом задался и я, и первым делом отправился на поиски в великий Google. Ответов на этот вопрос было мало, и самый популярный из них – это использовать параметр «&where», где указать ID главного элемента, у которого нужно скрыть дочерние ресурсы.
На примере простого меню это будет выглядеть так:
[[pdoMenu?
&parents=`0`
&level=`0`
&where=`{"parent:!=": "3"}`
]]
Где 3 – главный элемент меню, у которого нужно скрыть дочерние ресурсы.
Но мне этого было мало, и я задался вопросом: а как же скрыть дочерние элементы сразу у нескольких ресурсов?
Как таковой документации к сниппету я не нашел и, просидев чуть меньше часа (А если быть точным – то 57 минут. Порой решение задач требует большого времени, но именно это отличает нас от многих похожих ресурсов – мы сами ищем для вас наиболее эффективные способы решения), я нашел решение.
Использовать мы все так же будем параметр «&where», но только с немного другим условием. А именно:
[[pdoMenu?
&parents=`0`
&level=`0`
&where=`(parent != '1' AND parent != '2' AND parent != '3' AND parent != '4')`
]]
Все числа в параметре «&where», как вы уже догадались – это список всех родительских ресурсов, где нужно скрыть дочерние элементы, оставив при этом сам ресурс.