Jump to main content Jump to doc navigation

Wayfinder это Сниппет от kylej, который сканирует указанную часть дерева документов MODX, находит все документы, которые соответствуют заданным критериям (определяются параметрами), и выводит отформатированный список этих документов. Форматирование вывода управляется шаблонами и может содержать любую комбинацию HTML, CSS и JavaScript, что даёт огромную гибкость.

Основное назначение Wayfinder: генерировать навигационные меню, которые автоматически обновляются при изменениях в дереве документов, но его можно использовать и для других задач.

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

Обратите внимание: после выхода Revolution доступны два типа сниппетов Wayfinder, по одному для каждой версии. Для ясности на этой странице в примерах используется синтаксис Evolution. В целом функциональность и параметры двух версий совпадают. В Revolution сниппеты нужно вызывать через [[Wayfinder? &...]], а не через [!Wayfinder? &...!].

Обсуждения Wayfinder на форумах MODX: https://forums.modx.com/index.php/board,182.0.html.

Если вы хотите прочитать всё о Wayfinder, на форуме есть 148-страничная электронная книга Kongondo, которая охватывает все аспекты Wayfinder. Подробнее здесь.

История

Wayfinder полностью переработан из исходного построителя навигации DropMenu, чтобы упростить создание пользовательской навигации с помощью Чанков в качестве шаблонов вывода. Благодаря шаблонам многие параметры больше не нужны для гибкого вывода в виде таблиц, неупорядоченных или упорядоченных списков (UL или OL), списков определений (DL) или в любом другом формате.

История версий

Version Released MODX version Notes
0.9 beta 1/2/3 Aug/Sept 2006 0.9.2.1 Initial release
1.0 Oct 23, 2006 0.9.2.1
1.0.1 Nov 07, 2006 0.9.2.1 - 0.9.5
2.0 Feb 27, 2007 0.9.5 + Current release for Evolution
2.1.1 beta 1 May 21, 2009 2.0.0-beta 1
2.1.1 beta 2 Oct 20, 2009 2.0.0-beta 4
2.1.1 beta 4 Nov 05, 2009 2.0.0-beta 5 +
2.3.1 May 18, 2011 2.0+
2.3.2 Sept 20, 2011 2.0+
2.3.3 Oct 31, 2011 2.0+ Current release for Revolution

Установка

Загрузка

Evolution (и ранее)

MODX версии 0.9.5-1.0 включает Wayfinder в установщик по умолчанию. Чтобы добавить Wayfinder в более старую версию MODX или обновить Wayfinder в Evolution:

  1. Скачайте необходимые файлы по ссылке выше.
  2. Создайте новый сниппет в Менеджере MODX (Элементы -> Управление элементами -> Сниппеты) и назовите его Wayfinder.
  3. Скопируйте содержимое snippet.wayfinder.tpl.php в содержимое сниппета.
  4. Создайте новую папку в файловой системе в /assets/snippets/ и назовите её wayfinder.
  5. Скопируйте файл wayfinder.inc.php в новую папку.

Revolution

В MODX Revolution Wayfinder можно скачать через Управление пакетами. Откройте Управление пакетами, нажмите «Download Extras», перейдите в Navigation -> Wayfinder и скачайте последнюю версию. Затем щёлкните правой кнопкой мыши в сетке Packages и выберите Install. После установки всё готово.

Начало работы

Минимальный вызов сниппета Wayfinder:

[[Wayfinder? &startId=`0`&level=`1`]]

выведет HTML для многоуровневого неупорядоченного списка всего дерева документов (с определёнными исключениями), где каждый элемент списка это ссылка на соответствующий документ в дереве документов MODX.

См. Вводные примеры Wayfinder для подробных примеров сравнения вызовов сниппета Wayfinder с HTML-выводом.

Параметры

Общие параметры

