Программирование на Python и Objective-C в Mac OS

Программирование на Python и Objective-C под Mac OS и для iPhone / iPod Touch

Modx revo pdomenu параметры: pdoMenu / Сниппеты / pdoTools / docs.modx.pro

Содержание

pdoMenu / Сниппеты / pdoTools / docs.modx.pro

Сниппет генерации меню. Может заменять Wayfinder, и позволяет более гибко указывать параметры.

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

Существенный прирост скорости дает только при первом запуске, дальше Wayfinder не особо уступает, благодаря грамотному кэшированию.

Параметры

По умолчанию pdoMenu принимает общие параметры pdoTools и некоторые свои:

НазваниеПо умолчаниюОписание
&parentsТекущий ресурсСписок родителей для поиска результатов, через запятую. Если поставить &parents=`0` — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки.
&level0 (не ограниченно)Уровень генерируемого меню.
&resourcesСписок ресурсов для вывода в результатах, через запятую. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки.
&templatesСписок шаблонов для фильтрации результатов, через запятую. Если id шаблона начинается с дефиса, ресурсы с ним исключается из выборки.
&whereМассив дополнительных параметров выборки, закодированный в JSON.
&displayStart0Включить показ начальных узлов меню. Полезно при указании более одного «parents».
&contextОграничение выборки по контексту ресурсов.
&showHidden0Показывать ресурсы, скрытые в меню.
&showUnpublished0Показывать неопубликованные ресурсы.
&previewUnpublished0Включить показ неопубликованных ресурсов, если у пользователя есть на это разрешение.
&hideSubMenus0Спрятать неактивные ветки меню.
&selectСписок полей для выборки, через запятую. Можно указывать JSON-строку с массивом, например &select=`{«modResource»:»id,pagetitle,content»}`
&sortbymenuindexЛюбое поле ресурса для сортировки, включая ТВ-параметр, если он указан в параметре &includeTVs, например &sortby=`{«tvname»:»ASC»,»pagetitle»:»DESC»}`. Можно указывать JSON-строку с массивом нескольких полей. Для случайной сортировки укажите &sortby=`RAND()`
&sortdirASCНаправление сортировки: по убыванию или по возрастанию. Если оставить параметры &sortby и &sortdir пустыми, то сортировка будет идти по порядку ресурсов в &resources.
&limit0Ограничение количества результатов выборки.
&offset0Пропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit
&checkPermissionsУкажите, какие разрешения нужно проверять у пользователя при выводе ресурсов, например &checkPermissions=`list`.
&countChildren0Точный подсчет количества дочерних ресурсов каждой категории и вывод их в плейсхолдер [[+children]]. Делает дополнительные запросы в БД, поэтому по умолчанию отключен.
&toPlaceholderЕсли не пусто, сниппет сохранит все данные в плейсхолдер с этим именем вместо вывода на экран.
&plPrefixwf.Префикс для выставляемых плейсхолдеров.
&showLog0Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекcте «mgr».
&fastMode0Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны.
&cache0Кэширование результатов работы сниппета.
&cacheTime3600Время актуальности кэша, в секундах.
&scheme-1Схема формирования url, передаётся в modX::makeUrl(), поэтому возможные варианты нужно смотреть здесь. Особый тип uri подставляет значение uri ресурса, без запуска функции.
&useWeblinkUrl1Генерировать ссылку с учетом класса ресурса.
&rowIdPrefixПрефикс для выставления идентификатора в чанк.
&hereIdid текущего ресурса для генерируемого меню. Нужно указывать только если скрипт сам его неверно определяет, например при выводе меню из чанка другого сниппета.
&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 <h3 [[+classes]]>[[+menutitle]]</h3>[[+wrapper]]
&tplParentRowЧанк оформления родителя с потомками, не подпадающего под условия &tplCategoryFolder. Например: @INLINE <li><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>
&tplParentRowHereЧанк оформления текущего документа, если он содержит потомков.
&tplParentRowActiveЧанк оформления родителей с потомками в активной ветке меню.
&tplCategoryFolderСпециальный чанк оформления категории. Категорией считается родитель с потомками, у которого указан пустой шаблон или rel="category" в поле link_attributes.
&tplInnerЧанк оформления всего блока подпунктов меню. Если пуст — будет использовать &tplOuter. Например: @INLINE <ul>[[+wrapper]]</ul>
&tplInnerRowЧанк оформления подпункта меню. Например: @INLINE <li><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`
]]

Pdomenu modx revo параметры

Эти два сниппета используются для построения меню на основе дерева ресурсов Modx Revo. pdoMenu по сравнению с Wayfinder работает значительно шустрее, да и по функционалу и гибкости несомненно у последнего выигрывает. Поэтому на всех разрабатываемых мною сайтах, я постепенно стал отказываться от Wayfinder в пользу pdoMenu. Но поскольку их параметры изредка да отличаются, чтобы такой переход был безболезненным, в этой статье я решил пройтись по всем параметрам двух сниппетов, объединив схожие по назначению параметры в одну строку. Таким образом, если вы решите перейти с Wayfinder на pdoMenu, вам просто нужно будет заменить значение из первого столбика на второе. Впрочем справедливо и обратное утверждение, однако я пока что не встречал таких случаев, чтобы в этом была необходимость.

Основные параметры

& start >

Wayfinder. В качестве параметра указывается ресурс, от начала которого будет построено меню. 0 – означает что от самого корня, ни один ресурс не будет пропущен.

pdoMenu. В parents через запятую можно указывать несколько родителей. Если имя ресурса начинается с «дефиса», то он исключается из выборки.

Включать ли самого родителя, от которого строится меню, в выборку. 0 – не включать.

Максимальный уровень вложенности. 0 – показывать все уровни.

&showH >

Игнировать ли настройку ресурса – «Не показывать в меню». 0 – не игнорировать.

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

Прятать неактивные ветки меню. 0 – не прятать.

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

Генерировать ссылку на ресурс или нет. Станет доступна в плэйсхолдере [­[+link]].

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

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

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

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

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

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

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

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

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

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

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

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

&outerTpl
Значение по умолчанию:

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

&rowTpl
Значение по умолчанию:
[­[+wf.linktext]][­[+wf.wrapper]]

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

&startItemTpl
Значение по умолчанию:

[­[+wf.linktext]]

[­[+menutitle]]

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

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

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

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

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

Чанк оформления пункта меню, который в свою очередь находится внутри внутреннего ul.

Чанк оформления активного пункта меню, который в свою очередь находится внутри внутреннего ul.

Чанк оформления активного ресурса-контейнера с потомками.

Чанк оформления категории. Под категорией подразумевается ресурс-контейнер, у которого пустой шаблон или присутствует атрибут rel=category.

Параметры CSS классов

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

&first >

Класс для первого пункта в меню.

Класс для последнего пункта в меню.

Класс для активного пункта меню (включая все меню верхнего уровня).

Класс для активного пункта меню (но не для всей цепочки).

&parent >

Класс для пункта меню, который является контейнером и имеет детей.

Класс для каждой строки меню.

Класс для каждого уровня меню. Если указать level, то будет сгенерировано level1, level2, level3 и т. д.

Класс для обёртки меню.

Класс для внутренних пунктов меню.

Класс для пункта меню типа «Ссылка».

Примеры работы

Для того чтобы построить самое простое меню, которое выведет пункты меню только первого уровня от корня, достаточно вызвать снипет так:

А вот и пример того, насколько сниппет вообще может быть гибким:

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

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

Отредактировано: 27 Сентября 2018

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

Для создания меню необходимо:

  1. Иметь пару опубликованных, отображаемых в меню ресурсов, и установленный компонент pdoTools;
  2. В шаблоне, в месте где должно отображаться меню вставить следующий код:

Выше приведен стандартный вызов меню, который подойдет для простейших сайтов.

&level — количество уровней вложенности которые должны отображаться в меню.

По умолчанию меню выведется заключенное в теги «ul,li», но шаблон можно изменить. Для этого достаточно использовать параметры относящиеся к группе «Параметры шаблонов» из документации, приведенной ниже.

К примеру, для того чтобы теги «li» оборачивались в «menu» стоит добавить параметр &tplOuter = `tpl.menuOuter` и создать одноименный чанк, с кодом

Иногда для коротких записей нет смысла создавать отдельные чанки с шаблонами, поэтому можно прописать тот же шаблон инлайново:

Вариант использования pdoMenu с Fenom и одним шаблоном, от Сергея Шлокова:

Документация сниппета pdoMenu

pdoMenu

Сниппет генерации меню. Может заменять Wayfinder, и позволяет более гибко указывать параметры.

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

Существенный прирост скорости дает только при первом запуске, дальше Wayfinder не особо уступает, благодаря грамотному кэшированию.

Параметры

По умолчанию pdoMenu принимает общие параметры pdoTools и некоторые свои:

Wayfinder (значение по умолчанию)pdoMenu (значение по умолчанию)Применение
НазваниеПо умолчаниюОписание
&parentsТекущий ресурсСписок родителей для поиска результатов, через запятую. Если поставить &parents=`0` – выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки.
&level0 (не ограниченно)Уровень генерируемого меню.
&resourcesСписок ресурсов для вывода в результатах, через запятую. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки.
&templatesСписок шаблонов для фильтрации результатов, через запятую. Если id шаблона начинается с дефиса, ресурсы с ним исключается из выборки.
&whereМассив дополнительных параметров выборки, закодированный в JSON.
&displayStartВключить показ начальных узлов меню. Полезно при указании более одного «parents».
&contextОграничение выборки по контексту ресурсов.
&showHiddenПоказывать ресурсы, скрытые в меню.
&showUnpublishedПоказывать неопубликованные ресурсы.
&previewUnpublishedВключить показ неопубликованных ресурсов, если у пользователя есть на это разрешение.
&hideSubMenusСпрятать неактивные ветки меню.
&selectСписок полей для выборки, через запятую. Можно указывать JSON-строку с массивом, например &select=`<«modResource»:»id,pagetitle,content»>`
&sortbymenuindexЛюбое поле ресурса для сортировки, включая ТВ-параметр, если он указан в параметре &includeTVs, например &sortby=`<«tvname»:»ASC»,»pagetitle»:»DESC»>`. Можно указывать JSON-строку с массивом нескольких полей. Для случайной сортировки укажите &sortby=`RAND()`
&sortdirASCНаправление сортировки: по убыванию или по возрастанию. Если оставить параметры &sortby и &sortdir пустыми, то сортировка будет идти по порядку ресурсов в &resources.
&limitОграничение количества результатов выборки.
&offsetПропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit
&checkPermissionsУкажите, какие разрешения нужно проверять у пользователя при выводе ресурсов, например &checkPermissions=`list`.
&countChildrenТочный подсчет количества дочерних ресурсов каждой категории и вывод их в плейсхолдер [[+children]] . Делает дополнительные запросы в БД, поэтому по умолчанию отключен.
&toPlaceholderЕсли не пусто, сниппет сохранит все данные в плейсхолдер с этим именем вместо вывода на экран.
&plPrefixwf.Префикс для выставляемых плейсхолдеров.
&showLogПоказывать дополнительную информацию о работе сниппета. Только для авторизованных в контекcте «mgr».
&fastModeБыстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны.
&cacheКэширование результатов работы сниппета.
&cacheTime3600Время актуальности кэша, в секундах.
&scheme-1Схема формирования url, передаётся в modX::makeUrl(), поэтому возможные варианты нужно смотреть здесь. Особый тип uri подставляет значение uri ресурса, без запуска функции.
&useWeblinkUrl1Генерировать ссылку с учетом класса ресурса.
&rowIdPrefixПрефикс для выставления идентификатора в чанк.
&hereIdid текущего ресурса для генерируемого меню. Нужно указывать только если скрипт сам его неверно определяет, например при выводе меню из чанка другого сниппета.
&includeTVsСписок ТВ-параметров для выборки, через запятую. Например &includeTVs=`action,time` дадут плейсхолдеры [[+action]] и [[+time]] .
&prepareTVsСписок ТВ-параметров, с файлами из источников медиа, для которых нужно сгенерировать полные пути. Если установить &prepareTVs=`1`, будут подготовлены все ТВ, указанные в &includeTVs.
&processTVsСписок ТВ-параметров, которые нужно обработать и вывести согласно их настроек в менеджере системы. Если установить &processTVs=`1`, будут обработаны все ТВ, указанные в &includeTVs. Замедляет работу.
&tvPrefixПрефикс для ТВ-параметров.

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

Эти параметры устанавливают чанки, которые содержат шаблоны для генерации меню.

НазваниеОписание
&tplOuterЧанк оформления всего блока меню. По умолчанию: @INLINE
&tplЧанк оформления пункта меню. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию: @INLINE
[[+menutitle]][[+wrapper]]
&tplHereЧанк оформления текущего пункта меню.
&tplStartЧанк оформления корневого пункта, при условии, что включен &displayStart. По умолчанию: @INLINE

[[+menutitle]]

[[+wrapper]]

&tplParentRowЧанк оформления родителя с потомками, не подпадающего под условия &tplCategoryFolder . Например: @INLINE
[[+menutitle]][[+wrapper]]&tplParentRowHereЧанк оформления текущего документа, если он содержит потомков.&tplParentRowActiveЧанк оформления родителей с потомками в активной ветке меню.&tplCategoryFolderСпециальный чанк оформления категории. Категорией считается родитель с потомками, у которого указан пустой шаблон или rel=»category» в поле link_attributes .&tplInnerЧанк оформления всего блока подпунктов меню. Если пуст – будет использовать &tplOuter. Например: @INLINE&tplInnerRowЧанк оформления подпункта меню. Например: @INLINE
[[+menutitle]][[+wrapper]]&tplInnerHereЧанк оформления активного подпункта меню.

Параметры CSS классов

Эти параметры задают значение плейсхолдеров [[+classnames]] и [[+classes]] для различных элементов меню. Плейсхолдер [[+classnames]] выводит только название класса без атрибута , в отличие от плейсхолдера [[+classes]] .

НазваниеОписание
&firstClassКласс для первого пункта меню. По умолчанию: first
&lastClassКласс последнего пункта меню. По умолчанию: last
&hereClassКласс для активного пункта меню. По умолчанию: active
&parentClassКласс категории меню.
&rowClassКласс пункта меню.
&outerClassКласс обертки блока меню.
&innerClassКласс обертки блока подпунктов меню.
&levelClassКласс уровня меню. Например если укажите «level», то будет «level1», «level2» и т.д.
&selfClassКласс текущего ресурса в меню.
&webLinkClassКласс ресурса-ссылки.

Примеры

Обычный вывод меню из корня сайта в один уровень:

Вывод с исключением определенных родителей и проверкой разрешений пользователя:

Вывод меню сразу из двух родителей, с показом корневых точек:

Вывод двух уровней ресурсов с подсчетом количества вложенных:

Меню с дополнительным пунктом в чанке, без ссылки на страницу:

Сниппет генерации меню. Может заменять Wayfinder, и позволяет более гибко указывать параметры.

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

Существенный прирост скорости дает только при первом запуске, дальше Wayfinder не особо уступает, благодаря грамотному кэшированию.

Параметры

По умолчанию pdoMenu принимает общие параметры pdoTools и некоторые свои:

НазваниеПо умолчаниюОписание
&parentsТекущий ресурсСписок родителей для поиска результатов, через запятую. Если поставить &parents=`0` – выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки.
&level0 (не ограниченно)Уровень генерируемого меню.
&resourcesСписок ресурсов для вывода в результатах, через запятую. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки.
&templatesСписок шаблонов для фильтрации результатов, через запятую. Если id шаблона начинается с дефиса, ресурсы с ним исключается из выборки.
&whereМассив дополнительных параметров выборки, закодированный в JSON.
&displayStartВключить показ начальных узлов меню. Полезно при указании более одного «parents».
&contextОграничение выборки по контексту ресурсов.
&showHiddenПоказывать ресурсы, скрытые в меню.
&showUnpublishedПоказывать неопубликованные ресурсы.
&previewUnpublishedВключить показ неопубликованных ресурсов, если у пользователя есть на это разрешение.
&hideSubMenusСпрятать неактивные ветки меню.
&selectСписок полей для выборки, через запятую. Можно указывать JSON-строку с массивом, например &select=`<«modResource»:»id,pagetitle,content»>`
&sortbymenuindexЛюбое поле ресурса для сортировки, включая ТВ-параметр, если он указан в параметре &includeTVs, например &sortby=`<«tvname»:»ASC»,»pagetitle»:»DESC»>`. Можно указывать JSON-строку с массивом нескольких полей. Для случайной сортировки укажите &sortby=`RAND()`
&sortdirASCНаправление сортировки: по убыванию или по возрастанию. Если оставить параметры &sortby и &sortdir пустыми, то сортировка будет идти по порядку ресурсов в &resources.
&limitОграничение количества результатов выборки.
&offsetПропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit
&checkPermissionsУкажите, какие разрешения нужно проверять у пользователя при выводе ресурсов, например &checkPermissions=`list`.
&countChildrenТочный подсчет количества дочерних ресурсов каждой категории и вывод их в плейсхолдер [[+children]] . Делает дополнительные запросы в БД, поэтому по умолчанию отключен.
&toPlaceholderЕсли не пусто, сниппет сохранит все данные в плейсхолдер с этим именем вместо вывода на экран.
&plPrefixwf.Префикс для выставляемых плейсхолдеров.
&showLogПоказывать дополнительную информацию о работе сниппета. Только для авторизованных в контекcте «mgr».
&fastModeБыстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны.
&cacheКэширование результатов работы сниппета.
&cacheTime3600Время актуальности кэша, в секундах.
&scheme-1Схема формирования url, передаётся в modX::makeUrl(), поэтому возможные варианты нужно смотреть здесь. Особый тип uri подставляет значение uri ресурса, без запуска функции.
&useWeblinkUrl1Генерировать ссылку с учетом класса ресурса.
&rowIdPrefixПрефикс для выставления идентификатора в чанк.
&hereIdid текущего ресурса для генерируемого меню. Нужно указывать только если скрипт сам его неверно определяет, например при выводе меню из чанка другого сниппета.
&includeTVsСписок ТВ-параметров для выборки, через запятую. Например &includeTVs=`action,time` дадут плейсхолдеры [[+action]] и [[+time]] .
&prepareTVsСписок ТВ-параметров, с файлами из источников медиа, для которых нужно сгенерировать полные пути. Если установить &prepareTVs=`1`, будут подготовлены все ТВ, указанные в &includeTVs.
&processTVsСписок ТВ-параметров, которые нужно обработать и вывести согласно их настроек в менеджере системы. Если установить &processTVs=`1`, будут обработаны все ТВ, указанные в &includeTVs. Замедляет работу.
&tvPrefixПрефикс для ТВ-параметров.

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

Эти параметры устанавливают чанки, которые содержат шаблоны для генерации меню.

НазваниеОписание
&tplOuterЧанк оформления всего блока меню. По умолчанию: @INLINE
&tplЧанк оформления пункта меню. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию: @INLINE
[[+menutitle]][[+wrapper]]
&tplHereЧанк оформления текущего пункта меню.
&tplStartЧанк оформления корневого пункта, при условии, что включен &displayStart. По умолчанию: @INLINE

[[+menutitle]]

[[+wrapper]]

&tplParentRowЧанк оформления родителя с потомками, не подпадающего под условия &tplCategoryFolder . Например: @INLINE
[[+menutitle]][[+wrapper]]&tplParentRowHereЧанк оформления текущего документа, если он содержит потомков.&tplParentRowActiveЧанк оформления родителей с потомками в активной ветке меню.&tplCategoryFolderСпециальный чанк оформления категории. Категорией считается родитель с потомками, у которого указан пустой шаблон или rel=»category» в поле link_attributes .&tplInnerЧанк оформления всего блока подпунктов меню. Если пуст – будет использовать &tplOuter. Например: @INLINE&tplInnerRowЧанк оформления подпункта меню. Например: @INLINE
[[+menutitle]][[+wrapper]]&tplInnerHereЧанк оформления активного подпункта меню.

Параметры CSS классов

Эти параметры задают значение плейсхолдеров [[+classnames]] и [[+classes]] для различных элементов меню. Плейсхолдер [[+classnames]] выводит только название класса без атрибута , в отличие от плейсхолдера [[+classes]] .

НазваниеОписание
&firstClassКласс для первого пункта меню. По умолчанию: first
&lastClassКласс последнего пункта меню. По умолчанию: last
&hereClassКласс для активного пункта меню. По умолчанию: active
&parentClassКласс категории меню.
&rowClassКласс пункта меню.
&outerClassКласс обертки блока меню.
&innerClassКласс обертки блока подпунктов меню.
&levelClassКласс уровня меню. Например если укажите «level», то будет «level1», «level2» и т.д.
&selfClassКласс текущего ресурса в меню.
&webLinkClassКласс ресурса-ссылки.

Примеры

Обычный вывод меню из корня сайта в один уровень:

Вывод с исключением определенных родителей и проверкой разрешений пользователя:

Вывод меню сразу из двух родителей, с показом корневых точек:

Вывод двух уровней ресурсов с подсчетом количества вложенных:

Параметры шаблонов pdoMenu | Зона разработки

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

Блондинка едет в машине. И по радио говорят: «Вы слушаете радио Европа плюс». Блондинка удивлённо: «Откуда они знают?»

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

Параметр tplOuter

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


[[pdoMenu?
    &tplOuter = `@INLINE <ul>[[+wrapper]]</ul>`
    ...
]]
Параметр tpl

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


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

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

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

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

Запомните!

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

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

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

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

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


[[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></i> <a href="[[+link]]">[[+menutitle]]</a><div>[[+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>Первый пункт. Содержит подменю. Активный   // tplParentRowActive
        <ul>                                       // tplInner
            <li>Первый подпункт, текущий</li>      // tplInnerHere
            <li>Второй подпункт</li>               // tplInnerRow
        </ul>
    </li>
    <li>Второй пункт. Содержит подменю             // tplParentRow
        <ul>                                       // tplInner
            <li>Первый подпункт</li>               // tplInnerRow
            <li>Второй подпункт</li>               // tplInnerRow
        </ul>
    </li>
    <li>Третий пункт</li>                          // tpl
</ul>
Параметр tplCategoryFolder

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

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

Этот шаблон предназначен для каких-то специфических случаев.

Параметр levelClass

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

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


1

 
21735

Документация по pdoMenu

Сниппет генерации меню. Может заменять Wayfinder, и позволяет более гибко указывать параметры.

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

Существенный прирост скорости дает только при первом запуске, дальше Wayfinder не особо уступает, благодаря грамотному кэшированию.

Параметры

По умолчанию pdoMenu принимает общие параметры pdoTools и некоторые свои:


































НазваниеПо умолчаниюОписание
&parentsТекущий ресурсСписок родителей для поиска результатов, через запятую. Если поставить &parents=`0` — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки.
&level0 (не ограниченно)Уровень генерируемого меню.
&resources

Список ресурсов для вывода в результатах, через запятую. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки.
&templates

Список шаблонов для фильтрации результатов, через запятую. Если id шаблона начинается с дефиса, ресурсы с ним исключается из выборки.
&where

Массив дополнительных параметров выборки, закодированный в JSON.
&displayStart0Включить показ начальных узлов меню. Полезно при указании более одного «parents».
&context

Ограничение выборки по контексту ресурсов.
&showHidden0Показывать ресурсы, скрытые в меню.
&showUnpublished0Показывать неопубликованные ресурсы.
&previewUnpublished0Включить показ неопубликованных ресурсов, если у пользователя есть на это разрешение.
&hideSubMenus0Спрятать неактивные ветки меню.
&select

Список полей для выборки, через запятую. Можно указывать JSON-строку с массивом, например &select=`{«modResource»:»id,pagetitle,content»}`
&sortbymenuindexЛюбое поле ресурса для сортировки, включая ТВ-параметр, если он указан в параметре &includeTVs, например &sortby=`{«tvname»:»ASC»,»pagetitle»:»DESC»}`. Можно указывать JSON-строку с массивом нескольких полей. Для случайной сортировки укажите &sortby=`RAND()`
&sortdirASCНаправление сортировки: по убыванию или по возрастанию. Если оставить параметры &sortby и &sortdir пустыми, то сортировка будет идти по порядку ресурсов в &resources.
&limit0Ограничение количества результатов выборки.
&offset0Пропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit
&checkPermissions

Укажите, какие разрешения нужно проверять у пользователя при выводе ресурсов, например &checkPermissions=`list`.
&countChildren0Точный подсчет количества дочерних ресурсов каждой категории и вывод их в плейсхолдер [[+children]]. Делает дополнительные запросы в БД, поэтому по умолчанию отключен.
&toPlaceholder

Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем вместо вывода на экран.
&plPrefixwf.Префикс для выставляемых плейсхолдеров.
&showLog0Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекcте «mgr».
&fastMode0Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны.
&cache0Кэширование результатов работы сниппета.
&cacheTime3600Время актуальности кэша, в секундах.
&scheme-1
Схема формирования url, передаётся в modX::makeUrl(). Особый тип uri подставляет значение uri ресурса, без запуска функции.
&useWeblinkUrl1Генерировать ссылку с учетом класса ресурса.
&rowIdPrefix

Префикс для выставления идентификатора в чанк.
&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 <h3 [[+classes]]>[[+menutitle]]</h3>[[+wrapper]]
&tplParentRowЧанк оформления родителя с потомками, не подпадающего под условия &tplCategoryFolder. Например: @INLINE <li><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>
&tplParentRowHereЧанк оформления текущего документа, если он содержит потомков.
&tplParentRowActiveЧанк оформления родителей с потомками в активной ветке меню.
&tplCategoryFolderСпециальный чанк оформления категории. Категорией считается родитель с потомками, у которого указан пустой шаблон или rel="category" в поле link_attributes.
&tplInnerЧанк оформления всего блока подпунктов меню. Если пуст — будет использовать &tplOuter. Например: @INLINE <ul>[[+wrapper]]</ul>
&tplInnerRowЧанк оформления подпункта меню. Например: @INLINE <li><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=`<span>0</span>`
&level=`<span>1</span>`
]]
	

Вывод с исключением определенных родителей и проверкой разрешений пользователя:


	
[[pdoMenu?
&parents=`-<span>10</span>,-<span>15</span>`
&level=`<span>2</span>`
&checkPermissions=`load,<span>list</span>,view`
]]
	

Вывод меню сразу из двух родителей, с показом корневых точек:


	
[[pdoMenu?
&parents=`<span>10</span>,<span>15</span>`
&displayStart=`<span>1</span>`
]]
	

Вывод двух уровней ресурсов с подсчетом количества вложенных:


	
[[pdoMenu?
&parents=`<span>0</span>`
&level=`<span>2</span>`
&tplInner=`@INLINE [[+wrapper]]`
&tplParentRow=`@INLINE <li [[+classes]]><a href=<span>"[[+link]]"</span> [[+attributes]]>[[+menutitle]]</a> ([[+children]])</li>[[+wrapper]]`
&countChildren=`<span>1</span>`
]]
	

pdoMenu как замена Wayfinder / Сниппеты / Modx Revolution / Технический блог веб-разработчика

Эти два сниппета используются для построения меню на основе дерева ресурсов 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
Значение по умолчанию: <h3[[+wf.id]][[+wf.classes]]>[[+wf.linktext]]</h3>[[+wf.wrapper]]

&tplStart=`@INLINE <h3[[+classes]]>[[+menutitle]]</h3>[[+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>[[+wrapper]]</ul>`
  &tplInner=`@INLINE<ul>[[+wrapper]]</ul>`
  &tplParentRow=`@INLINE <li><a href="[[+link]]"><span>[[+menutitle]]</span></a>[[+wrapper]]</li>`
  &hereClass=`selected` 
]]

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

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

Меню в MODX с помощью компонента pdoMenu — LOCO.RU


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


Устанавливаем пакет PdoTools (Приложения->Установщик).


Далее вызываем pdoMenu в шаблоне (обычно в чанке header).


[[pdoMenu? &level=`1` &parents=`2`  &outerClass=`nav`]]


Где:


  • &level=`1` — уровень вложенности (в данном случае вложенности нет)

  • &parents=`2` — id родителя пунктов меню (если нет, то 0)

  • &outerClass=`nav` — добавляем класс к меню (присваивается в ul)


Если нужно вывести не все ресурсы в меню, а только некоторые, то для этого есть параметр &resources


[[pdoMenu? &level=`1` &resources=`2,3,4,5` &parents=`2`  &outerClass=`nav`]]					


Или если нужно исключить один ресурс:


[[pdoMenu? &level=`1` &resources=`-3` &parents=`2`  &outerClass=`nav`]]				


Можно выводить пункты сразу из нескольких родителей:


[[pdoMenu? &parents=`2,6` &displayStart=`1`]]


 


Пример организации выпадающего многоуровневого меню в MODX с помощью pdoMenu


1. html-основа нашего меню будет такая


<div>
    <ul>
        <li><a href='#'><span>Ленты</span></a>
                  <ul>
                     <li><a href='#'><span>Ленты 1</span></a>
                        <ul>
                           <li><a href='#'><span>Ленты 1.1</span></a></li>
                           <li><a href='#'><span>Ленты 1.2</span></a></li>
                        </ul>
                     </li>
               
                  </ul>
               </li>
        <li><a href='#'><span>Фетр</span></a>
                        <ul>
                           <li><a href='#'><span>Фетр 1</span></a></li>
                           <li><a href='#'><span>Фетр 2</span></a></li>
                        </ul>
                     </li>
        <li><a href='index.html'><span>Декупаж</span></a></li>
    </ul>
</div>


 

Переменные шаблона TV в CMS MODX

Статья, в которой рассмотрим назначение TV параметров и основные принципы работы с ними в MODX Revolution.

Что такое переменные шаблона (TV)

По умолчанию любой ресурс в MODX Revolution имеет определённый набор полей: pagetitle (заголовок), content (содержимое), description (описание) и т.д.

Но кроме встроенных полей с каждым ресурсом можно ещё связать (добавить к нему) любое количество других полей. Осуществляются эти действия в MODX Revolution посредством TV переменных. Связывание TV параметров с ресурсами выполняется не напрямую, а через шаблоны. Т.е. для того чтобы дополнительное поле появилось у ресурса, соответствующий TV параметр должен быть связан с его шаблоном. Из-за этого данные переменные и называются TV, т.е. переменными шаблона (Template Variable).

Создание TV (дополнительных полей)

Рассмотрим, как в MODX Revolution с помощью TV-переменных можно расширить назначение стандартных ресурсов (документов). Например, разберём какие TV поля необходимо добавить к ресурсам, чтобы их можно было использовать, для представления книг на сайте.

В MODX создание TV параметров осуществляется очень просто, посредством выполнения следующих шагов:

  1. Войти в админку (менеджер) MODX Revolution.
  2. Перейти в левой панели во вкладку «Элементы» и нажать на кнопку «Новое дополнительное поле».
  3. В открывшейся странице ввести имя дополнительному полю, например, authors. Данное поле будем использовать для хранения авторов книги.
  4. Перейти на вкладку «Параметры ввода» и указать необходимый формат данных, который будет определять тип значения, которое может быть помещено в этот TV параметр. Для TV переменной authors установим тип значения ввода, равный «текст».
  5. В секции «Параметры вывода» следует задать формат, в котором необходимо выводить данные из этого поля. Например, TV параметр authors будем выводить в формате текста. Для этого ему установим соответствующее значение в качестве значения параметра «Тип вывода».
  6. В разделе «Доступно для шаблонов» необходимо выбрать те шаблоны, через которые TV поле появится у соответствующих ресурсов.

Для примера создадим ещё несколько TV параметров: release-year (год выпуска), quantity-of-pages (количество страниц), cover-photo-book (фото обложки книги). Привяжем TV поля к тому же шаблону (например, шаблон книги).

Заполнение TV полей при создании или редактировании ресурсов

После создания TV полей они становятся доступными во время создания или редактирования соответствующих ресурсов. Располагаются TV-поля на страницах ресурсах по умолчанию во вкладке «Дополнительные поля».

Более удобного расположить TV поля на страницах определённых ресурсов можно с помощью инструмента MODX Revo «Настройка форм» (значок «Шестерёнка» в главном меню админки -> пункт «Настройка форм»).

Некоторый результат, который можно достигнуть путём применения определённого набора правил к соответствующим ресурсам (через шаблон) с помощью элемента MODX «Настройка форм».

Вывод TV (дополнительных полей)

В MODX вывод значения TV переменной, связанной с текущим ресурсом, осуществляется также как и любого другого поля этого ресурса.

Например, получим значение TV поля authors у текущего ресурса (в шаблоне):


[[*authors]]

Рассмотрим ещё один пример. В котором разберём, как можно с помощью сниппета pdoResources, организовать вывод всех дочерних ресурсов (по отношению к текущему ресурсу) вместе с их TV полями:


[[!pdoResources?
  &parents=`[[*id]]`
  &includeTVs=`authors,cover-photo-book,quantity-of-pages,release-year`
  &tpl=`@INLINE
    <h3><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h3>
    <ul>
      <li>Автор(ы): [[+tv.authors]]</li>
      <li>Количество страниц: [[+tv.quantity-of-pages]]</li>
      <li>Год выпуска: [[+tv.release-year]]</li>
    </ul>
    <img src="/[[+tv.cover-photo-book]]" alt="Фото обложки книги [[+pagetitle]]">
  `
]]

То же самое действие, но уже с использованием сниппета getResources:


// вызов сниппета getResources
[[!getResources?
  &parents=`[[*id]]`
	&includeTVs=`1`
	&tpl=`book`
]]

// содержимое чанка book:
<h3><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h3>
<ul>
  <li>Автор(ы): [[+tv.authors]]</li>
  <li>Количество страниц: [[+tv.quantity-of-pages]]</li>
  <li>Год выпуска: [[+tv.release-year]]</li>
</ul>
<img src="/[[+tv.cover-photo-book]]" alt="Фото обложки книги [[+pagetitle]]">

MODX — Использование в условии where TV переменных

Например, следующий код показывает, как можно выбрать книги (ресурсы), в зависимости от некоторого условия (поле автор должно содержать значение «Резиг»). Условия в сниппете pdoResources задаются с помощью параметра where.


[[!pdoResources?
  &parents=`[[*id]]`
  &includeTVs=`authors,cover-photo-book,quantity-of-pages,release-year`
  &tpl=`@INLINE
    <h3><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h3>
    <ul>
      <li>Автор(ы): [[+tv.authors]]</li>
      <li>Количество страниц: [[+tv.quantity-of-pages]]</li>
      <li>Год выпуска: [[+tv.release-year]]</li>
    </ul>
    <img src="/[[+tv.cover-photo-book]]" alt="Фото обложки книги [[+pagetitle]]">
  `
  &where=`{"authors:LIKE":"%Резиг%"}`
]]

Сортировка ресурсов по TV полю

Для сортировки ресурсов в MODX Revo в зависимости от того какое значение имеет TV поле можно выполнить с помощью параметра сниппета pdoResources sortby.

Например, выведем книги по году выпуска (по убыванию):


[[!pdoResources?
  &parents=`[[*id]]`
  &includeTVs=`authors,cover-photo-book,quantity-of-pages,release-year`
  &tpl=`@INLINE
    <h3><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h3>
    <ul>
      <li>Автор(ы): [[+tv.authors]]</li>
      <li>Количество страниц: [[+tv.quantity-of-pages]]</li>
      <li>Год выпуска: [[+tv.release-year]]</li>
    </ul>
    <img src="/[[+tv.cover-photo-book]]" alt="Фото обложки книги [[+pagetitle]]">
  `
  &sortby=`release-year`
  &sortdir=`DESC`
]]

Использование pdoMenu для создания главной панели навигации Bootstrap 3

Вызов Drop-in Snippet для использования с Bootstrap 3.

Опубликовано
09 мая, 2015 в 15:02:00