Пример разметки хлебных крошек по schema.org
<ul itemscope itemtype="https://schema.org/BreadcrumbList"> <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <a href="/" title="Главная" itemprop="item"> <span itemprop="name">Главная</span> <meta itemprop="position" content="0"> </a> </li> <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <a href="/section/" title="Раздел" itemprop="item"> <span itemprop="name">Раздел</span> <meta itemprop="position" content="1"> </a> </li> <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <a href="/section/page/" title="Страница" itemprop="item"> <span itemprop="name">Страница</span> <meta itemprop="position" content="2"> </a> </li> </ul>
itemscope
- указывает, что на странице описывается определенный объект.
itemtype
- указывает тип объекта.
itemtype="https://schema.org/BreadcrumbList"
- указывает тип, хлебные крошки.
itemprop="itemListElement"
- указывает на отдельный пункту хлебных крошек.
itemprop="item"
- ссылка пункта хлебных крошек.
itemprop="name"
- название пункта хлебных крошек.
meta itemprop="position" content="number"
- определяет позицию пункта хлебных крошек.
Пример результата после внедрения микроразметки хлебных крошек
Добавляем микроразметка хлебных крошек в Yii2
Создаем новый виджет хлебных крошек
Создадим класс MyBreadcrumbs.php (@app/widgets/MyBreadcrumbs.php), который будет наследовать базовый класс хлебных крошек Breadcrumbs, со следующим кодом:
<?php namespace app\widgets; use Yii; use yii\base\InvalidConfigException; use yii\bootstrap4\Breadcrumbs; use yii\bootstrap4\Html; use yii\helpers\ArrayHelper; class MyBreadcrumbs extends Breadcrumbs { public $itemTemplate = "<li class=\"breadcrumb-item\" itemprop=\"itemListElement\" itemscope itemtype=\"https://schema.org/ListItem\">{link}</li>\n"; public $activeItemTemplate = "<li class=\"breadcrumb-item active\" aria-current=\"page\" itemprop=\"itemListElement\" itemscope itemtype=\"https://schema.org/ListItem\">{link}</li>\n"; public function run() { $this->registerPlugin('breadcrumb'); if (empty($this->links)) { return ''; } $links = []; $position = 0; if ($this->homeLink === null) { $links[] = $this->renderItem([ 'label' => Yii::t('yii', 'Home'), 'url' => Yii::$app->homeUrl, 'position' => $position, ], $this->itemTemplate); } else if ($this->homeLink !== false) { $links[] = $this->renderItem($this->homeLink, $this->itemTemplate); } foreach ($this->links as $link) { $position++; if (!is_array($link)) { $link = ['label' => $link, 'position' => $position,]; } else { $link += ['position' => $position]; } $links[] = $this->renderItem($link, isset($link['url']) ? $this->itemTemplate : $this->activeItemTemplate); } return Html::tag('nav', Html::tag($this->tag, implode('', $links), $this->options), $this->navOptions); } protected function renderItem($link, $template) { $encodeLabel = ArrayHelper::remove($link, 'encode', $this->encodeLabels); if (array_key_exists('label', $link)) { $label = $encodeLabel ? Html::encode($link['label']) : $link['label']; } else { throw new InvalidConfigException('The "label" element is required for each link.'); } if (isset($link['template'])) { $template = $link['template']; } if (isset($link['position'])) { $position = $link['position']; } else { $position = 0; } if (isset($link['url'])) { $options = $link; $options += ['itemprop' => 'item']; unset($options['template'], $options['label'], $options['url'], $options['position']); $link = Html::a('<span itemprop="name">' . $label. '</span>', $link['url'], $options); $link .= '<meta itemprop="position" content="' . $position . '">'; } else { $link = Html::a('<span itemprop="name">' . $label . '</span>', Yii::$app->request->url, ['style' => 'display: none;']); $link .= '<meta itemprop="position" content="' . $position . '">'; $link .= $label; } return strtr($template, ['{link}' => $link]); } }
Вызываем виджет хлебных крошек с микроразметкой в Yii2
Теперь в месте где вызывается стандартный виджет хлебных крошек Breadcrumbs (обычно это: @app/views/layouts/main.php
) заменяем вызов стандартного виджета на наш:
<?php echo \app\widgets\MyBreadcrumbs::widget([ 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]); ?>
Заполняем массив хлебных крошек
В контроллере массив с хлебными крошками заполняется как и раньше:
<?php $this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Раздел'), 'url' => ['/section']]; $this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Страница'), 'url' => ['/section/page']]; $this->params['breadcrumbs'][] = $this->title;
Как проверить микроразметку на сайте?
Проверить правильность микроразметки на сайте можно с помощью инструмента от google:
Комментарии
Комментарии отсутствуют, Вы можете быть первым