Оглавление

pdoCrumbs — Сниппет для построения навигации в стиле хлебных крошек.

Работает с документами из любых контекстов и позволяет указывать различные условия для выборки ресурсов.

Сниппет обладает очень высокой скоростью работы, за счет выборки всех нужных элементов из БД за один запрос.

Параметры

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

Параметр По умолчанию Описание
&showLog 0 Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контексте «mgr».
&from 0 Id ресурса, от которого строить хлебные крошки. Обычно это корень сайта, то есть «0».
&to   Id ресурса для которого строятся хлебные крошки. По умолчанию это id текущей страницы.
&exclude   Список id ресурсов, которые нужно исключить из выборки.
&toPlaceholder   Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран.
&outputSeparator \n Разделитель между крошками.
&showCurrent 1 Выводить текущий документ в навигации.
&showHome 0 Выводить ссылку на главную в начале навигации.
&showAtHome 1 Показывать хлебные крошки на главной странице сайта.
&hideSingle 0 Не выводить результат, если он один единственный.
&direction ltr Направление навигации: слева направо «ltr» или справа налево «rtl», например для Арабского языка.
&tpl   Имя чанка для оформления ресурса. Если не указан, то содержимое полей ресурса будет распечатано на экран.
&tplCurrent   Чанк оформления текущего документа в навигации.
&tplMax   Чанк, который добавляется в начало результатов, если их больше чем &limit.
&tplHome   Чанк оформления ссылки на главную страницу.
&tplWrapper   Чанк-обёртка, для заворачивания всех результатов. Понимает один плейсхолдер: [[+output]]. Не работает вместе с параметром &toSeparatePlaceholders.
&wrapIfEmpty   Включает вывод чанка-обертки & tplWrapper даже если результатов нет.

Шаблоны

Шаблон По умолчанию
&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>

Примеры

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

/* modParser */
[[pdoCrumbs]]

/* pdoParser */
{$_modx->runSnippet('pdoCrumbs')}

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

/* modParser */
[[pdoCrumbs?
    &limit=`2`
]]

/* pdoParser */
{$_modx->runSnippet('pdoCrumbs', [
'limit' => 2
])}

Сниппет хорошо работает при вызове из pdoResources. Например, вот такой чанк:

/* modParser */
<h3>[[+pagetitle]]</h3>
<p>[[+introtext]]</p>
[[pdoCrumbs?
    &to=`[[+id]]`
    &showCurrent=`0`
]]

/* pdoParser */
<h3>{$pagetitle}</h3>
<p>{$introtext}</p>
{$_modx->runSnippet('pdoCrumbs', [
'to' => $id,
'showCurrent' => 0
])}

Семантически правильная разметка schema.org

Разметка по schema.org для поисковиков.

Вариант без пункта текущей страницы

Наиболее правильный вариант, который устраивает поисковых роботов и Google и Yandex:

/* modParser */
[[pdoCrumbs?
&showHome=`1`
&showCurrent=`0`
&hideSingle=`1`
&outputSeparator=`<li> / </li>`
&tplWrapper=`@INLINE <ul itemscope="" itemtype="http://schema.org/BreadcrumbList" id="breadcrumbs">{$output}</ul>`
&tpl=`@INLINE <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
    <a title="{$menutitle}" itemprop="item" href="{$link}"><span itemprop="name">{$pagetitle}</span></a>
    <meta itemprop="position" content="{$idx}">
    </li>`
]]

/* pdoParser */
{$_modx->runSnippet('pdoCrumbs', [
'showHome' => 1,
'showCurrent' => 0,
'hideSingle' => 1,
'outputSeparator' => '<li> / </li>',
'tplWrapper' => '@INLINE <ul itemscope="" itemtype="http://schema.org/BreadcrumbList" id="breadcrumbs">{$output}</ul>',
'tpl' => '@INLINE
        <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
             <a title="{$menutitle}" itemprop="item" href="{$link}"><span itemprop="name">{$pagetitle}</span></a>
             <meta itemprop="position" content="{$idx}">
        </li>'
])}

Вариант с неактивным пунктом текущей страницы

Данный вариант оставляет текущую страницу без ссылки. Вы можете получить следующую ошибку в Google Search Console:

Отсутствует поле "item"

Происходит это, потому что валидатор микроразметки выдает предупреждение, когда в коде нет атрибута itemprop="item" у последнего элемента хлебной крошки. Это возникает из-за отсутствия у элемента ссылки. Тем не менее не мешает поисковой системе Google корректно выстраивать цепочку ссылок.

/* modParser */
[[pdoCrumbs?
&showHome=`1`
&outputSeparator=`<li> / </li>`
&tplWrapper=`@INLINE <ul itemscope itemtype="http://schema.org/BreadcrumbList" id="breadcrumbs">{$output}</ul>`
&tpl=`@INLINE
<li><itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
    <a title="{$menutitle}" itemprop="item" href="{$link}"><span itemprop="name">{$pagetitle}</span>
        <meta itemprop="position" content="{$idx}"></a>
</li>`
&tplCurrent=`@INLINE
<li><itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
    <span itemprop="name">{$menutitle}</span><meta itemprop="position" content="{$idx}">
</li>`
]]

/* pdoParser */
{$_modx->runSnippet('pdoCrumbs', [
'showHome' => 1,
'outputSeparator' => '<li> / </li>',
'tplWrapper' => '@INLINE <ul itemscope itemtype="http://schema.org/BreadcrumbList" id="breadcrumbs">{$output}</ul>',
'tpl' => '@INLINE
        <li><itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
             <a title="{$menutitle}" itemprop="item" href="{$link}"><span itemprop="name">{$pagetitle}</span>
             <meta itemprop="position" content="{$idx}"></a>
        </li>',
'tplCurrent' => '@INLINE
        <li><itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
            <span itemprop="name">{$menutitle}</span><meta itemprop="position" content="{$idx}">
        </li>'
])}