Parameter Description Default
&startId Начальная точка (ID документа), с которой меню строит список документов. Укажите 0, чтобы начать с корня сайта. current docId
&displayStart Показывать документ, указанный в &startId, в меню. 0
&level Глубина (число уровней) для построения меню. «0» проходит все уровни. 0
&limit Параметр limit заставляет Wayfinder обрабатывать только указанное число элементов на каждом уровне. 0
&ignoreHidden Игнорировать флажок «Show in menu» для документов и всё равно включать их в меню. 0
&ph Имя плейсхолдера для записи результатов вывода вместо прямого возврата. 0
&debug Установите «1», чтобы включить режим отладки для дополнительной диагностики. 0
&hideSubMenus Установите «1», чтобы выводить только активное подменю. 0
&removeNewLines Установите «1», чтобы удалить символы перевода строки из вывода. 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
&useWeblinkUrl При значении 1 ссылка, указанная в документе weblink, выводится в плейсхолдер [ wf.link] вместо ссылки на сам weblink. 1
&includeDocs Список ID документов через запятую для включения в меню.
&excludeDocs Список ID документов через запятую для исключения из меню. 0
&cacheResults кэширует запросы для более быстрой загрузки ( added in 2.2.0-rc1)
&cacheTime Число секунд хранения кэшированного меню, если cacheResults равен 1. Установите 0 для бессрочного хранения до ручной очистки кэша. 3600
&contexts Контексты для построения меню. По умолчанию используется текущий контекст. ( added in 2.2.0-rc1)
&startIdContext ( added in 2.2.0-rc1)
&config внешний php-файл для настройки Wayfinder ( see core/components/wayfinder/configs for examples)
&scheme формат генерации URL. Возможные значения (на основе вызова API makeURL): -1 : (значение по умолчанию) URL относительно site_url, 0: see http, 1: see https, full: URL абсолютный, с префиксом site_url из конфигурации, abs: URL абсолютный, с префиксом base_url из конфигурации, http: URL абсолютный, принудительно http, https: URL абсолютный, принудительно https (added in 2.3.1-pl) -1
&sortBy Поле для сортировки, например «published»
&sortOrder Порядок сортировки: «ASC» или «DESC»
&where Фильтрация в стиле JSON. Например, чтобы скрыть блог или новости из дополнения Articles: &where=\[{"class\_key:!=": "Article"}\]
&hereId Задаёт текущий ID для сниппета. Используйте значение [[*id]], если шаблон, указанный в hereTpl и activeRowParentTpl, не применяется к пункту меню корректно. iterated ID
&hereTpl Шаблон hereTpl используется, когда текущий элемент отображается в меню.

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

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

В текущей версии WayFinder для Revolution вы можете обращаться к своим TV через плейсхолдер без префикса «wf.», например [[+my\_TV]]

На момент написания возвращается только сырое значение TV без форматирования. Например, если TV это изображение, обычное использование TV в шаблоне вернёт полный тег img, а внутри tpl WayFinder только путь к изображению.

Если вам нужно, чтобы MODX 2.x обработал TV (например, TV изображения с base path/url как опцией ввода (с MODX 2.1.x) или со значением @inherit), вы можете вызвать сниппет внутри шаблона строки wayfinder (&rowTpl). Допустим, ваш TV изображения называется icon. Обычно вы используете что-то вроде:

... <img src="[[+icon]]" /> ...

Но это не даст полностью обработанный TV. Измените код так:

... <img src="[[processTV? &myId=`[[+id]]` &myTV=`icon` ]]" /> ...

В сниппете processTV разместите этот php-код:

<?php
$doc = $modx->getObject('modResource', $myId);
return $doc->getTVValue($myTV);

В результате вернётся полностью обработанный TV изображения.

&outerTpl

Имя чанка с шаблоном для внешнего контейнера. Если не указан, предполагается строка с [[+wf.wrapper]]

Доступные плейсхолдеры:

  • wf.classes - выводит соответствующие классы (включая class=" ")
  • wf.classnames - выводит соответствующие классы (без class=" ")
  • wf.wrapper - выводит внутреннее содержимое (строки). Этот плейсхолдер обязателен.

