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 
&excludeDocs

&resources

pdoMenu. Если значение не пусто, то в меню будут выведены только указанные ID ресурсов. Указываются через запятую. Если ID ресурса начинается с дефиса, то он исключается из выборки. 

Wayfinder. За выборку определённых ресурсов отвечает параметр &includeDocs, за исключение - &excludeDocs.

&cacheResults

&cache=`0`

Кэшировать ли результаты сниппета. 0 - не кэшировать, 1 - кэшировать. 

&cacheTime=`3600`

&cacheTime=`3600`

Время хранения кэша, если включено кэширование результатов работы сниппета. 

&contexts

&context

Если не пусто, то выборка ограничивается по заданному контексту. 

&scheme=`-1`

&scheme=`-1`

Схема формирования URL: 
-1 - относительно настройки site_url
 0 - абсолютный путь по протоколу http
 1 - абсолютный путь по протоколу https
full - абсолютный путь, при построении используется настройка site_url
abs - абсолютный путь, при построении используется настройка base_url
http - то же самое что и 0
https - то же самое что и 1

&sortBy
&sortOrder

&sortby=`menuindex`

Поле, по которому будет производиться сортировка. 
Wayfinder. Для задания направление сортировки используется отдельный параметр sortOrder.
pdoMenu. Позволяет производить сортировку так же и по TV полю, если оно подключено в настройке includeTVs. Причём позволяет сортировать сразу по нескольким полям одновременно, если задать строку JSON формата, например: {"tvname":"ASC", "pagetitle":"DESC"}. В качестве значения используется направление для сортировки. Для случайной сортировки используется RAND()

&where

&where

JSON строка, в которой задаются параметры для выборки данных. Например: &where=`[{"class_key:!=": "msCategory"}]` То есть, не выводить те ресурсы, которые являются категориями Minishop. 

&hereId

&hereId

ID итерируемого (который обрабатывается именно сейчас) документа. Используется в тех случаях, когда сам сниппет по каким-то причинам определяет его неправильно. 

&hereTpl

&tplHere

Чанк текущего (активного) документа.

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

Wayfinder (значение по умолчанию) pdoMenu (значение по умолчанию) Применение

&outerTpl
Значение по умолчанию: <ul[[+wf.classes]]>[[+wf.wrapper]]</ul>

&tplOuter=`@INLINE <ul[[+classes]]>[[+wrapper]]</ul>`

Чанк-обёртка всех пунктов меню.
Wayfinder. Задаётся отдельным чанком, при этом доступен плэйсхолдер: [[+wf.wrapper]]

 

&rowTpl
Значение по умолчанию: <li[[+wf.id]][[+wf.classes]]><a href="[[+wf.link]]" title="[[+wf.title]]" [[+wf.attributes]]>[[+wf.linktext]]</a>[[+wf.wrapper]]</li>

&tpl=`@INLINE <li[[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>`

Чанк оформления пункта меню. 
pdoMenu. Если в качестве имени указан несуществующий чанк, то произойдёт распечатка всех плэйсхолдеров. 

&startItemTpl
Значение по умолчанию: <h2[[+wf.id]][[+wf.classes]]>[[+wf.linktext]]</h2>[[+wf.wrapper]]

&tplStart=`@INLINE <h2[[+classes]]>[[+menutitle]]</h2>[[+wrapper]]`

Чанк оформления корневого пункта меню, при условии что активирован параметр displayStart. 

&parentRowHereTpl

&tplParentRowHere

Чанк оформления текущего ресурса, при условии что он содержит дочерние ресурсы. 
Wayfinder. Для вывода дочерних ресурсов используется плэйсхолдер [[+wf.wrapper]]
pdoMenu. Для вывода дочерних ресурсов используется плэйсхолдер [[+wrapper]]

&parentRowTpl

&tplParentRow

Чанк оформления ресурса-контейнера с потомками.  
Wayfinder. Для вывода дочерних ресурсов используется плэйсхолдер [[+wf.wrapper]]
pdoMenu. Для вывода дочерних ресурсов используется плэйсхолдер [[+wrapper]]

&hereTpl

&tplHere

Чанк текущего (активного) документа. 

&innerTpl

&tplInner

Чанк внутренней обёртки, которая используется при выводе подменю. Удобно, когда внутреннему ul мы хотим задать какой-то иной класс.
pdoMenu. При пустом значении будет использоваться параметр &tplOuter

&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` 
]]

Фактически здесь мы кастомизировали обёртку как для первого, так и второго уровня вложенности.

Однако, это лишь малая часть того, как можно использовать сниппет - благодаря его гибкости, вариантов может быть бесконечно много.

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.