pdoMenu как замена Wayfinder
Эти два сниппета используются для построения меню на основе дерева ресурсов Modx Revo. pdoMenu по сравнению с Wayfinder работает значительно шустрее, да и по функционалу и гибкости несомненно у последнего выигрывает. Поэтому на всех разрабатываемых мною сайтах, я постепенно стал отказываться от Wayfinder в пользу pdoMenu. Но поскольку их параметры изредка да отличаются, чтобы такой переход был безболезненным, в этой статье я решил пройтись по всем параметрам двух сниппетов, объединив схожие по назначению параметры в одну строку. Таким образом, если вы решите перейти с Wayfinder на pdoMenu, вам просто нужно будет заменить значение из первого столбика на второе. Впрочем справедливо и обратное утверждение, однако я пока что не встречал таких случаев, чтобы в этом была необходимость.
Основные параметры
| Wayfinder (значение по умолчанию) | pdoMenu (значение по умолчанию) | Применение |
|---|---|---|
|
&startId=`[[*id]]` |
&parents=`[[*id]]` |
Wayfinder. В качестве параметра указывается ресурс, от начала которого будет построено меню. 0 - означает что от самого корня, ни один ресурс не будет пропущен. pdoMenu. В parents через запятую можно указывать несколько родителей. Если имя ресурса начинается с "дефиса", то он исключается из выборки. |
|
&displayStart=`0` |
&displayStart=`0` |
Включать ли самого родителя, от которого строится меню, в выборку. 0 - не включать. |
|
&level=`0` |
&level=`0` |
Максимальный уровень вложенности. 0 - показывать все уровни. |
|
&ignoreHidden=`0` |
&showHidden=`0` |
Игнировать ли настройку ресурса - "Не показывать в меню". 0 - не игнорировать. |
|
&ph=`0` |
&toPlaceholder |
Если значение не пусто, то все данные будут сохранены в плэйсхолдер, вместо их вывода на экран. |
|
&hideSubMenus=`0` |
&hideSubMenus=`0` |
Прятать неактивные ветки меню. 0 - не прятать. |
|
&rowIdPrefix=`0` |
&rowIdPrefix |
Если значение не пусто, то будет использоваться заданный префикс, который будет указан перед id документа. |
|
&useWeblinkUrl=`1` |
&useWeblinkUrl=`1` |
Генерировать ссылку на ресурс или нет. Станет доступна в плэйсхолдере [[+link]]. |
|
&includeDocs |
&resources |
pdoMenu. Если значение не пусто, то в меню будут выведены только указанные ID ресурсов. Указываются через запятую. Если ID ресурса начинается с дефиса, то он исключается из выборки. Wayfinder. За выборку определённых ресурсов отвечает параметр &includeDocs, за исключение - &excludeDocs. |
|
&cacheResults |
&cache=`0` |
Кэшировать ли результаты сниппета. 0 - не кэшировать, 1 - кэшировать. |
|
&cacheTime=`3600` |
&cacheTime=`3600` |
Время хранения кэша, если включено кэширование результатов работы сниппета. |
|
&contexts |
&context |
Если не пусто, то выборка ограничивается по заданному контексту. |
|
&scheme=`-1` |
&scheme=`-1` |
Схема формирования URL: |
|
&sortBy |
&sortby=`menuindex` |
Поле, по которому будет производиться сортировка. |
|
&where |
&where |
JSON строка, в которой задаются параметры для выборки данных. Например: &where=`[{"class_key:!=": "msCategory"}]` То есть, не выводить те ресурсы, которые являются категориями Minishop. |
|
&hereId |
&hereId |
ID итерируемого (который обрабатывается именно сейчас) документа. Используется в тех случаях, когда сам сниппет по каким-то причинам определяет его неправильно. |
|
&hereTpl |
&tplHere |
Чанк текущего (активного) документа. |
Параметры шаблонов
| Wayfinder (значение по умолчанию) | pdoMenu (значение по умолчанию) | Применение |
|---|---|---|
|
&outerTpl |
&tplOuter=`@INLINE <ul[[+classes]]>[[+wrapper]]</ul>` |
Чанк-обёртка всех пунктов меню.
|
|
&rowTpl |
&tpl=`@INLINE <li[[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>` |
Чанк оформления пункта меню. |
|
&startItemTpl |
&tplStart=`@INLINE <h2[[+classes]]>[[+menutitle]]</h2>[[+wrapper]]` |
Чанк оформления корневого пункта меню, при условии что активирован параметр displayStart. |
|
&parentRowHereTpl |
&tplParentRowHere |
Чанк оформления текущего ресурса, при условии что он содержит дочерние ресурсы. |
|
&parentRowTpl |
&tplParentRow |
Чанк оформления ресурса-контейнера с потомками. |
|
&hereTpl |
&tplHere |
Чанк текущего (активного) документа. |
|
&innerTpl |
&tplInner |
Чанк внутренней обёртки, которая используется при выводе подменю. Удобно, когда внутреннему ul мы хотим задать какой-то иной класс. |
|
&innerRowTpl |
&tplInnerRow |
Чанк оформления пункта меню, который в свою очередь находится внутри внутреннего ul. |
|
&innerHereTpl |
&tplInnerHere |
Чанк оформления активного пункта меню, который в свою очередь находится внутри внутреннего ul. |
|
&activeParentRowTpl |
&tplParentRowActive |
Чанк оформления активного ресурса-контейнера с потомками. |
|
&categoryFoldersTpl |
&tplCategoryFolder |
Чанк оформления категории. Под категорией подразумевается ресурс-контейнер, у которого пустой шаблон или присутствует атрибут rel=category. |
Параметры CSS классов
| Wayfinder (значение по умолчанию) | pdoMenu (значение по умолчанию) | Применение |
|---|---|---|
|
&firstClass |
&firstClass=`first` |
Класс для первого пункта в меню. |
|
&lastClass=`last` |
&lastClass=`last` |
Класс для последнего пункта в меню. |
|
&hereClass=`active` |
&hereClass=`active` |
Класс для активного пункта меню (включая все меню верхнего уровня). |
|
&selfClass |
&selfClass |
Класс для активного пункта меню (но не для всей цепочки). |
|
&parentClass=`parent` |
&parentClass |
Класс для пункта меню, который является контейнером и имеет детей. |
|
&rowClass |
&rowClass |
Класс для каждой строки меню. |
|
&levelClass |
&levelClass |
Класс для каждого уровня меню. Если указать level, то будет сгенерировано level1, level2, level3 и т. д. |
|
&outerClass |
&outerClass |
Класс для обёртки меню. |
|
&innerClass |
&innerClass |
Класс для внутренних пунктов меню. |
|
&webLinkClass |
&webLinkClass |
Класс для пункта меню типа "Ссылка". |
Примеры работы
Для того чтобы построить самое простое меню, которое выведет пункты меню только первого уровня от корня, достаточно вызвать снипет так:
[[pdoMenu? &parents=`0` &level=`1`]]
А вот и пример того, насколько сниппет вообще может быть гибким:
[[!pdoMenu?
&parents=`2`
&level=`2`
&tplOuter=`@INLINE<ul class="left_menu">[[+wrapper]]</ul>`
&tplInner=`@INLINE<ul class="left_menu_2">[[+wrapper]]</ul>`
&tplParentRow=`@INLINE <li class="has-dropdown [[+attributes]]"><a href="[[+link]]"><span>[[+menutitle]]</span></a>[[+wrapper]]</li>`
&hereClass=`selected`
]]
Фактически здесь мы кастомизировали обёртку как для первого, так и второго уровня вложенности.
Однако, это лишь малая часть того, как можно использовать сниппет - благодаря его гибкости, вариантов может быть бесконечно много.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()