Обратите внимание: плейсхолдеры нужно оборачивать в соответствующие теги.

Evolution: [+wf._____+]
Revolution: [[+wf._____]]

Пример чанка &outerTpl (Evo):

<ul id="topnav"[+wf.classes+]>[+wf.wrapper+]</ul>

Revo:

<ul id="topnav"[[+wf.classes]]>[[+wf.wrapper]]</ul>

В таблице ниже перечислены другие параметры для изменения вывода с теми же плейсхолдерами, что и у &outerTpl.

Parameter Description
&innerTpl Имя чанка с шаблоном для любых подпапок, перечисленных в меню.

&rowTpl

Имя чанка с шаблоном для обычных строк. Доступные плейсхолдеры:

  • wf.classes - выводит соответствующие классы (включая class=" ")
  • wf.classnames - выводит соответствующие классы (без class=" ")
  • wf.link - значение href для ссылки
  • wf.title - текст title ссылки из поля, указанного в параметре &titleOfLinks
  • wf.linktext - текст ссылки из поля, указанного в параметре &textOfLinks
  • wf.wrapper - выводит внутреннее содержимое, например подменю
  • wf.id - выводит уникальный атрибут ID. Нужно указать параметр &rowIdPrefix, чтобы плейсхолдер получил значение. Значение: ваш префикс + docId.
  • wf.attributes - выводит атрибуты ссылки текущего элемента
  • wf.docid - идентификатор документа текущего элемента
  • wf.description - описание текущего элемента
  • wf.level - текущая глубина элемента (added in v2.3.3)

Обратите внимание: плейсхолдеры нужно оборачивать в соответствующие теги.

Evolution: [+wf._____+]
Revolution: [[+wf._____]]

Начиная с версии 2.3.0, вы можете использовать плейсхолдеры для всех полей Resource, например [[+introtext]], [[+menutitle]], [[+published]] и т. д. Начиная с версии 2.3.2 добавлен плейсхолдер [[+protected]], равный 1, если Resource защищён группой ресурсов.

Примеры чанка &rowTpl (или связанного):

<li[+wf.id+][+wf.classes+]><a href="[+wf.link+]" title="[+wf.title+]" [+wf.attributes+]>[+wf.linktext+]</a>[+wf.wrapper+]</li>
<li><a href="[+wf.link+]">[+wf.linktext+]</a> - [+wf.description+]  [+wf.wrapper+]</li>

Revo:

<li[[+wf.id]][[+wf.classes]]><a href="[[+wf.link]]" title="[[+wf.title]]" [[+wf.attributes]]>[[+wf.linktext]]</a>[[+wf.wrapper]]</li>
<li><a href="[[+wf.link]]">[[+wf.linktext]]</a> - [[+wf.description]]  [[+wf.wrapper]]</li>

В таблице ниже перечислены другие параметры для изменения вывода с теми же плейсхолдерами, что и у &rowTpl.

Parameter Description
&startItemTpl Имя чанка с шаблоном для начального элемента, если включено через параметр &displayStart. Примечание: шаблон по умолчанию показывает начальный элемент, но не делает его ссылкой. Если ссылка не нужна, класс можно задать шаблону по умолчанию через параметр &firstClass=className.
&parentRowHereTpl Имя чанка с шаблоном для текущего документа, если он контейнер и имеет дочерние элементы. Не забудьте плейсхолдер [ wf.wrapper] для вывода дочерних документов.
&parentRowTpl Имя чанка с шаблоном для любого документа-контейнера с дочерними элементами. Не забудьте плейсхолдер [ wf.wrapper] для вывода дочерних документов.
&hereTpl Имя чанка с шаблоном для текущего документа.
&innerTpl Имя чанка с шаблоном для каждого подменю. Если innerTpl не указан, вместо него используется outerTpl.
&innerRowTpl Имя чанка с шаблоном для строк в подпапке.
&innerHereTpl Имя чанка с шаблоном для текущего документа в подпапке.
&activeParentRowTpl Имя чанка с шаблоном для элементов-контейнеров с дочерними элементами, которые сейчас активны в дереве.
&categoryFoldersTpl Имя чанка с шаблоном для папок категорий. Папки категорий определяются пустым шаблоном или атрибутом ссылки rel="category".

