Артём Мáлков

Скрываем только дочерние пункты определенного ресурса в pdoMenu в MODX Revo

9 мар2 комм

Я думаю, что многие знают такой сниппет, как «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», как вы уже догадались – это список всех родительских ресурсов, где нужно скрыть дочерние элементы, оставив при этом сам ресурс.

Рекомендуем к просмотру
Почему в pdoResources не выводится информация из поля «content» в MODX Revo?
Статьи и советы
Ошибка карты сайта XML: пустой тег loc в MODX Revo
Статьи и советы
Как с помощью своего сниппета получить данные определенного ресурса в MODX Revo?
Статьи и советы
2
комментария
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 3
    1
      •  Пользователь
    25 апр в 12:36

    Спасибо, интересное решение. То что искал.

    • 2
    41
      •  Проверенный
    23 июл в 22:42

    Мне очень нравится Modx Revo. Мы в основном делаем наши сайты на этом cmf. Очень удобно.

    Я про этот способ скрытия дочерних пунктов не знал. Буду применять. Спасибо за подробное решение.

Подняться наверх
«Pandoge» - помощник вебмастера