[Решено]Вопрос по breadcrumb

Главные вкладки

Аватар пользователя Kaer Kaer 19 ноября 2013 в 14:37

Народ хорош трындеть в ветке финделера, лучше помогите мне.

Имеется материал у которого одно из полей это словарь таксономии с множественным выбором терминов. Хочу сделать такую фичу чтобы когда пользователь переходил на одну из нод, из страницы этого термина, в его хлебных крошках указывался этот термин - например
При переходе с главной

Главная -> Титле_ноде

При переходе с страницы термина

Главная -> Термин_таксономии -> Титле_ноде

Причем я не пойму где перехватывать крошки, в template_preprocess_page и template_page_alter их нет. Подскажите как такое лучше реализовать.

И вопрос в догонку, Друпал оперирует какой либо переменной url страницы, с которой был переход или использовать HTTP_REFERER?

З.Ы. Про theme_breadcrumb знаю.

Комментарии

Аватар пользователя Kaer Kaer 19 ноября 2013 в 15:02

"voviko" wrote:
вот тут и перехватывайте, по определенному условию.

как крайний случай если лучше не придумаем

Аватар пользователя voviko voviko 19 ноября 2013 в 15:06

блин, понял ваш вопрос, но через HTTP_REFERER вы получите только синоним, а потом можете получить ID термина. а дальше theme_breadcrumb

Аватар пользователя AI AI 19 ноября 2013 в 16:38

Код будет приблизительно таким:

<?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(' &rarr; '$variable['breadcrumb']) .'</div>';
    }
?>

Решение для D7

Аватар пользователя Kaer Kaer 20 ноября 2013 в 13:12

"webpavilion" wrote:
где в коде определение tid предыдущей страницы?

сниппет хороший, tid я наверное буду в куки писать

Аватар пользователя Kaer Kaer 29 ноября 2013 в 10:42

Описываю решение:
В тему добавил файл отвечающий за вывод термина таксономии - taxonomy-term.tpl.php. В конце него прописал:

<script>
if(session_storage)sessionStorage.setItem('tid', <?= $term->tid ?>);
</script>

Этот код проверяет поддерживает ли браузер сессионное хранилище и если да пишет tid термина в него.
Дальше, в файле tempalte.php в теме, на основе кода AI, добавил в theme_breadcrumb вывод хлебных крошек нужного мне вида. Причем список терминов к которым относиться нода выводится скрытым.
Ну и javascript темы добавил код, который ищет в списке терминов такой термин, у которого совпадают tid и делает его видимым:

<script>
if(session_storage && sessionStorage.getItem('tid') !== undefined){
        jQuery('#breadcrumb .spy-link li[data-tid="' + sessionStorage.getItem('tid')+ '"]').addClass('reffer');
    }
</script>

В результате получаем, что при простом открытии страницы пользователь видит упрощенные хлебные крошки, а при переходе в нее, из страницы термина, вместе с термином. Очень большим плюсом является полная независимость от кеширования.