Многоуровневое MODX меню с использованием Bootstrap. PdoMenu — создание меню в MODX Modx меню на определенных страницах
Сегодня мы сделаем меню для нашего блога с помощью сниппета Wayfinder (документацию по сниппету Wayfinder). Верхняя навигация и главная у нас на блоге состоит из двух частей:
- Мобильная
- Обычная
Поэтому делать мы будем навигацию в двойном экземпляре). Итак, нашу главную навигацию мы разобьем на чанки. В соответствии с документацией должно получиться 4 чанка (не забываем убирать пробелы):
&outerTpl=` wayOuterTpl` - чанк обертка основного списка
&innerTpl=` wayInnerTpl` - чанк обертка выпадающего списка
&rowTpl=` wayRowTpl`- чанк вывод элементов списка
&parentRowTpl=`wayHasChildTpl` - чанк вывод элементов списка-родителей
И привожу вызов сниппета в чанке header:
[ ]
&startId=`0` - задаем начало прохода сниппета, в нашем случае от корня сайта.
&level=`2` - количество уровней в нашем меню.
Следующий шаг – вывод нашего мобильного меню. Принцип подобный тому, что я выше изложил, здесь нам тоже понадобится 4 чанка.
&outerTpl=`wayOuterMobileTpl` - чанк обертка основного списка.
&innerTpl=`wayInnerMobileTpl` - чанк обертка внутреннего списка.
[ [+wf.wrapper] ]
&rowTpl=`wayRowMobileTpl` - чанк вывод элементов списка.
[ [+wf.wrapper] ]
&innerRowTpl=`wayInnerRowMobileTpl` - чанк вывод элементов внутреннего списка.
[ [+wf.wrapper] ]
Вызов Wayfinder примет следующий вид:
[ ]
Все тоже самое, только изменились чанки. Теперь у нас есть мобильная навигация, проверить ее можете с помощью инструмента Responsive Web Design Tester для Opera и Chrome.
Привожу полный код чанка header:
Big Things... Small Packages
Наша навигация готова! В видео мы еще рассмотрели создание меню категорий в блоге. Так как принцип один и тот же, то здесь рассматривать я не стал, смотрите видео) До встречи в следующих уроках!
Начинаем 8 урок MODx Revolution для новичков. Напоминаю мы делаем сайт для изучения MODx Revolution. На последнем уроке мы рассмотрели концепцию сниппетов, которые являются кусками PHP кода, который позволяет добавить функциональности в наш вебсайт. В этом уроке мы рассмотрим особенный сниппет – Wayfinder, и будем использовать его для создания динамического меню нашего сайта.
Что такое Wayfinder?
Wayfinder – это сниппет, который выводит неотсортированный список ссылок на ресурсы в вашем дереве сайта, тип вывода списка зависит от вызова сниппета и параметров данного вызова. В общих словах это значит, что когда вы помещаете вызов Wayfinder‘а в вашем шаблоне, он начинает искать ресурсы, которые отвечают заданным в нём параметрам и возращает список ссылок к этим ресурсам в формате неотсортированного списка либо в определенном вами формате.
Для чего использовать Wayfinder?
Обычно Wayfinder использую для создания динамической навигации по сайту, то бишь меню. Так как большинство HTML шаблонов используют неупорядочненные списки для создания меню, то Wayfinder является идеальным инструментом для этих целей. При создании сайта вы можете кропотливо вставлять ваши урлы в меню навигации, так как вы делали до этого в статическом HTML сайте. В то же время, каждый раз, когда необходимо удалить или создать страницу, то вам необходимо внести соответствующие изменения в вашем меню, поменять урлы. Использование сниппета Wayfinder для динамического генерирования ваших менюшек позволяют избежать этой головной боли, так как он автоматически определяет изменения и соответственно меняет ваше меню.
Wayfinder довольно-таки гибкий инструмент и позволяет определить, какие ресурсы включить или исключить из меню, каков шаблон меню, как глубина меню вашего сайта. Граница ваших возможностей определяется вашим HTML/CSS кодом.
Как использовать Wayfinder?
Как мы уже упомянули в предыдущем уроке, синтаксис вызова сниппетов выглядит так: [[!somesnippet]]
Это всего лишь базовый вызов и его не достаточно, кроме этого мы должны определить некоторые свойства данного вызова. В случае с Wayfinder`ом самый минимум, который необходимо определить в свойствах: где в дереве ресурсов Wayfinder должен начинать строить список ресурсов. Таким образом в вызове сниппета Wayfinder необходимо задать по крайней мере один параметр – начальный ID. Базовый вызов сниппета Wayfinder в таком случае будет выглядеть вот так:
Этот вызов говорит Wayfinder‘у начинать с корня дерева (ID 0 значит корень сайта) и показывает все ресурсы, которые опубликованы и у которых не стоит галочка в чекбоксеHide from Menus (Спрятать от Меню).
Если мы взлянем на используемый нами шаблон, то мы можем увидеть верхнее меню с несколькими пунктами и выпадающими списками.
Давайте взглянем на шаблон и код, который выводит данное меню:
Как вы видите, это вложенный неупорядочненный список. Давайте заменим этот код базовым вызовом Wayfinder и увидим, что у нас получится. Удалите код приведенный вверху и вставте вместо него:
[[!Wayfinder? &startId=`0` ]]
Если вы используете тот же шаблон, что и я, то ваш код будет выглядет приблизительно вот так:
Сохраните шаблон и посмотрите на домашнюю страницу, она должна выглядет следующий вид:
Фантастика! Вы видите, что наше предыдущее меню, которое имело несколько пунктов, теперь заменено простым меню с одним лишь пунтктом – Home. Это говорит нам, что Wayfinder работает так как нужно и берет одну страницу из нашего сайта и выводит ее название в виде пункта меню.
Давайте создадим еще парочку ресурсов. Я собираюсь добавить страницу About с 3 дочерними страницами (MODx, страницы Tutorials, Contact и FAQ). Вы можете создать какие угодно ресурсы или страницы для вашего сайта. Цель этого упражнения – создать несколько ресурсов, чтобы Wayfinder‘у было что отображать.
Я закончил с созданием страниц и мое дерево ресурсов сайта выглядит вот так:
Теперь у нас есть несколько страниц, посмотрим как вызов Wayfinder‘а сгенерирует меню для нашего сайта:
Хорошей новостью является то, что все наши страницы появились в меню и нажимая на каждый пункт меню мы попадаем на соответствующую страницу. (Для тестирования этого элемента добавте какой-нибудь текст в каждую страницу, например на страницу About можете добавить “Это страница About” и эта сообщение появится при открытии страницы. Помните, что нам необходимо определять шаблон для каждой страницы, но в данный момент я не собираюсь об этом беспокоится).
Плохой новостью является та, что нарушилось форматирование меню, но мы можем это починить. Нажмите правой кнопкой мыши на вебстраницу и посмотрите исходный код (либо используйте для этого firebug), вы увидите что сейчас Wayfinder генерирует HTML следующего вида:
- Home
- About
- MODx CMS
- The Coding Pad
- The Blog
- The Services
- Contact Us
- Tutorials
- FAQ
Как вы видите это выглядит очень похоже на наш начальный статичный код за некоторым исключением. Во-первых, Wayfinder сгенерировал
- пункт без класса sf-menu
который применялся в нашем статичном коде. Шаблону необходим этот класс для работы с CSS. Также видно, что
- пункты имеют параметр span
, который относится к элементам текста ссылки в оригинальном статическом коде и его нет в сгенерированом Wayfinder‘ом коде. В дополнение, наш статический HTML код имеет класс acurrent-page-item
, который не представлен в нашем коде сниппета Wayfinder. Все эти пропавшие куски делают вид нашего меню неприглядным.
Как настроить стиль вывода сниппета Wayfinder
Смотря на то, как Wayfinder генерирует код, у нас возникает вполне естественный вопрос: «Как нам добавить недостающие куски кода, чтобы мы хотели вывести меню в нужном для нас виде?» Ответ – очень легко, мы используем чанки шаблона для форматирования вывода сниппета Wayfinder.
Wayfinder гибкий инструмент и при помощи параметров можно определить внешний вид вывода. Некоторые общие параметры позволяют вам определить с какого уровня начинать построение меню, какие пункты не включать в меню и т.д. Другие параметры – это параметры шаблона, которые позволяют вам задать html код шаблона для вашего меню и др. Описания последних можно найти в официальной документации –http://rtfm.modx.com/display/ADDON/Wayfinder.
Возьмите на заметку: некоторые параметры Wayfinder имеют значение по умолчанию.
Это об]ясняет, например, почему в сгенерированном Wayfinder меню, пункт страницы Home имеет название класса “first active ”. Это класс по-умолчанию, но мы можем перезаписать его обозначив собственные классы в чанках шаблона.
Мы будем использовать несколько параметров Wayfinder в этом уроке, но я советую вам изучить их все и поупражнятся в их использовании как можно больше, чтобы понять все их возможности. Так как параметры по-умолчанию Wayfinder чётко задокументированы на официальном сайте, было бы глупо рассказывать о них здесь. Мы будем использовать больше и всё больше из них, когда будем работать с различными меню.
Для начала работы над шаблоном меню давайте создадим несколько минишаблонов и сохраним их в чанках. Вы увидите, что в этих чанках мы используем код HTML, но заменяем динамические элементы заполнителями (или плейсхолдерами как их еще называют) синтаксис которых выглядит так:[[+placeholder]] . Заполнители, которые мы используем являются особенными в сниппете Wayfinder и их определение очевидно из названия, но вы всегда можете обратиться в документацию MODx за более полной справкой.
Вот чанки, которые я буду использовать для создания нашего шаблона:
7in1menuOuter – будет содержать HTML код для нашего внешнего ul контейнера.
Вы видите, что я добавил класс для внешнего ul. Альтернативным способом сделать это является использование wf.classes заполнителя и далее добавить имя класса к текущему вызову wayfinder используя параметр outerClass . Но для простоты давайте будем использовать первый способ, но оба из них будут работать нормально…
7in1menuRow – будет содержать HTML код пунктов меню первого уровня
- [[+wf.linktext]][[+wf.wrapper]]
- [[+wf.linktext]][[+wf.wrapper]]
- . Переписывать сниппет мы не будем, а вот поменять класс в стилях - нет проблем.
- Меню в виде списка, таблицы, изображений, с иконками и т.д.
- Статичные меню
- Меню с различными эффектами (выпадающие, раскрывающиеся и т.д.)
- Карта сайта
- [[+wf.linktext]][[+wf.wrapper]]
- wf.classes - выводит классы взятый с набора параметров Wayfinder (включая атрибут class="")
- wf.classnames - вывод названия классов (без class="")
- wf.wrapper - вывод внутреннего содержимого (row).
- wf.classes - вывод классов (включая атрибут class="")
- wf.classnames - вывод соответствующих классов (без class="")
- wf.link - значение атрибута href="" для ссылки меню
- wf.title - имя текста заголовка для ссылки от поля указанного в параметре &titleOfLinks
- wf.linktext - текст для действующей ссылки, указанном в поле, переданным в параметре &textOfLinks
- wf.wrapper - вывод внутреннего содержимого, например подменю
- wf.id - вывод уникального ID атрибута. Вам нужно указать параметр &rowIdPrefix для того чтобы этот заполнитель мог получить значение. Значением является префикс + docId.
- wf.attributes - выводит ссылку атрибутов для текущего элемента
- wf.docid - идентификатор документа текущего элемента
- wf.description - описание для текущего элемента
- wf.level - текущий уровень вложенности
- [[+wf.linktext]][[+wf.wrapper]]
- [[+wf.linktext]] - [[+wf.description]] [[+wf.wrapper]]
[[+wf.title]]
[[+wf.title]]
- [[+menutitle]][[+wrapper]]
- [[+menutitle]] ([[+children]]) [[+wrapper]]` &countChildren=`1` ]]
Главной мыслью тут является та, что я добавил тег к тексту ссылки меню как в оригинальном статичном HTML коде. Я также включил wf.classes заполнитель и это позволит мне определить класс для текущей страницы, который перезапишет класс “active”, который стоит у нас по-умолчанию.
7in1menuInner – будет содержать HTML код внутренних ul контейнеров
- [[+wf.wrapper]]
7in1menuInnerRow – будет содержать HTML код для строчек пунктов внутренних уровней
Всё, теперь наши чанки шаблона на месте, как вы видите (для порядка, я поместил их в отдельную категорию) :
Теперь мы можем изменить вызов Wayfinder, таким образом мы можем использовать эти мини шаблоны для вывода Wayfinder. Если вы взгляните на список параметров шаблонизации (было бы полезно иметь перед глазами http://rtfm.modx.com/display/ADDON/Wayfinder открытым либо же распечатать и держать возле экрана), вы увидите, что я называл мои чанки похожими на соответсвующие параметры вызова сниппета. Это я сделал для удобства, это помогает мне отслеживать что к чему, когда я начинаю конструировать мой вызов. Давайте добавим параметры и вызовем наши чанки. Вызов Wayfinder теперь будет иметь вид:
[[!Wayfinder? &startId=`0` &outerTpl=`7in1menuOuter` &rowTpl=`7in1menuRow` &innerTpl=`7in1menuInner` &innerRowTpl=`7in1InnerRow` &hereClass=`current_page_item` &firstClass=`` &lastClass =`` ]]
Значение параметров помещается в апострофы (`), а не в одинарные кавычки (’).
Отлично, давайте взглянем на этот вызов. Вы видите, что мы используем параметры шаблонизации для вызова наших чанков так, что Wayfinder выводит нужный нам HTML с корректными классами. Я определил вызываемый hereClass параметр и дал ему значение current_page_item , чтобы он соответствовал статическому HTML шаблону. Можно заметить, что я оставил параметры firstClass и lastClass пустыми. Причиной этого является то, что мой HTML шаблон не устанавливает класс для первого и последнего пункта меню, поэтому чтобы избежать накладок я перезаписал в них пустые строки.
Видно, что наше меню выглядит именно так, как мы хотели. Правильные стили используются в выпадающем меню. Если вы посмотрите на исходный код, то увидите, что сгенерированный Wayfinder ‘ом HTML код изменился до неузнаваемости:
Этот код соответствует оригинальному статичному коду нашего шаблона, но он был сгенерирован вызовом Wayfinder .
Существует много других параметров, которые вы можете использовать вместе с Wayfinder для построение ваших меню. В следующих уроках мы рассмотрим сложные меню и как их интегрировать в Wayfinder. Подведем итог: сейчас наш сайт приобрел некоторую форму и у нас есть функциональное и динамичное меню.
Для создания динамического меню мы воспользуемся готовым сниппетом Wayfinder . Сниппет, как вы, надеюсь, помните из предыдущих уроков, это кусок Php кода, который мы можем включать в наш шаблон. Отличие от чанков только в коде и методе вызова. Если чанк мы вызываем с помощью двойных фигурных скобок, то сниппеты вызываются с помощью таких [!Имя_сниппета!] - некэшируемый вызов, или таких [[Имя_сниппета]] - кэшируемый вызов. Код каждого сниппета должен начинаться с а заканчиваться ?> . Помимо этого, каждому сниппету можно передавать специальные значения параметров, которые он будет обрабатывать. В MODx уже есть несколько готовых сниппетов, которые мы будем в дальнейшем использовать.
Сниппет Wayfinder служит для организации списков ссылок для MODx. Меню нашего сайта и есть список таких ссылок. Давайте для начала найдем кусок кода, отвечающего за вывод нашего меню. Меню находится в чанке HEADER , вот оно:
Давайте вырежем этот код, вместо него напишем:
{{MENU}}
А код вставим в новый чанк MENU , в описании чанка напишем Меню сайта . Теперь давайте изучим этот код.
Меню нашего сайта представляет собой простой, ненумерованный список, находящийся в контейнере с id="templatemo_menu" . Давайте вырежем этот список из контейнера и вместо него вставим вызов нашего сниппета:
&startId=`0` - это параметр со значением 0, который указывает сниппету ID папки, в которой лежат обрабатываемые документы. Все наши документы, которые мы будем отображать в меню, лежат в корневой папке, ID корневой папки равен нулю. Давайте посмотрим, что у нас получилось.
Наше меню заработало, только активный пукнт перестал выделяться белым цветом:
Чтобы понять, почему это произошло, нам надо посмотреть исходный код страницы. В Mozilla Firefox это делается таким образом: Вид >> Исходный код страницы или просто нажав сочетание клавиш Ctrl+U . Находим код нашего меню:
Обращаем внимание на то, что в исходном коде у активного пункта был class="current"
, а наш сниппет автоматически присваивает активному пункту class="active"
. Замечаем еще тот момент, что в исходном коде класс применялся к тегу
, а теперь к тегу
Находим в папке C:/xampp/htdocs/site/www/assets/templates/ файл templatemo_style.css и открываем его с помощью Notepad++. Ищем в этом файле описание класса current, оно находится в 198 строке:
#templatemo_menu li .current{
padding-left: 40px;
color: #ffffff;
}
заменяем класс current на active , не забывая переназначить его тегу :
#templatemo_menu li.active a {
padding-left: 40px;
color: #ffffff;
}
Сохраняем файл. Смотрим, что получилось.
Наше меню заработало точно так, как это задумывали дизайнеры. Теперь мы можем переходить по страницам нашего сайта с помощью нашего главного меню. При добавлении в корневую папку других документов, они автоматически будут отображаться в нашем меню. Чтобы нежелательные документы не отображались в меню, у них следует убрать галочку с Показывать в меню
. Можно принудительно исключить нежелательный пункт с помощью параметра &excludeDocs=`список id исключаемых документов, через запятую`
.
Чтобы в меню не отображались дочерние документы, которые мы будем создавать на следующих уроках, давайте добавим в вызов сниппета параметр level , который определяет количество уровней в меню, по умолчанию будут отображаться все уровни, ограничим только одним уровнем:
Wayfinder служит для организации списков ссылок для MODX. Благодаря поддержке шаблонов позволяет выводить списки в любом необходимом виде:
&rowTpl=`rowTpl`
&outerTpl=`outerTpl`
&hereClass=`active`
&rowClass=`eNav_li`]]
Параметры снипета:
&startId - id родительской страницы, если указать 0 будет от корня сайта. По умолчанию стоит значение id активной страницы
&displayStart - показывать документ со startId в заголовке меню, по умолчанию false
&level - глубина вложенности, по умолчанию 0 - все уровни
&limit - ограничение количества страниц в выводе (по умолчанию 0 - без ограничений)
&ignoreHidden - игнорировать чек бокс страницы "Показывать в меню", т.е. если указать 1, выведет все страницы. По умолчанию 0. Выводятся только те страницы, у которых отмечен чек бокс "Показывать в меню"
&ph - имя подстановщика, заменяющего непосредственно выводимые результаты. По умолчанию 0.
&debug - режим отладки (по умолчанию 0)
&hideSubMenus - раскрывать только активное подменю (по умолчанию 0)
&removeNewLines - убирает символ переноса строки при выводе (по умолчанию 0)
&textOfLinks - для названия ссылки меню. Возможные варианты: menutitle, id, pagetitle, description, parent, alias, longtitle, introtext . По умолчанию menutitle
&titleOfLinks - для title ссылки меню.Варианты: menutitle, id, pagetitle, description, parent, alias, longtitle, introtext. По умолчанию pagetitle
&rowIdPrefix - устанавливает id (rowIdPrefix + docId)для каждого элемента. По умолчанию 0
&includeDocs - id документов через запятую, которые будут включены в меню (по умолчанию не указывается)
&excludeDocs - id документов через запятую, которые будут исключены из меню (по умолчанию 0)
&contexts - контекст для генерации меню. По умолчанию текущий.
&startIdContext - Индентификатор контекста из которого берутся документы для формирования результата.
&config - Внешний PHP файл, для хранения конфигурации Wayfinder (пример: core/components/wayfinder/configs).
&scheme - Формат для генерации URL. Возможные значения (основанны на вызове makeURL API):
1: (значение по умолчанию) URL по отношению к site_url;
0: смотрите http;
1: смотрите https;
full: абсолютный URL начинающийся с site_url;
abs: абсолютный URL начинающийся с base_url;
http: абсолютный URL, заданный принуждённо в http-схеме;
https: абсолютный URL, заданный принуждённо в https-схеме.
&sortBy - Поле, по которому происходит сортировка. (по умолчанию menuindex)
Варианты:
id, menutitle, pagetitle, introtext, menuindex, published, hidemenu, parent, isfolder, description, alias, longtitle, type, template&sortOrder - Порядок сортировки. "ASC" или "DESC". По умолчанию ASC
&where - JSON-стиль параметров фильтрации (Соответствует where в MySQL) . Например, когда необходимо скрыть блог или новости из дополнения Articles: &where=`[{"class_key:!=": "Article"}]`
Примеры:
вывод только папок: & where = `isfolder = 1
&hereId - Определять текущий ID для использования в сниппете. Используйте значение [[*id]] если шаблон указан с помощью параметра hereTpl и activeRowParentTpl не применяеться корректно в пункте меню. По умолчанию текущий ид.
Нужно указывать только если скрипт сам его неверно определяет, например, при выводе меню из чанка другого сниппета.
&hereTpl - Шаблон hereTpl используется в момент, когда текущий пункт отображается в меню.
Возможные плэйсхолдеры:
[[+wf.classes]] - место для указания используемого CSS-класса (включает class=" ")
[[+wf.classnames]] - содержит только название CSS-класса (не включает class=" ")
[[+wf.link]] - адрес (href) для ссылки
[[+wf.title]] - текст для title ссылки
[[+wf.linktext]] - текст названия ссылки
[[+wf.wrapper]] - место для вывода подменю
[[+wf.id]] - вывод уникального идентификатора (id)
[[+wf.attributes]] - вывод дополнительных атрибутов ссылки
[[+wf.docid]] - идентификатор документа для текущего элемента
[[+wf.subitemcount]] -количество элементов в папке
[[+wf.description]] - выводит значения поля описания
[[+wf.introtext]] - выводит значения поля интротекста
Пример шаблона:
Параметры шаблона
Эти параметры указывают чанки, которые содержат шаблоны, которые будут генерировать вывод Wayfinder.
В текущей версии Wayfinder для MODX Revolution, вы можете получить доступ к вашим кастомным TV используя плейсхолдеры префикса wf. , например [[+my_TV]]
На момент написания статьи, будут возвращены только исходные значения TV - они не будут форматироваться. Например, если вашим TV является изображение - обычное использование такое TV внутри вашего шаблона будет возвращать полный полный тег изображения, но внутри шаблона Wayfinder - будет возвращён только путь к изображению.
Если вы хотите обрабатывать TV, вы можете сделать это вызовом сниппета в пределах шаблона ряда Wayfinder (&rowTpl . Например ваш TV изображения называется icon и обычно для вывода в шаблоне используется примерно такой код:
... ...
Но так как это не позволит вам обрабатывать TV, нужно заменить его на:
... ...
И теперь внутри сниппета processTV помещаем следующий PHP код:
getObject("modResource", $myId); return $doc->getTVValue($myTV);
В результате возвращается полностью обработаное TV изображения.
&outerTpl
Название чанка содержащий шаблон внешнего контейнера.
Доступные плейсхолдеры:
Параметр &innerTpl содержит такой же набор плейсхолдеров что и &outerTpl .
&rowTpl
Название чанка содержащий шаблон для элементов ряда меню.
Доступные плейсхолдеры:
Пример использования:
Ещё один вариант:
Примеры
Первого уровня
[[!Wayfinder? &startId=`0` &level=`1`
&rowTpl=`rowTpl`
&outerTpl=`outerTpl`
&hereClass=`active`
&rowClass=`eNav_li`]]
Код чанка outerTpl
[[+wf.wrapper]]
Код чанка rowTpl
[[+wf.wrapper]]
Второго уровня (в этом примере меню и пункты подменю были визуально на одном уровне
[[!Wayfinder? &startId=`0` &level=`2`
&rowTpl=`rowTplFooterMenu`
&outerTpl=`outerTplFooterMenu`
&innerTpl=`innerTplFooterMenu`
&innerRowTpl=`innerRowTplFooterMenu`
&hereClass=`active`]]
Код чанка outerTplFooterMenu
[[+wf.wrapper]]
код чанка rowTplFooterMenu
[[+wf.wrapper]]
код чанка innerTplFooterMenu
[[+wf.wrapper]]
код чанка innerRowTplFooterMenu
Сниппет генерации меню. Может заменять Wayfinder, и позволяет более гибко указывать параметры.
Например, умеет строить меню сразу из нескольких родителей, отображая их как вместе, так и отдельными ветками.
Существенный прирост скорости дает только при первом запуске, дальше Wayfinder не особо уступает, благодаря грамотному кэшированию.
Параметры
По умолчанию 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
|
&tpl | Чанк оформления пункта меню. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию: @INLINE |
&tplHere | Чанк оформления текущего пункта меню. |
&tplStart | Чанк оформления корневого пункта, при условии, что включен &displayStart
. По умолчанию: @INLINE [[+menutitle]][[+wrapper]] |
&tplParentRow | Чанк оформления родителя с потомками, не подпадающего под условия &tplCategoryFolder . Например: @INLINE |
&tplParentRowHere | Чанк оформления текущего документа, если он содержит потомков. |
&tplParentRowActive | Чанк оформления родителей с потомками в активной ветке меню. |
&tplCategoryFolder | Специальный чанк оформления категории. Категорией считается родитель с потомками, у которого указан пустой шаблон или rel="category" в поле link_attributes . |
&tplInner | Чанк оформления всего блока подпунктов меню. Если пуст - будет использовать &tplOuter . Например: @INLINE |
&tplInnerRow | Чанк оформления подпункта меню. Например: @INLINE |
&tplInnerHere | Чанк оформления активного подпункта меню. |
Параметры CSS классов
Эти параметры задают значение плейсхолдеров [[+classnames]] и [[+classes]] для различных элементов меню. Плейсхолдер [[+classnames]] выводит только название класса без атрибута class="" , в отличие от плейсхолдера [[+classes]] .
Примеры
Обычный вывод меню из корня сайта в один уровень:
[]
Вывод с исключением определенных родителей и проверкой разрешений пользователя:
[]
Вывод меню сразу из двух родителей, с показом корневых точек:
[]
Вывод двух уровней ресурсов с подсчетом количества вложенных:
[]` &tplParentRow=`@INLINE