|
<?php |
|
|
|
/** |
|
* This generates breadcrumbs according to google specification |
|
* @link https://developers.google.com/structured-data/testing-tool/ |
|
* Featuring: |
|
* - nested category trail |
|
* - multiple category trails |
|
* - starting with Home bit |
|
* - without the last bit (the actual product or the current category) |
|
*/ |
|
|
|
$crumbLevels = array( |
|
// nested breadcrumb trail 1 |
|
array( |
|
array('link' => 'url1.html', 'title' => 'URL1'), |
|
array('link' => 'url2.html', 'title' => 'URL2') |
|
), |
|
// nested breadcrumb trail 2 |
|
array( |
|
array('link' => 'second-trail-url1.html', 'title' => 'Second trail URL1'), |
|
array('link' => 'second-trail-url2.html', 'title' => 'Second trail URL2') |
|
) |
|
); |
|
|
|
if ($crumbsLevels && is_array($crumbsLevels)) { |
|
|
|
$out = '<div class="breadcrumbs">'.PHP_EOL; |
|
|
|
foreach ($crumbsLevels as $crumbLevel => $crumbs) { |
|
$out .= '<ul style="clear: both">'.PHP_EOL; |
|
foreach ($crumbs as $crumbPosition => $_crumb) { |
|
$id = 'breadcrumb-'.($crumbLevel + 1).'-'.$crumbPosition; |
|
if (isset($crumbs[$crumbPosition+1]) && $crumbPosition + 1 < count($crumbs) - 1) { |
|
$childId = 'breadcrumb-' . ($crumbLevel + 1) . '-' . ($crumbPosition + 1); |
|
} else { |
|
$childId = null; |
|
} |
|
|
|
if ($crumbPosition < count($crumbs) - 1) { |
|
$liAttrs = array('id' => $id, 'itemscope' => '', 'itemtype' => 'http://data-vocabulary.org/Breadcrumb'); |
|
} else { |
|
$liAttrs = array(); |
|
} |
|
$aAttrs = array(); |
|
$spanAttrs = array(); |
|
|
|
|
|
if (!empty($childId)) { |
|
$liAttrs['itemref'] = $childId; |
|
} |
|
|
|
if ($crumbPosition > 0 && $crumbPosition < count($crumbs) - 1) { |
|
$liAttrs['itemprop'] = 'child'; |
|
} |
|
|
|
if (!empty($_crumb['hidden'])) { |
|
$liAttrs['style'] = 'visibility: hidden;'; |
|
} |
|
|
|
if (!empty($_crumb['link'])) { |
|
$aAttrs['href'] = $_crumb['link']; |
|
$aAttrs['title'] = $this->htmlEscape($_crumb['title']); |
|
$aAttrs['itemprop'] = 'url'; |
|
} |
|
|
|
$spanAttrs['itemprop'] = 'title'; |
|
|
|
$out .= '<li'; |
|
foreach ($liAttrs as $key => $val) { $out .= " $key=\"$val\""; } |
|
$out .= '>'; |
|
|
|
if (!empty($_crumb['link'])) { |
|
$out .= '<a '; |
|
foreach ($aAttrs as $key => $val) { $out .= " $key=\"$val\""; } |
|
$out .= '>'; |
|
} |
|
|
|
$out .= '<div '; |
|
foreach ($spanAttrs as $key => $val) { $out .= " $key=\"$val\""; } |
|
$out .= '>'.$this->htmlEscape($_crumb['title']).'</div>'; |
|
|
|
|
|
if (!empty($_crumb['link'])) { |
|
$out .= '</a>'; |
|
} |
|
|
|
// Leave out the last crumb because it is the current page |
|
if ($crumbPosition < count($crumbs) - 1) { |
|
$out .= '<span> / </span>'; |
|
} |
|
|
|
$out .= '</li>'; |
|
} |
|
$out .= '</ul>'.PHP_EOL; |
|
} |
|
|
|
|
|
$out .= '</div>'.PHP_EOL; // .grid-full .breadcrumbs |
|
echo $out; |
|
} |