Добавляем структурированные данные (microdata) к breadcrumbs на yii2

30.10.2015

Так как же добавить микроразметку, а именно структурированные данные к хлебным крошкам (breadcrumbs) для своего сайта на yii2?

UPD: Если Вы используете composer, перейдите на страницу расширения. Посмотреть на github.

Все как всегда просто. Нам нужно создать компонент, который будет обрабатывать каждый элемент в хлебных крошках применяя к нему нужный нам шаблон с разметкой. Стандартный класс yii\widgets\Breadcrumbs не дает нам видоизменить ссылки хлебных крошек. По крайней мере такого свойства я не нашел. Поэтому создаем наш класс, который поможет в этом деле.

Создаем: frontend\components\Breadcrumbs\BreadcrumbsUtility.php - если какой-то директории нет, создаем ее сами

Закидываем в BreadcrumbsUtility.php содержимое следующего вида:

<?php

namespace frontend\components\Breadcrumbs;

use yii\helpers\Url;
use yii\helpers\Html;

class BreadcrumbsUtility
{
    /**
     * @param $links array breadcrumbs links (yii\widgets\Breadcrumbs Public property links)
     * @param int $home start breadcrumbs links (if isset home, $home=2. If not isset home, $home=1)
     * @return array breadcrumbs links
     */
    public static function UseMicroData($links, $home = 2) {

        foreach ($links as $key => &$link) {
            if(is_array($link)) {
                $link['template'] = BreadcrumbsUtility::getTemplate($link['label'], $link['url'], $key+$home);
            }
        }

        return $links;
    }

    /**
     * @param $label string name home label
     * @param $url string url link home page
     * @return array
     */
    public static function getHome($label, $url) {

        $home = [
            'label' => $label,
            'url'   => $url,
            'template' => BreadcrumbsUtility::getTemplate($label, $url, 1)
        ];

        return $home;
    }

    /**
     * @param $label
     * @param $url
     * @param $key
     * @return string template microdata
     */
    protected static function getTemplate($label, $url, $key) {
        return '<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">'.
                    Html::a('<span itemprop="name">'.$label.'</span>', Url::to($url), ['itemprop'=>'item'])
                . '
                    <meta itemprop="position" content="'.$key.'" />
                </li>';
    }
}

Пояснение:

Функция getTemplate используется только внутри класса и содержит шаблон разметки schema.org/BreadcrumbList

Функция getHome возвращает шаблон с микроданными для главной страницы

Функция UseMicroData возвращает массив хлебных крошек с микроданными

 

Далее идем в требуемый layout и вносим небольшие изменения в подключенный виджет хлебных крошек. 

Например у меня виджет хлебных крошек подключается для всех страниц в frontend\views\layouts\main.php

Открываем и находим:

<?= Breadcrumbs::widget([
...
...

]) ?>

Далее приводим его к следующему виду:

<?= Breadcrumbs::widget([
    'homeLink' => BreadcrumbsUtility::getHome('Главная', Yii::$app->getHomeUrl()), // получаем главную страницу с микроданными
    'links' => isset($this->params['breadcrumbs']) ? BreadcrumbsUtility::UseMicroData($this->params['breadcrumbs']) : [], // получаем остальные хлебные крошки с микроданными
    'options' => [ // назначаем контейнеру разметку BreadcrumbList
        'class' => 'breadcrumb',
        'itemscope itemtype' => 'https://schema.org/BreadcrumbList'
    ],
]) ?>

Вот и все. Проверяем. Использовалась разметка https://schema.org/BreadcrumbList#examples

comments powered by HyperComments