pdoCrumbs — хлебные крошки для MODX

pdoCrumbs Дополнения

Сниппет pdoCrumbs предназначен для создания навигационной цепочки (хлебных крошек) на сайте. Он является быстрой и функциональной заменой устаревшего компонента BreadCrumb, работая с документами из любых контекстов и поддерживая гибкую настройку отображения. Основное преимущество pdoCrumbs заключается в высокой скорости работы благодаря использованию библиотеки pdoTools и возможности легкого добавления семантической разметки для поисковых систем.

Хлебные крошки получили свое название от знаменитой сказки братьев Гримм и представляют собой навигационную цепочку от главной страницы до текущего раздела. Они помогают пользователям понимать где они находятся в структуре сайта и быстро переходить на вышестоящие уровни.

Параметры pdoCrumbs

Принимает все параметры pdoTools и некоторые свои:

Параметр Значение по умолчанию Описание
&from 0 ID ресурса от которого начинать цепочку (0 = корень контекста)
&to ID текущей страницы ID ресурса которым заканчивать цепочку
&exclude ID ресурсов для исключения из цепочки через запятую
&outputSeparator \n Разделитель между элементами хлебных крошек
&tpl Чанк для оформления обычного пункта
&tplWrapper Обертка для всей цепочки с плейсхолдером [[+output]]
&tplCurrent Чанк для текущей страницы (последний элемент)
&tplMax Чанк при превышении максимальной глубины
&showHidden 1 Показывать скрытые от меню ресурсы
&showUnpublished 0 Показывать неопубликованные ресурсы
&showDeleted 0 Показывать удаленные ресурсы
&showCurrent 1 Включать текущую страницу в цепочку
&showHome 0 Включать главную страницу в начало
&hideSingle 0 Скрывать крошки если элемент всего один
&direction ltr Направление цепочки: ltr (слева направо) или rtl
&scheme Схема генерации ссылок
&useWeblinkUrl 1 Использовать целевой URL для weblink
&toPlaceholder Сохранить результат в плейсхолдер
&showLog 0 Показать отладочную информацию

Шаблоны

Шаблон По умолчанию
&tpl @INLINE <li><a href="[[+link]]">[[+menutitle]]</a></li>
&tplCurrent @INLINE <li class="active">[[+menutitle]]</li>
&tplMax @INLINE <li class="disabled">&nbsp;...&nbsp;</li>
&tplHome
&tplWrapper @INLINE <ul class="breadcrumb">[[+output]]</ul>

Пиимеры

Простейший вызов для генерации хлебных крошек текущей страницы:

[[pdoCrumbs]]

Генерация с ограничением по количеству пунктов:

[[pdoCrumbs? &limit=`2` ]]

Вывод с отображением текущей страницы и главной:

[[pdoCrumbs? &showCurrent=`1` &showHome=`1` ]]

Использование разделителя между пунктами:

[[pdoCrumbs? &showCurrent=`1` &showHome=`1` &outputSeparator=` < ` ]]

Простая реализация для Bootstrap 4/5:

[[pdoCrumbs?
    &showHome=`1`
    &showCurrent=`1`
    &tplWrapper=`@INLINE <ol class="breadcrumb">[[+output]]</ol>`
    &tpl=`@INLINE <li class="breadcrumb-item"><a href="[[+link]]">[[+menutitle]]</a></li>`
    &tplCurrent=`@INLINE <li class="breadcrumb-item active">[[+menutitle]]</li>`
]]

Разметка хлебных крошек для поисковых систем в формате Microdata:

[[pdoCrumbs?
&showHome=`1`
&showCurrent=`1`
&tplWrapper=`@INLINE 
<ol class="breadcrumb" itemscope itemtype="https://schema.org/BreadcrumbList">
  [[+output]]
</ol>`
&tpl=`@INLINE 
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
  <a itemprop="item" href="[[+link]]">
    <span itemprop="name">[[+menutitle]]</span>
  </a>
  <meta itemprop="position" content="[[+idx]]" />
</li>`
&tplCurrent=`@INLINE 
<li class="active" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
  <span itemprop="name">[[+menutitle]]</span>
  <meta itemprop="position" content="[[+idx]]" />
</li>`
]]

Современный способ добавления структурированных данных через JSON-LD:

[[pdoCrumbs?
&showHome=`1`
&showCurrent=`1`
&tplWrapper=`@INLINE 
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [[[+output]]]
}
</script>
<ol class="breadcrumb">[[+output]]</ol>`
&tpl=`@INLINE 
{
  "@type": "ListItem",
  "position": [[+idx]],
  "name": "[[+menutitle]]",
  "item": "[[+link]]"
},
<li><a href="[[+link]]">[[+menutitle]]</a></li>`
&tplCurrent=`@INLINE 
{
  "@type": "ListItem",
  "position": [[+idx]],
  "name": "[[+menutitle]]"
}
<li class="active">[[+menutitle]]</li>`
]]

Обратите внимание на запятую в конце JSON объекта в &tpl — она нужна для корректного формирования массива.

Использование внутри pdoResources (пример чанка):

<article class="post">
  <h3>[[+pagetitle]]</h3>
  <p>[[+introtext]]</p>
  
  [[pdoCrumbs?
  &to=`[[+id]]`
  &showCurrent=`0`
  ]]
</article>

Сохранение результата в плейсхолдер вместо прямого вывода:

[[pdoCrumbs?
&showHome=`1`
&showCurrent=`1`
&toPlaceholder=`crumbs`
]]

<!-- Использование в другом месте -->
<nav aria-label="breadcrumb">
  [[+crumbs]]
</nav>

Это полезно когда нужно вывести хлебные крошки в нескольких местах шаблона или использовать условную логику.

Сравнение с BreadCrumb

Основные отличия pdoCrumbs от устаревшего BreadCrumb:

Возможность pdoCrumbs BreadCrumb
Скорость работы Высокая благодаря pdoTools Средняя
Поддержка Fenom Да Нет
Семантическая разметка Легко добавляется Требует доработки
Работа в других сниппетах Отличная Ограниченная
Гибкость шаблонов Высокая Средняя
Актуальность Активно поддерживается Устарел

Для новых проектов рекомендуется использовать pdoCrumbs как современное и более производительное решение.

Оцените статью
MODX 3
Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.