
pdoCrumbs 
Snippet for building breadcrumb-style navigation.
Good substitute for BreadCrumb works with documents from any contexts and provides a number of options for selecting resources.
Snippet has a very high speed, due to selecting only the specified elements from the database per request .
Properties 
Accepts all of the properties of [pdoTools] 2 and some others:
| Property | Default | Description | 
|---|---|---|
| &showLog | 0 | Show additional information on the work of the snippet . Only displayed to users logged in to the «mgr» context. | 
| &from | 0 | Id of the resource from which to begin to build the breadcrumbs . This is usually the root of the site, which is "0". | 
| &to | Id of the resource with which end the breadcrumbs . By default, the id of the current page. | |
| &exclude | Comma-separated list of resource IDs that should be excluded from the output. | |
| &toPlaceholder | If not empty, the snippet will save all data to a placeholder with the same name , instead of displaying the output to the screen. | |
| &outputSeparator |  →  | The character to use as a separator between the crumbs. | 
| &tpl | Name of chunk for formatting the output. If not specified, the contents of the resource fields will be printed to the screen. | |
| &tplCurrent | Chunk for formatting the current resource's crumb in the navigation . | |
| &tplMax | Chunk which is added to the end of the results, if there are more than &limit crumbs. | |
| &tplHome | Chunk for formatting the link on the home page. | |
| &tplWrapper | Chunk for formatting the wrapper, to wrap all results. Provides one placeholder: [[+output]]. It does not work in conjunction with &toSeparatePlaceholders. | |
| &wrapIfEmpty | Output the chunk wrapper &tplWrapper even if there are no results. | |
| &showCurrent | 1 | Display the current document in the navigation. | 
| &showHome | 0 | Display a crumb for the home page. | 
| &showAtHome | 1 | Show breadcrumbs on the home page. | 
| &hideSingle | 0 | Do not display the result if it is only a single crumb. | 
| &direction | ltr | The direction of navigation: from left to right «ltr» or right to left «rtl», such as for Arabic. | 
Template Properties 
| Template | Default | 
|---|---|
| &tpl | @INLINE <a href="[[+link]]">[[+menutitle]]</a> | 
| &tplCurrent | @INLINE <span>[[+menutitle]]</span> | 
| &tplMax | @INLINE <span> ... </span> | 
| &tplHome | |
| &tplWrapper | @INLINE <div class="breadcrumbs">[[+output]]</div> | 
Examples 
Generation of bread crumbs for the current page:
[[pdoCrumbs]]Generation of a restricted number of items:
[[pdoCrumbs?
  &limit=`2`
]]Snippet works well when called from pdoResources. For example, here is a chunk:
<h3>[[+pagetitle]]</h3>
<p>[[+introtext]]</p>
[[pdoCrumbs?
  &to=`[[+id]]`
  &showCurrent=`0`
]]Generating page headers 
pdoCrumbs can be called inside another snippet, for example, to generate the header tag of your pages.
Snippet 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;Call the snippet on the page
<title>[[Title]] / [[++site_name]] - my best website in the world</title>Demo 
Working Example [generate breadcrumbs in the search results] 3 mSearch2.
Also the site bezumkin.ru uses dynamic titles.

