Jump to main content Jump to doc navigation

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

Хорошая замена BreadCrumb. Работает с документами из любых контекстов и даёт много опций выбора ресурсов.

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

Свойства

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

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

Свойства шаблонов

Template Default
&tpl @INLINE <a href="[[+link]]">[[+menutitle]]</a>
&tplCurrent @INLINE <span>[[+menutitle]]</span>
&tplMax @INLINE <span>&nbsp;...&nbsp;</span>
&tplHome
&tplWrapper @INLINE <div class="breadcrumbs">[[+output]]</div>

Примеры

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

[[pdoCrumbs]]

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

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

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

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

Генерация заголовков страниц

pdoCrumbs можно вызывать внутри другого сниппета, например для генерации тега header страниц.

Сниппет Title:

<?php
// We define variables
if (empty($separator)) {$separator = ' / ';}
if (empty($titlefield)) {$titlefield = 'longtitle';}
if (empty($parents_limit)) {$parents_limit = 3;}
if (empty($tplPages)) {$tplPages = 'No. [[+page]] of [[+pageCount]]';}

// Key and cache settings
$cacheKey = $modx->resource->getCacheKey() . '/title_' . sha1(serialize($_REQUEST));
$cacheOptions = array('cache_key' => 'resource');

if (!$title = $modx->cacheManager->get($cacheKey, $cacheOptions)) {
    // We learn the name of the page
    $title = !empty($modx->resource->$titlefield)
        ? $modx->resource->$titlefield
        : $modx->resource->pagetitle;

    // Add a search query, if there is one
    if (!empty($_GET['query']) && strlen($_GET['query']) > 2) {
        // We need to use a placeholder to avoid
        $title .= ' «[[+mse2_query]]»';
    }

    // Adding pagination if indicated
    if (!empty($_GET['page'])) {
        $title .= $separator . str_replace('[[+page]]', intval($_GET['page']), $tplPages);
    }

    // Adding parents
    $crumbs = $modx->runSnippet('pdoCrumbs', array(
        'to' => $modx->resource->id,
        'limit' => $parents_limit,
        'outputSeparator' => $separator,
        'showHome' => 0,
        'showAtHome' => 0,
        'showCurrent' => 0,
        'direction' => 'rtl',
        'tpl' => '@INLINE [[+menutitle]]',
        'tplCurrent' => '@INLINE [[+menutitle]]',
        'tplWrapper' => '@INLINE [[+output]]',
        'tplMax' => ''
    ));
    if (!empty($crumbs)) {
        $title = $title . $separator . $crumbs;
    }

    // By caching the results
    $modx->cacheManager->set($cacheKey, $title, 0, $cacheOptions);
}

// return title
return $title;

Вызов сниппета на странице

<title>[[Title]] / [[++site_name]] - my best website in the world</title>

Демо

Рабочий пример [генерации крошек в результатах поиска] 3 mSearch2.

Также сайт bezumkin.ru использует динамические title.

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • deJaya
  • JT Skaggs
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$204 per month—let's make that $500!

Learn more