Дата публикации
21 Августа 2019
Дата изменения
5 Июля 2020
Уникальных просмотров
3.596

Оглавление

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="https://schema.org/BreadcrumbList" id="breadcrumbs">[[+output]]</ul>`
&tpl=`@INLINE <li itemprop="itemListElement" itemscope itemtype="https://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="https://schema.org/BreadcrumbList" id="breadcrumbs">{$output}</ul>',
'tpl' => '@INLINE
        <li itemprop="itemListElement" itemscope itemtype="https://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="https://schema.org/BreadcrumbList" id="breadcrumbs">[[+output]]</ul>`
&tpl=`@INLINE
<li itemprop="itemListElement" itemscope itemtype="https://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="https://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="https://schema.org/BreadcrumbList" id="breadcrumbs">{$output}</ul>',
'tpl' => '@INLINE
        <li itemprop="itemListElement" itemscope itemtype="https://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="https://schema.org/ListItem">
            <span itemprop="name">{$menutitle}</span><meta itemprop="position" content="{$idx}">
        </li>'
])}

Благодарность автору

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

Один из самых популярных способов поблагодарить автора, воспользоваться сервисом Яндекс.Деньги.

Время работы: 0,1426 s
Время запросов: 0,1426 s
Количество запросов: 29
Источник: cache