Народ хорош трындеть в ветке финделера, лучше помогите мне.
Имеется материал у которого одно из полей это словарь таксономии с множественным выбором терминов. Хочу сделать такую фичу чтобы когда пользователь переходил на одну из нод, из страницы этого термина, в его хлебных крошках указывался этот термин - например
При переходе с главной
Главная -> Титле_ноде
При переходе с страницы термина
Главная -> Термин_таксономии -> Титле_ноде
Причем я не пойму где перехватывать крошки, в template_preprocess_page и template_page_alter их нет. Подскажите как такое лучше реализовать.
И вопрос в догонку, Друпал оперирует какой либо переменной url страницы, с которой был переход или использовать HTTP_REFERER?
З.Ы. Про theme_breadcrumb знаю.
Комментарии
вот тут и перехватывайте, по определенному условию.
как крайний случай если лучше не придумаем
блин, понял ваш вопрос, но через HTTP_REFERER вы получите только синоним, а потом можете получить ID термина. а дальше theme_breadcrumb
лучше в сессии писать tid, с рефером морочено в плане совместимости.
Код будет приблизительно таким:
<?php
function MYTHEME_breadcrumb($variable) {
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
switch($node->type){
case 'my_page':
$breadcrumb = array();
$breadcrumb[] = $node->title;
$tid = $node->field_tags['und'][0]['tid']; //Номер термина для my_page
$term = taxonomy_term_load($tid);
$breadcrumb[] = l($term->name, 'taxonomy/term/' . $term->tid);
while ($parents = taxonomy_get_parents($term->tid)) {
$term = array_shift($parents);
$breadcrumb[] = l($term->name, 'taxonomy/term/' . $current->tid);
}
$breadcrumb[] = l(t('Home'), NULL);
$variable['breadcrumb'] = array_reverse($breadcrumb);
break;
case 'product_display':
//Переопределение крошек для типа материала product_display пишем сами
break;
case 'news':
//Переопределение крошек для типа материала news - тупое назначение последовательности...
$breadcrumb = array();
$breadcrumb[] = $node->title;
$breadcrumb[] = l(t('News'), 'новости');
$breadcrumb[] = l(t('Home'), NULL);
$variable['breadcrumb'] = array_reverse($breadcrumb);
break;
default:
break;
}
}
if (!empty($variable)) {
return '<div class="breadcrumb">'. implode(' → ', $variable['breadcrumb']) .'</div>';
}
?>
Решение для D7
сниппет хороший, tid я наверное буду в куки писать
попробуйте drupal_lookup_path, так правильней будет. а то получится вы из куков крошки будете делать
Описываю решение:
В тему добавил файл отвечающий за вывод термина таксономии - taxonomy-term.tpl.php. В конце него прописал:
if(session_storage)sessionStorage.setItem('tid', <?= $term->tid ?>);
</script>
Этот код проверяет поддерживает ли браузер сессионное хранилище и если да пишет tid термина в него.
Дальше, в файле tempalte.php в теме, на основе кода AI, добавил в theme_breadcrumb вывод хлебных крошек нужного мне вида. Причем список терминов к которым относиться нода выводится скрытым.
Ну и javascript темы добавил код, который ищет в списке терминов такой термин, у которого совпадают tid и делает его видимым:
if(session_storage && sessionStorage.getItem('tid') !== undefined){
jQuery('#breadcrumb .spy-link li[data-tid="' + sessionStorage.getItem('tid')+ '"]').addClass('reffer');
}
</script>
В результате получаем, что при простом открытии страницы пользователь видит упрощенные хлебные крошки, а при переходе в нее, из страницы термина, вместе с термином. Очень большим плюсом является полная независимость от кеширования.