Структура сайта выглядит примерно так:
- Главная категория
- Подкатегория 1
- Подкатегория 2
Чтобы нормально в нодах отображались breadcrumbs поставил себе модуль Taxonomy Breadcrumb. Все бы хорошо, но в Главной категории и подкатегориях почему-то название категории выводиться 2 раза.
Т.е. breadcrumbs выглядят так:
В главной категории: Имя главной категории > Имя главной категории
В подкатегории: Ссылка на главную категорию > Имя подкатегории > Имя подкатегории
В нодах: Ссылка на главную категорию > Ссылка на подкатегорию > Имя нода
Как можно избавить от дублирования названия категорий?
Комментарии
Я использую свой модуль: http://drupal.org/project/node_breadcrumb для настройки breadcrumb. Но там автоматически breadcrumb не строится, а задаются правила: какие ноды к каким пунктам меню должны относиться. Соответственно breadcrumb-ы получаются типа:
главный раздел меню => подраздел меню => подподраздел
Соответственно, кроме breadcrumb и положение в меню отображается у ноды корректно (т.е. меню развернуто в нужном месте).
Спасибо большое, действительно вещь интересная.
Но есть одно но... У меня названия разделов и пунктов в меню немного различаются (если название раздела слишком длинное, то в меню я его обзываю немного по другому одним-двумя словами). А в breadcrumb-е выводиться как раз название из меню.
Можно ли выводить название раздела?
Да и еще один минус - как я понял правила нельзя реактировать.
Можно ли выводить название раздела?
Нельзя) И вообще это нелогично. В breadcrumb-е должны быть те же названия, по которым юзер кликал в меню имхо. И вообще не факт, что пункты меню совпадают с иерархией терминов. Например, статьи с термином "животные=>собаки" могут быть в разделе "статьи=>флора и фауна=>домашние животные".
Да и еще один минус - как я понял правила нельзя реактировать.
Лень делать) Да и лишний код - лишние тормоза.
Мой пример.
Название категории: Выбор правовой формы собственности
В меню в виду длины названия категории: Формы собственности.
Теперь такой момент, когда находишься в самой категории в breadcrumb-е выводиться название категории, т.е. "Выбор правовой формы собственности".
А когда переходишь в нод, то в breadcrumb-е пишется "Формы собственности > Название нода"
Как раз нелогично получается здесь. В категории название одно, а в ноде другое.
edhel, если тебе не трудно напиши, что нужно поменять, чтобы в breadcrumb-е вместо пунктов меню выводились названия категорий.
Буду очень признателен.
Не выйдет это... Модулем я просто правлю текущую позицию в меню. А breadcrumb уже сам друпал генерит на основе текущей позиции в меню... и заголовки берутся из меню.
Если сильно захотеть, то можно подменить заголовки в теме, написав функцию phptemplate_menu_item_link. Стандартная реализация темизации ссылки в меню:
<?php
function theme_menu_item_link($item, $link_item) {
return l($item['title'], $link_item['path'], !empty($item['description']) ? array('title' => $item['description']) : array(), isset($item['query']) ? $item['query'] : NULL);
}
?>
Нужно пофиксить так: если path равен /taxonomy/term/TID, то загружаем термин с помощью taxonomy_get_term и берем оттуда нужное название. Дальше также вызываем l() или theme_menu_item_link.
Функцию эту нашел, но не совсем понял где проверку делать в файле модуля или в самом menu.inc ?
Ядро трогать не надо, модуль трогать не надо. Править template.php в теме... Добавить функцию phptemplate_menu_item_link взял за основу код theme_menu_item_link...
При проверке $link_item['path']==/taxonomy/term/$tid пытаюсь заменить $item['title'] = taxonomy_get_term($tid) , но понимаю, что наверно делаю совсем не то.
Может поможешь мне с написанием этой функции.
http://api.drupal.org/, http://php.ru/doc/....
Спасибо, с этим я разобрался.
Возник другой вопрос - ни в одном модуле я не видел, чтобы при добавлении комментария breadcrumb был такой же как и в ноде, во всех модулях в breadcrumb-e остается только ссылка на ноду.
А можно ли сделать так, чтобы breadcrumb был такой же как в ноде, а название ноды осталось ссылкой?
Сделать можно что угодно! Вопрос только в том, насколько это накладно реализовывать)