Хлебные крошки на страницах таксономии (Views)
«Хлебные крошки» (англ. Breadcrumbs, по ироничной аналогии с немецкой сказкой "Гензель и Гретель", в которой дети, когда их завели в лес во второй раз, не смогли найти обратную дорогу, так как на этот раз вместо маленьких камешков они оставляли за собой хлебные крошки, впоследствии склеванные лесными птицами) — элемент навигации по сайту, представляющий собой путь по сайту от его «корня» до текущей страницы, на которой находится пользователь. (википедия ру)
В Drupal добавить хлебные крошки довольно легко, достаточно в файле темы прописать их вывод. Обычно они выводятся на всех страницах, кроме главной.
<?php if (!$is_front): print $breadcrumb; endif; ?>
Но кое-где крошки работают не так, как нам нужно. В некоторых случаях помогают отличные дополнительные модули Taxonomy Breadcrumb, Custom Breadcrumbs и другие. Для себя в одном из случаев я нашел следующее решение, а именно - для страниц терминов таксономии.
У модуля Views есть очень полезная вьюха, которая идет с модулем. Ее остается только включить и настроить. Называется она taxonomy_term (default). Работает она по следующиму пути "taxonomy/term/%", т.е. страница термина любого словаря будет обрабатываться именно этой вьюхой.
Разберем такой пример. На сайте есть два типа материала, использующих таксономию: Новости и Каталог (товар в каталог).
Для задания нужного пути в крошках на странице вьюхи taxonomy_term, я написал следующий код блок Заголовка (header):
<?php $breadcrumb = array(); $breadcrumb[] = l(t('Home'), "<front>"); if(arg(2) && $term1 = taxonomy_get_term(arg(2))) { $voc1 = taxonomy_vocabulary_load($term1->vid); switch ($voc1->name) { case 'Каталог': $voclink = 'catalog'; break; case 'Новости': $voclink = 'news'; break; } $breadcrumb[] = l(t($voc1->name), $voclink); if ($term2 = taxonomy_get_parents($term1->tid)) { foreach ($term2 as $parent) { $breadcrumb[] = l($parent->name, 'catalog/1/'.$parent->tid); } //$breadcrumb[] = l($term1->name, 'catalog/'.$term2[1]->tid.'/'.$term1->tid); } //else {$breadcrumb[] = l($term1->name, 'catalog/'.$term1->tid);} } drupal_set_breadcrumb($breadcrumb); ?>
Так как путь у термина выглядит как //taxonomy/term/id, то получив id и проверив является ли он термином таксономии (taxonomy_get_term), я для добавления нужного пути сперва проверяю к какому словарю термин относится (taxonomy_vocabulary_load), а уже затем пишу один из двух путей созданных ранее вьюх (news и catalog). Затем я проверяю есть ли у термина родители (taxonomy_get_parents), т.е. словарь ведь может быть многоуровневым (в моем случае всего двухуровневый). Если найден родитель, то я вписываю именно его. Последние выводы самой ссылки на активную страницу я закомментировал, логично будет если мы в навигационной линейке будем видеть только родителей.
После этого находясь к примеру на странице Экономических новостей я вижу крошки: "Главная - Новости", а на странице Двухкамерные холодильники: "Главная - Каталог - Холодильники".

2 комментария for 'Хлебные крошки на страницах таксономии (Views)'
1. Функция taxonomy_get_parents
Функция taxonomy_get_parents возвращает родителей только текущего термина, не проверяя дальнейшую иерархию. Чтобы она правильно отработала для всего дерева предков - пришлось бы вызывать ее рекурсивно.
Для многоуровневого словаря правильнее использовать конструкцию:
if ($term2 = taxonomy_get_parents_all($term1->tid)) {
$term2 = array_reverse($term2);
foreach ($term2 as $parent) {
$breadcrumb[] = l($parent->name, 'taxonomy/term
}
}
Функция taxonomy_get_parents_all вернет всю иерархию родителей для текущего термина от конца к началу. В итоге останется только развернуть массив в обратном порядке функцией array_reverse и занести в список breadcrumb-ов.
Спасибо за статью. Я с ее помощью таки сумел настроить вывод breadcrumb-а на странице просмотра ноды по присвоенному ноде термину.
2. Четвертая строка не полностью
Четвертая строка не полностью получилась. Там вторым параметром должно быть:
"taxonomy/term/" . $parent->tid
Отправить комментарий