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

Если вы читаете данную статью, значит, во-первых, вы знаете, что такое pdoMenu и pdoTools, а во-вторых, у вас возникли трудности с пониманием какой параметр шаблона для чего нужен.

Шаблонов у pdoMenu больше 10. Вот их полный список. Давайте теперь последовательно их разберём.

Параметр tplOuter

Это самый первый параметр в описании. Он содержит или название чанка или код инлайн-чанка, который будет контейнером для пунктов меню. По-умолчанию, в нём указано @INLINE <ul></ul>. Плейсхолдер будет заменён на пункты меню. А в плейсхолдер подставится значение параметра outerClass, в котором указывается класс контейнера меню. В принципе, можно сразу указать нужный класс в шаблоне. В этом случае параметр outerClass можно не использовать.

[[pdoMenu?&tplOuter =`@INLINE <ul class="myMenuWrapperClass">[[+wrapper]]</ul>`...]]

Параметр tpl

Он отвечает за формирование пунктов меню. В нём также указывается чанк (обычный или инлайн). По-умолчанию, он содержит шаблон элемента списка для контейнера, указанного в предыдущем параметре —

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

Мы тут видим элемент li, который содержит ссылку на страницу. За ссылку отвечает плейсхолдер , который формируется согласно параметру scheme. Если вы используете относительные ссылки, то можно безболезненно заменить на .

Плейсхолдеры и содержат значение полей ресурса link_attribute и menutitle соответственно. Тут надо отметить, что если поле menutitle пустое, то в плейсхолдер будет записано значение поля pagetitle.

В плейсхолдере хранятся классы, указанные в параметрах классов, за исключением параметров outerClass и innerClass. Эти параметры используются в шаблонах-контейнерах, указанных в tplOuter и tplInner соответственно. В документации про классы описано достаточно понятно.

Запомните!

Есть одна ломающая логическую парадигму тонкость — параметр шаблона для активных элементов меню имеет суффикс «Active», параметры текущих элементов — суффикс «Here» (tplHere, tplParentHere). А у классов — для активного пункта предназначен параметр hereClass со значением по-умолчанию «active», а для текущего пункта — параметр selfClass.

Было бы логичнее назвать их по аналогии с шаблонами activeClass и hereClass соответственно.

На всякий случай поясню, что текущий пункт — это текущая открытая страница, а активные пункты — это текущая страница и её родители.

Плейсхолдер необходим для вывода следующего уровня меню. Если его убрать, то дочерние ресурсы показываться не будут, т.е. будет отображён только первый уровень меню.

В принципе этих двух параметров хватит для вывода меню. Достаточно указать родителя и уровень вложенности:

[[pdoMenu?&parents=`0`&level=`2`]]

Параметр tplHere

Если вы хотите, чтобы текущий пункт меню отличался от остальных не только классом, но и разметкой (например, вместо ссылки должен быть текст), то в этом случае на помощь придёт параметр tplHere.

[[pdoMenu?&parents=`0`&level=`2`&tplHere=`@INLINE <li [[+classes]]><span>[[+menutitle]]</span>[[+wrapper]]</li>`]]

Параметр tplParentRow

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

У меня в разделе Документация этот параметр выглядит так

&tplParentRow =`@INLINE <li [[+classes]]><i class="fa fa-caret-right trigger"></i> <a href="[[+link]]">[[+menutitle]]</a><div class="collapsible">[[+wrapper]]</div></li>`

Параметр tplParentRowHere

В этом параметре указывается шаблон для открытой страницы-контейнера. Если вы указали шаблон в tplParentRow, то придётся определять шаблон и для этого параметра. В противном случае для текущего пункта меню будет использоваваться шаблон, указанный в параметре tplHere, который используется для обычных пунктов, т.е. не контейнеров.

Параметр tplParentRowActive

Шаблон, указанный в данном параметре, используется для отображения всех родителей текущей страницы. Т.е. если вы выбрали ресурс, находящийся на 3-ем уровне, то родительские пункты меню первого и второго уровня отрисуются согласно шаблону, указанному в этом параметре. Если его не указывать, то будет использован шаблон из tplParentRow или tpl, если не указан tplParentRow.

 

Теперь давайте рассмотрим параметры для вложенного меню — tplInner, tplInnerRow и tplInnerHere.

Параметр tplInner

Шаблон из этого параметра является обёрткой для вложенных пунктов меню. Обычно это ul элемент. Т.е. он аналогичен шаблону из tplOuter. Если его не указывать, то будет использоваться шаблон из tplOuter.

Параметр tplInnerRow

Является аналогом tpl, но используется только для вложенных пунктов. Если не указан, то вместо него используется шаблон из tpl.

Параметр tplInnerHere

Заменяет шаблон из tplHere для вложенных пунктов.

Покажу как это выглядит на примере для ясности.

<ul> // tplOuter
    <li>Первый пункт (содержит подменю)  //tplParentRow
        <ul> // tplInner
            <li>Первый подпункт</li> //tplInnerRow
            <li>Второй подпункт</li> //tplInnerRow
        </ul></li><li>Второй пункт</li> // tpl
</ul>

Параметр tplCategoryFolder

Этот параметр позволяет задать шаблон для отдельных пунктов меню. Вот что указано в документации —

Специальный чанк оформления категории. Категория — это документ с «isfolder = 1» и или нулевым шаблоном, или с атрибутом «rel=category»

На текущий момент для ресурсов, у которых отмечен чекбокс «Контейнер», т.е. isfolder=1, данный параметр не срабатывает.

Параметр levelClass

Это важный параметр. Он позволяет указать уровень пунктов меню через название класса. Т.е. если задать значение «level», то у элементов первого уровня будет класс «level1», у второго — «level2» и т.д. Это упрощает задачу оформления меню.

Надеюсь, более менее стало понятно.