pdoCrumbs
pdoCrumbs — Сниппет для построения навигации в стиле хлебных крошек.
Оглавление
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"> ... </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,1161 s
Количество запросов: 27
Источник: cache