На самописной CMS, с которой мне пришлось столкнуться, необходимо обернуть хлебные крошки в разметку Schema.org, два часа попытки внедрения разметки непосредственно в чужой код не дали положительного результата (опечатки, нарушение структуры DOM и т.п.). Решил работать с результирующей строкиой. Стоит отметить, что это подходит для конкретной ситуации, но в полне может стать универсальным решением, со временем.

Есть разметка хлебных крошек по Schema.org от Google:

<ol itemscope itemtype="https://schema.org/BreadcrumbList">
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
        <a itemprop="item" href="/https://example.com/books">
            <span itemprop="name">Books</span>
        </a>
        <meta itemprop="position" content="1" />

    </li>
    ›
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
        <a itemscope itemtype="https://schema.org/WebPage" itemprop="item" itemid="https://example.com/books/sciencefiction" href="https://example.com/books/sciencefiction">
            <span itemprop="name">Science Fiction</span>
        </a>
        <meta itemprop="position" content="2" />
    </li>
    ›

    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
        <span itemprop="name">Award winners</span>
        <meta itemprop="position" content="3" />
    </li>
</ol>

Кусок функции, которая у меня получилась:

$html = new SimpleXMLElement('
    <div class="path">
    <a href="/http://yugozapad-vrn.ru/" class="start">Главная</a>
    <span>–</span>
    <a href="/http://yugozapad-vrn.ru/about.html">О центре</a>
    <span>–</span> Схемы этажей
    </div>');

// аттрибут
$position = 1;
// забираем гиперссылки
foreach ($html->a as $tempA) {
    if ($position == 1) {
    $linkElement[] = '<span itemscope itemtype="https://schema.org/BreadcrumbList">'
    . '<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">'
    . '<a itemprop="item" '
    . 'href="' . $tempA['href'] . '" '
    . 'class="' . $tempA['class'] . '">'
    . '<span itemprop="name">' . $tempA . '</span>'
    . '</a>'
    . '<meta itemprop="position" content="' . $position . '" />'
    . '</span>'
    . '<!--сепаратор-->'
    . '<span> – </span>';
    } else {
    $linkElement[] = '<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">'
    . '<a itemprop="item" '
    . 'itemscope '    
    . 'itemtype="https://schema.org/WebPage" '
    . 'itemid="' . $tempA['href'] . '"'
    . 'href="' . $tempA['href'] . '" '
    . 'class="' . $tempA['class'] . '">'
    . '<span itemprop="name">' . $tempA . '</span>'
    . '</a>'
    . '<meta itemprop="position" content="' . $position . '" />'
    . '</span>'
    . '<!--сепаратор-->'
   . '<span> – </span>';
}
$position++;
}
// забираем послдний текст крошек, который, мать его даже в спан не обернут...
$linkElement[] = '<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">'
    . '<span itemprop="name">' . strip_tags($html) . '</span>'
    . '<meta itemprop="position" content="' . $position . '" />'
    . '</span>'
    . '</span>';
$resStr= implode('',$linkElement);

var_dump($linkElement);
print_r($resStr);

Результат:

  • валидатор  разметки Google - Ok;
  • W3C - Ok.
 

Добавить комментарий


Защитный код
Обновить