
pdoMenu 
Сниппет генерации меню. Может заменять Wayfinder, и позволяет более гибко указывать параметры.
Например, умеет строить меню сразу из нескольких родителей, отображая их как вместе, так и отдельными ветками.
Существенный прирост скорости дает только при первом запуске, дальше Wayfinder не особо уступает, благодаря грамотному кэшированию.
Параметры 
По умолчанию pdoMenu принимает общие параметры pdoTools и некоторые свои:
| Название | По умолчанию | Описание | 
|---|---|---|
| &parents | Текущий ресурс | Список родителей для поиска результатов, через запятую. Если поставить &parents=0 - выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки. | 
| &level | 0 (не ограниченно) | Уровень генерируемого меню. | 
| &resources | Список ресурсов для вывода в результатах, через запятую. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки. | |
| &templates | Список шаблонов для фильтрации результатов, через запятую. Если id шаблона начинается с дефиса, ресурсы с ним исключается из выборки. | |
| &where | Массив дополнительных параметров выборки, закодированный в JSON. | |
| &displayStart | 0 | Включить показ начальных узлов меню. Полезно при указании более одного «parents». | 
| &context | Ограничение выборки по контексту ресурсов. | |
| &showHidden | 0 | Показывать ресурсы, скрытые в меню. | 
| &showUnpublished | 0 | Показывать неопубликованные ресурсы. | 
| &previewUnpublished | 0 | Включить показ неопубликованных ресурсов, если у пользователя есть на это разрешение. | 
| &hideSubMenus | 0 | Спрятать неактивные ветки меню. | 
| &select | Список полей для выборки, через запятую. Можно указывать JSON-строку с массивом, например &select={"modResource":"id,pagetitle,content"} | |
| &sortby | menuindex | Любое поле ресурса для сортировки, включая ТВ-параметр, если он указан в параметре &includeTVs, например &sortby={"tvname":"ASC","pagetitle":"DESC"}. Можно указывать JSON-строку с массивом нескольких полей. Для случайной сортировки укажите &sortby=RAND() | 
| &sortdir | ASC | Направление сортировки: по убыванию или по возрастанию. Если оставить параметры &sortby и &sortdir пустыми, то сортировка будет идти по порядку ресурсов в &resources. | 
| &limit | 0 | Ограничение количества результатов выборки. | 
| &offset | 0 | Пропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit | 
| &checkPermissions | Укажите, какие разрешения нужно проверять у пользователя при выводе ресурсов, например &checkPermissions=list. | |
| &countChildren | 0 | Точный подсчет количества дочерних ресурсов каждой категории и вывод их в плейсхолдер [[+children]]. Делает дополнительные запросы в БД, поэтому по умолчанию отключен. | 
| &toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем вместо вывода на экран. | |
| &plPrefix | wf. | Префикс для выставляемых плейсхолдеров. | 
| &showLog | 0 | Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контексте «mgr». | 
| &fastMode | 0 | Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны. | 
| &cache | 0 | Кэширование результатов работы сниппета. | 
| &cacheTime | 3600 | Время актуальности кэша, в секундах. | 
| &scheme | -1 | Схема формирования url, передаётся в modX::makeUrl(), поэтому возможные варианты нужно смотреть здесь. Особый тип uri подставляет значение uri ресурса, без запуска функции. | 
| &useWeblinkUrl | 1 | Генерировать ссылку с учетом класса ресурса. | 
| &rowIdPrefix | Префикс id="" для выставления идентификатора в чанк. | |
| &hereId | id текущего ресурса для генерируемого меню. Нужно указывать только если скрипт сам его неверно определяет, например при выводе меню из чанка другого сниппета. | |
| &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 | Класс ресурса-ссылки. | 
Примеры 
Обычный вывод меню из корня сайта в один уровень:
[[pdoMenu?
  &parents=`0`
  &level=`1`
]]Вывод с исключением определенных родителей и проверкой разрешений пользователя:
[[pdoMenu?
  &parents=`-10,-15`
  &level=`2`
  &checkPermissions=`load,list,view`
]]Вывод меню сразу из двух родителей, с показом корневых точек:
[[pdoMenu?
  &parents=`10,15`
  &displayStart=`1`
]]Вывод двух уровней ресурсов с подсчетом количества вложенных:
[[pdoMenu?
  &parents=`0`
  &level=`2`
  &tplInner=`@INLINE [[+wrapper]]`
  &tplParentRow=`@INLINE <li [[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a> ([[+children]])</li>[[+wrapper]]`
  &countChildren=`1`
]]