Оглавление

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 для поисковиков.

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