Skip to content
  1. Компоненты
  2. pdoTools
  3. Сниппеты
  4. pdoMenu

pdoMenu

Сниппет генерации меню. Может заменять Wayfinder, и позволяет более гибко указывать параметры.

Например, умеет строить меню сразу из нескольких родителей, отображая их как вместе, так и отдельными ветками.

Существенный прирост скорости дает только при первом запуске, дальше Wayfinder не особо уступает, благодаря грамотному кэшированию.

Параметры

По умолчанию pdoMenu принимает общие параметры pdoTools и некоторые свои:

НазваниеПо умолчаниюОписание
&parentsТекущий ресурсСписок родителей для поиска результатов, через запятую. Если поставить &parents=0 - выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки.
&level0 (не ограниченно)Уровень генерируемого меню.
&resourcesСписок ресурсов для вывода в результатах, через запятую. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки.
&templatesСписок шаблонов для фильтрации результатов, через запятую. Если id шаблона начинается с дефиса, ресурсы с ним исключается из выборки.
&whereМассив дополнительных параметров выборки, закодированный в JSON.
&displayStart0Включить показ начальных узлов меню. Полезно при указании более одного «parents».
&contextОграничение выборки по контексту ресурсов.
&showHidden0Показывать ресурсы, скрытые в меню.
&showUnpublished0Показывать неопубликованные ресурсы.
&previewUnpublished0Включить показ неопубликованных ресурсов, если у пользователя есть на это разрешение.
&hideSubMenus0Спрятать неактивные ветки меню.
&selectСписок полей для выборки, через запятую. Можно указывать JSON-строку с массивом, например &select={"modResource":"id,pagetitle,content"}
&sortbymenuindexЛюбое поле ресурса для сортировки, включая ТВ-параметр, если он указан в параметре &includeTVs, например &sortby={"tvname":"ASC","pagetitle":"DESC"}. Можно указывать JSON-строку с массивом нескольких полей. Для случайной сортировки укажите &sortby=RAND()
&sortdirASCНаправление сортировки: по убыванию или по возрастанию. Если оставить параметры &sortby и &sortdir пустыми, то сортировка будет идти по порядку ресурсов в &resources.
&limit0Ограничение количества результатов выборки.
&offset0Пропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit
&checkPermissionsУкажите, какие разрешения нужно проверять у пользователя при выводе ресурсов, например &checkPermissions=list.
&countChildren0Точный подсчет количества дочерних ресурсов каждой категории и вывод их в плейсхолдер [[+children]]. Делает дополнительные запросы в БД, поэтому по умолчанию отключен.
&toPlaceholderЕсли не пусто, сниппет сохранит все данные в плейсхолдер с этим именем вместо вывода на экран.
&plPrefixwf.Префикс для выставляемых плейсхолдеров.
&showLog0Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контексте «mgr».
&fastMode0Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны.
&cache0Кэширование результатов работы сниппета.
&cacheTime3600Время актуальности кэша, в секундах.
&scheme-1Схема формирования url, передаётся в modX::makeUrl(), поэтому возможные варианты нужно смотреть здесь. Особый тип uri подставляет значение uri ресурса, без запуска функции.
&useWeblinkUrl1Генерировать ссылку с учетом класса ресурса.
&rowIdPrefixПрефикс id="" для выставления идентификатора в чанк.
&hereIdid текущего ресурса для генерируемого меню. Нужно указывать только если скрипт сам его неверно определяет, например при выводе меню из чанка другого сниппета.
&includeTVsСписок ТВ-параметров для выборки, через запятую. Например &includeTVs=action,time дадут плейсхолдеры [[+action]] и [[+time]].
&prepareTVsСписок ТВ-параметров, с файлами из источников медиа, для которых нужно сгенерировать полные пути. Если установить &prepareTVs=1, будут подготовлены все ТВ, указанные в &includeTVs.
&processTVsСписок ТВ-параметров, которые нужно обработать и вывести согласно их настроек в менеджере системы. Если установить &processTVs=1, будут обработаны все ТВ, указанные в &includeTVs. Замедляет работу.
&tvPrefixПрефикс для ТВ-параметров.

Параметры шаблонов

Эти параметры устанавливают чанки, которые содержат шаблоны для генерации меню.

НазваниеОписание
&tplOuterЧанк оформления всего блока меню. По умолчанию: @INLINE <ul [[+classes]]>[[+wrapper]]</ul>
&tplЧанк оформления пункта меню. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию: @INLINE <li [[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>
&tplHereЧанк оформления текущего пункта меню.
&tplStartЧанк оформления корневого пункта, при условии, что включен &displayStart. По умолчанию: @INLINE <h2 [[+classes]]>[[+menutitle]]</h2>[[+wrapper]]
&tplParentRowЧанк оформления родителя с потомками, не подпадающего под условия &tplCategoryFolder. Например: @INLINE <li class="submenu_wrap [[+classnames]]"><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>
&tplParentRowHereЧанк оформления текущего документа, если он содержит потомков.
&tplParentRowActiveЧанк оформления родителей с потомками в активной ветке меню.
&tplCategoryFolderСпециальный чанк оформления категории. Категорией считается родитель с потомками, у которого указан пустой шаблон или rel="category" в поле link_attributes.
&tplInnerЧанк оформления всего блока подпунктов меню. Если пуст - будет использовать &tplOuter. Например: @INLINE <ul class="submenu [[+classnames]]">[[+wrapper]]</ul>
&tplInnerRowЧанк оформления подпункта меню. Например: @INLINE <li class="submenu_item [[+classnames]]"><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>
&tplInnerHereЧанк оформления активного подпункта меню.

Параметры CSS классов

Эти параметры задают значение плейсхолдеров [[+classnames]] и [[+classes]] для различных элементов меню. Плейсхолдер [[+classnames]] выводит только название класса без атрибута class="", в отличие от плейсхолдера [[+classes]].

НазваниеОписание
&firstClassКласс для первого пункта меню. По умолчанию: first
&lastClassКласс последнего пункта меню. По умолчанию: last
&hereClassКласс для активного пункта меню. По умолчанию: active
&parentClassКласс категории меню.
&rowClassКласс пункта меню.
&outerClassКласс обертки блока меню.
&innerClassКласс обертки блока подпунктов меню.
&levelClassКласс уровня меню. Например если укажите «level», то будет «level1», «level2» и т.д.
&selfClassКласс текущего ресурса в меню.
&webLinkClassКласс ресурса-ссылки.

Примеры

Обычный вывод меню из корня сайта в один уровень:

modx
[[pdoMenu?
  &parents=`0`
  &level=`1`
]]

Вывод с исключением определенных родителей и проверкой разрешений пользователя:

modx
[[pdoMenu?
  &parents=`-10,-15`
  &level=`2`
  &checkPermissions=`load,list,view`
]]

Вывод меню сразу из двух родителей, с показом корневых точек:

modx
[[pdoMenu?
  &parents=`10,15`
  &displayStart=`1`
]]

Вывод двух уровней ресурсов с подсчетом количества вложенных:

modx
[[pdoMenu?
  &parents=`0`
  &level=`2`
  &tplInner=`@INLINE [[+wrapper]]`
  &tplParentRow=`@INLINE <li [[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a> ([[+children]])</li>[[+wrapper]]`
  &countChildren=`1`
]]