pdoMenu
pdoMenu — Сниппет генерации меню.
Оглавление
pdoMenu — сниппет предназначен для генерации меню. Умеет строить меню сразу из нескольких родителей, отображая их как вместе, так и отдельными ветками.
Параметры
Параметры сниппета pdoMenu.
Параметры построения меню
По умолчанию 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 | Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекcте «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 | @INLINE <h2 [[+classes]]>[[+menutitle]]</h2>[[+wrapper]] |
Чанк оформления корневого пункта, при условии, что включен &displayStart. |
&tplParentRow | Чанк оформления родителя с потомками, не подпадающего под условия &tplCategoryFolder. Например: @INLINE <li class="submenu_wrapp [[+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 | Класс ресурса-ссылки. |
Примеры
Обычный вывод меню из корня сайта в один уровень:
/* modParser */
[[pdoMenu?
&parents=`0`
&level=`1`
]]
/* pdoParser */
{$_modx->runSnippet('!pdoMenu', [
'parents' => 0,
'level' => 1,
])}
Вывод с исключением определенных родителей и проверкой разрешений пользователя:
/* modParser */
[[pdoMenu?
&parents=`-10,-15`
&level=`2`
&checkPermissions=`load,list,view`
]]
/* pdoParser */
{$_modx->runSnippet('!pdoMenu', [
'parents' => '-10,-15',
'level' => 2,
'checkPermissions' => 'load,list,view',
])}
Вывод меню сразу из двух родителей, с показом корневых точек:
/* modParser */
[[pdoMenu?
&parents=`10,15`
&displayStart=`1`
]]
/* pdoParser */
{$_modx->runSnippet('!pdoResources', [
'parents' => '10,15',
'displayStart' => 1,
])}
Вывод двух уровней ресурсов с подсчетом количества вложенных:
/* modParser */
[[pdoMenu?
&parents=`0`
&level=`2`
&tplInner=`@INLINE [[+wrapper]]`
&tplParentRow=`@INLINE <li [[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a> ([[+children]])</li>[[+wrapper]]`
&countChildren=`1`
]]
/* pdoParser */
{$_modx->runSnippet('!pdoResources', [
'parents' => 0,
'level' => 2,
'tplInner' => '@INLINE {$wrapper}',
'tplParentRow' => '@INLINE <li {$classes}><a href="{$link}" {$attributes}>{$menutitle}</a> ({$children})</li>{$wrapper}',
'countChildren' => 1,
])}
Время запросов: 0,1240 s
Количество запросов: 24
Источник: cache