Yii1. Додаємо мікророзмітку до хлібних крихт за schema.org

7 жовтня 2024 р. 92 egor

Приклад реалізації мікророзмітки хлібних крихт у Yii1.

Приклад розмітки хлібних крихт за 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="1">
        </a>
    </li>
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
        <a href="/my-section/" title="Мій Розділ" itemprop="item">
            <span itemprop="name">Мій Розділ</span>
            <meta itemprop="position" content="2">
        </a>
    </li>
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
        <a href="/my-section/page/" title="Сторінка" itemprop="item">
            <span itemprop="name">Сторінка</span>
            <meta itemprop="position" content="3">
        </a>
    </li>
</ul>

itemscope - вказує пошуковому боту, що на сторінці описується певний об'єкт.

itemtype - вказує пошуковому боту тип об'єкта.

itemtype="https://schema.org/BreadcrumbList" - вказує тип об'єкта як «хлібні крихти» і складається з ланцюжка пов'язаних веб-сторінок.

itemprop="itemListElement" - вказує на окремий пункт списку поточного об'єкта.

itemprop="item" - розмітка посилання.

itemprop="name" - назва поточного елемента списку, назва хлібної крихти.

meta itemprop="position" content="number" - визначає позицію елемента в навігаційному ланцюжку.

Додаємо мікророзмітку хлібних крихт у Yii1

Створюємо новий віджет хлібних крихт

Для початку створимо клас MyBreadcrumbs.php (app/protected/widgets/MyBreadcrumbs.php), який буде успадковувати базовий клас хлібних крихт CBreadcrumbs, з таким кодом:

<?php
Yii::import('zii.widgets.CBreadcrumbs');
class MyBreadcrumbs extends CBreadcrumbs {
    public function run() {
        if(empty($this->links)) {
            return;
        }
        $definedLinks = $this->links;
        echo CHtml::openTag($this->tagName, $this->htmlOptions)."\n";
        $links=array();
        if($this->homeLink === null) {
            $definedLinks = array(Yii::t('zii', 'Home') => Yii::app()->homeUrl) + $definedLinks;
        } else if($this->homeLink !== false) {
            $links[] = $this->homeLink;
        }
        $position = 1;
        foreach($definedLinks as $label=>$url) {
            if(is_string($label) || is_array($url)) {
                $links[] = strtr($this->activeLinkTemplate, array(
                    '{url}' => CHtml::normalizeUrl($url),
                    '{label}' => $this->encodeLabel ? CHtml::encode($label) : $label,
                    '{position}' => $position,
                ));
            } else {
                $endLink = str_replace('{position}', $position, $this->inactiveLinkTemplate);
                $links[] = str_replace('{label}', $this->encodeLabel ? CHtml::encode($url) : $url, $endLink);
            }
            $position++;
        }
        echo implode($this->separator,$links);
        echo CHtml::closeTag($this->tagName);
    }
}

Викликаємо віджет хлібних крихт із мікророзміткою

Тепер у місці, де викликається стандартний віджет хлібних крихт CBreadcrumbs (зазвичай це: app/themes/themeName/views/layouts/main.php), замінюємо виклик стандартного віджета на наш:

<?php
$this->widget('application.widgets.MyBreadcrumbs', array(
    'links' => $this->breadcrumbs,
    'homeLink' => '<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><a href="/" itemprop="item"><span itemprop="name">' . Yii::t('main', 'breadcrumbs.mainPage.text') . '</span></a><meta itemprop="position" content="0"></li>',
    'tagName' => 'ol',
    'separator' => ' ',
    'activeLinkTemplate' => '<li title="{label}" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><a href="{url}" itemprop="item"><span itemprop="name">{label}</span></a><meta itemprop="position" content="{position}"></li>',
    'inactiveLinkTemplate' => '<li class="active" title="{label}" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><span itemprop="name" class="breadcrumb-current">{label}</span><meta itemprop="position" content="{position}"></li>',
    'htmlOptions' => array('class' => 'breadcrumb', 'itemscope itemtype' => 'https://schema.org/BreadcrumbList'),
    'encodeLabel' => false,
));

Заповнюємо масив хлібних крихт

У контролері масив із хлібними крихтами заповнюється як і раніше:

$this->breadcrumbs = array(
    'Мой раздел' => array('/my-section'),
    $this->breadcrumbsTitle
);

Як перевірити мікророзмітку на сайті?

Перевірити правильність мікророзмітки на сайті можна за допомогою інструменту від google: https://developers.google.com/search/docs/advanced/structured-data