&parentRow и &activeParentRow требуют, чтобы у родительского ресурса была включена настройка «Container».

Пример использования &startItemTpl:

<h2 class="menustart"><a href="[+wf.link+]">[+wf.linktext+]</a></h2>[+wf.wrapper+]

Параметры имён CSS-классов

Вы можете использовать CSS для управления внешним видом (и в некоторых случаях поведением) различных частей сгенерированного вывода. Но вы должны указать Wayfinder, какие имена CSS-классов использовать и с какими частями вывода их связывать.

Parameter Description Default
&firstClass CSS-класс для первого элемента на данном уровне меню.
&lastClass CSS-класс для последнего элемента на данном уровне меню. last
&hereClass CSS-класс для элементов, показывающих текущее положение по всей цепочке. active
&selfClass CSS-класс для текущего элемента.
&parentClass CSS-класс для пунктов меню-контейнеров с дочерними элементами. parent
&rowClass CSS-класс для каждой выходной строки
&levelClass CSS-класс для каждого уровня строки. К указанному классу добавляется номер уровня (level1, level2, level3 и т. д., если указано «level»).
&outerClass CSS-класс для внешнего шаблона.
&innerClass CSS-класс для внутреннего шаблона
&webLinkClass CSS-класс для элементов weblink.

Пример:

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

Например, добавление &levelClass=level даст

<li class="level2">

Параметры встраивания кода

Если для вывода вызова Wayfinder нужны определённые CSS или JavaScript, вы можете хранить CSS в одном чанке, а JavaScript в другом, затем использовать эти параметры, чтобы Wayfinder скопировал один или оба чанка в секцию HEAD страницы, на которой выполняется вызов Wayfinder.

Parameter Description
&cssTpl Имя чанка с CSS, который нужно добавить на страницу при наличии вызова Wayfinder.
&jsTpl Имя чанка с JavaScript, который нужно добавить на страницу при наличии вызова Wayfinder.

Значения по умолчанию в Revolution

Parameter Default value
&outerTpl <ul[[+wf.classes]]>[[+wf.wrapper]]</ul>
&rowTpl <li[[+wf.id]][[+wf.classes]]><a href="[[+wf.link]]" title="[[+wf.title]]" [[+wf.attributes]]>[[+wf.linktext]]</a>[[+wf.wrapper]]</li>
&startItemTpl <h2[[+wf.id]][[+wf.classes]]>[[+wf.linktext]]</h2>[[+wf.wrapper]]

Примеры

См. Вводные примеры Wayfinder для подробных примеров сравнения вызовов сниппета Wayfinder с HTML-выводом.

Минимальный вызов Wayfinder

Вызов сниппета:

[[Wayfinder? &startId=`0`]]

выведет HTML для многоуровневого неупорядоченного списка всего дерева документов (с определёнными исключениями), где каждый элемент списка это ссылка на соответствующий документ в дереве документов MODX.

Замена DropMenu на Wayfinder

В некоторых старых шаблонах может использоваться устаревший сниппет DropMenu вместо WayFinder. Сниппет DropMenu не входит в MODX 0.9.5 и выше. Такие шаблоны часто легко обновить для Wayfinder, заменив вызов DropMenu следующим образом:

Пример вызова DropMenu в файле шаблона:

[[DropMenu?startDoc=`0`&levelLimit=`1` ]]

Можно заменить на

[[Wayfinder? &startId=`0`&level=`1`]]

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • deJaya
  • JT Skaggs
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$204 per month—let's make that $500!

Learn more