Добавляем расширенное описание к «хлебным крошкам» в Drupal

06 марта 2014 - 12:45

Для лучшего отображения страницы сайта в сниппете поисковой выдачи Google нужно использовать расширенное описание для элементов страницы, в частности, для навигационных цепочек, или так называемых "хлебных крошек". Подробнее о расширенном описании элементов навигации можно прочитать в руководстве Google. В данной статье я расскажу о том, как добавить расширенное описание к «хлебным крошкам» в Drupal 7, используя микроданные или разметку RDF.

Дополняем хлебные крошки разметкой RDF

Разметку RDF следует применять в темах оформления, разработанных по стандартам XHTML + RDFa (по умолчанию в Drupal 7 установлен именно такой doctype, также в ядро включен модуль RDF).

Для RDF-разметки «хлебных крошек» в template.php темы оформления сайта помещаем следующий код:

function THEME_preprocess_breadcrumb(&$vars) {
  foreach ($vars['breadcrumb'] as $key => $breadcrumb) {
    $vars['breadcrumb'][$key] = '<span typeof="v:Breadcrumb">' . $breadcrumb . '</span>';
  }
}

function THEME_menu_breadcrumb_alter(&$active_trail, $item) {
  foreach($active_trail as $key => $active_trail_item){
    $active_trail[$key]['localized_options']['attributes']["rel"][]='v:url';
    $active_trail[$key]['localized_options']['attributes']["property"][]='v:title';
  }
}

function THEME_breadcrumb($variables) {
  $breadcrumb = $variables['breadcrumb'];
  if (!empty($breadcrumb)) {
    $breadcrumb[] = drupal_get_title();
    $output = '<div class="breadcrumb" xmlns:v="<a href="http://rdf.data-vocabulary.org/#">'">http://rdf.data-vocabulary.org/#">'</a> . implode(' » ', $breadcrumb) . '</div>';
    return $output;
  }
}

Кратко прокомментирую код. В функции THEME_preprocess_breadcrumb мы оборачиваем ссылки навигационных цепочек в элемент span с атрибутом разметки RDF typeof="v:Breadcrumb". В функции THEME_menu_breadcrumb_alter добавляем к ссылкам хлебных крошек атрибуты rel='v:url' и property='v:title'. И наконец, в функции THEME_breadcrumb мы для div-обертки навигационной цепочки добавляем атрибут xmlns:v=http://rdf.data-vocabulary.org/#.

Дополняем хлебные крошки микроданными

Для тем оформления Drupal, разработанных по стандартам HTML5 следует дополнять элементы навигации микроданными. Для решения этой задачи в Drupal нам понадобится следующий код:

function THEME_preprocess_breadcrumb(&$vars) {
  foreach ($vars['breadcrumb'] as $key => $breadcrumb) {
    $vars['breadcrumb'][$key] = '<span itemscope itemtype="<a href="http://data-vocabulary.org/Breadcrumb">'">http://data-vocabulary.org/Breadcrumb">'</a> . $breadcrumb . '</span>';
  }
}

function THEME_menu_breadcrumb_alter(&$active_trail, $item) {
  foreach($active_trail as $key => $active_trail_item){
    $active_trail[$key]['

localized_options']['html'] = true;
    $active_trail[$key]['
title'] = '<span itemprop="title">' . $active_trail[$key]['title'] . '</span>';
    $active_trail[$key]['
localized_options']['attributes']["itemprop"]='url';
  }
}

В обоих случаях нужно вместо THEME указать имя темы сайта и очистить кеш.

Комментарии

Ваш код не работает! Выдаёт ошибку:

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /home/..../themes/.../template.php on line 24

То есть ругается вот на эту строчку
$output = '<div class="breadcrumb" xmlns:v="<a href="<a href="http://rdf.data-vocabulary.org/#">'">http://rdf.data-vocabulary.org/#">'</a>">http://rdf.data-vocabulary.org/#">'">http://rdf.data-vocabulary.org/#">'...</a> . implode(' » ', $breadcrumb) . '</div>'; - See more at: <a href="http://sergeybelyaev.name/blog/dobavlyaem-rasshirennoe-opisanie-k-hlebnym-kroshkam-v-drupal#sthash.HZV3D9gt.dpuf">http://sergeybelyaev.name/blog/dobavlyaem-rasshirennoe-opisanie-k-hlebny...

Это из-за включенного фильтра "Преобразовывать адреса в ссылки" формата Full HTML неверно выводился код в статье, сейчас все корректно, спасибо что заметили.

Понравился ваш блог, много полезного, а не могли бы вы сделать подобную микроразметку для хлебных крошек для Drupal 8 тема bartik , нашел файл breadcrumb.html.twig по пути /core/themes/classy/templates/navigation но подставить параметры не получается.