В базовой поставке Drupal довольно плохо реализована работа с хлебными крошками. Я бы даже сказал что ситуация с ними плачевная.
По умолчанию основным меню считается меню «Навигация» и хлебные крошки рисуются только для страниц, присутствующих в иерархии данного меню. Если вы, например, при помощи модуля прицепите к какому-нибудь пункту термины вашего словаря, то на страницах терминов хлебные крошки будут работать правильно, а вот на нодах, которые закреплены за этими терминами – уже нет, поскольку эти ноды не соответствуют какому-либо пункту в меню «Навигация». И таких примеров в виде частных случаев привести можно много.
Конечно, существуют модули, помогающие решить ту или иную проблему с хлебными крошками. Но, как правило, чтобы добиться 100% результата одним дополнительным модулем дело не обходится, иногда напрашивается установка до трех дополнительных модулей, чтобы устранить все недочеты и заставить-таки эти крошки работать как нужно нам. Но тут начинается настоящая каша, какой модуль за какой случай отвечает, находятся даже случай в которых модули начинают конфликтовать. Кроме того, пожалуй, главный минус такого решения – куча модулей вокруг решения элементарной задачи.
Решение есть! Модуль .
Этот модуль был назван в честь героя детской сказки «Гензель и Гретта», где дети по пути оставляли хлебные крошки. При помощи него решение проблемы с хлебными крошками становится приятным занятием. Попробуем вместе с вами разобраться, как настраиваются хлебные крошки.
Настройки представляют собой иерархически выстроенный набор правил. Самое первое правило должно иметь название «start». Все остальные правила будут для него дочерними.
Рассмотрим форму добавления правила.
Поле «Название» - самое важное поле. Это тот случай, когда имена правилам мы не из головы придумываем, а отвечаем на вопрос из предыдущего правила. Суть этого поля вы поймете ниже.
Поле «Родитель». Тут мы выбираем правило, для которого наше новое правило станет дочерним.
Поле «Action with breadcrumbs». Вот тут мы указываем, какое действие нужно произвести с нашими хлебными крошками:
- none – ничего не делать;
- add single link – добавить одиночную ссылку;
- add link to node – добавить ссылку на ноду;
- add link to user – добавить ссылку на профиль пользователя;
- add link to current page – добавить ссылку на текущую страницу;
- add term path – добавить ссылку (или группу ссылок, в зависимости от иерархии терминов в словаре) на термин из конкретного словаря.
Поле «Действие» - это мое любимое поле, за которое я этот модуль полюбил всей душой ;-). Итак варианты действий:
- Goto rule – позволит нам перескочить на любое другое правило и продолжить формирование хлебных крошек с него;
- Leave – закончить формирование хлебных крошек;
- Переключить – это мое любимое действие, на котором собственно и построена чудодейственность модуля. Разъясняю ниже суть.
Итак «Переключить» - нам предлагаются следующие варианты:
- node type – это означает, что имена дочерних правил должны соответствовать именам типов нод. Будет выполнено дочернее правило, имя которого совпадет с именем типа ноды, на которой пользователь находится в данный момент;
- url argument – имя дочернего правила должно соответствовать аргументу адресной строки;
- php – вот настоящая гибкость настройки, можно выполнить любой php код (ну мало ли от каких условий по-вашему зависит, какой должна быть следующая ссылка в ваших хлебных крошках). Имя дочернего правила должно соответствовать значению, которое возвращает ваш php код;
- node id – имя дочернего правила должно соответствовать номеру ноды;
- path alias – переключение на синоним текущего пути. Имя дочернего правила должно соответствовать участку адреса страницы в адресной строке браузера.
Хочу подробнее остановиться на особенности значения имен дочерних правил от правила, которое заканчивается переключением на path alias. Тут следует учесть, что если мы не хотим показывать ссылку на текущую страницу в хлебных крошках, то в случае с path alias следует добавлять слэш в конце значения.
К примеру, у нас структура раздела статьи: Главная / Статьи / Страница статьи (путь: /articles/page.html). Так вот чтобы на странице /articles не показывать ссылку на раздел Статьи, следует в имени правила указать «articles/», чтобы ссылка на раздел присутствовала в крошках только в случае ,если мы находимся на внутренних страницах раздела.
Чтобы было наглядно, вот как выглядят правила для хлебных крошек на данном сайте на момент написания этой статьи:

Еще к слову пару строк об особенностях темизации хлебных крошек. Дело в том что очень часто нужно, чтобы хлебные крошки вообще не выводились, если в них присутствует только ссылка на главную страницу. Для решения этой задачи можно использовать .
function theme_name_breadcrumb($breadcrumb) {
if (!($breadcrumb)) {
if(($breadcrumb) > 1){
return '<div class="breadcrumb">'. (' / ', $breadcrumb) .'</div>';
}}}
Следует помнить, что вместо «theme_name» должно быть имя вашей темы. В этой функции мы всего лишь указали, что хлебные крошки выводим только в случае, если количество пунктов больше одного. Заодно тут же можно поставить разделитель, которым вы желаете отделять ссылки в ваших хлебных крошках.
Вот, пожалуй, и все что я хотел рассказать про хлебные крошки в Drupal. Хорошего вам программирования!


Спасибо за подробную инструкцию. Почти все созданные пути получились. Но у меня на сайте ноды имеют путь главная / имя ноды. Меню складывается из таксономии с дочерними пунктами. У меня получилось создать цепочку до последнего термина таксономии, а потом должна идти нода Пример: Главная / Советы / Беременность / Питание при беременности / нода (имеет путь главная / имя ноды) При переходе в ноду хлебные крошки не отображаются. Не пойму как сделать так чтобы при покзе ноды хл.крошки не пропадали. С ув.
Следуя логике системы друпал, в иерархии меню должен присутствовать пункт, ссылающийся на эту ноду. Тогда хлебные крошки будут работать.
Если для вас это не вариант, то попробуйте в Hansel настроить правило с выполнением php кода, в котором вы проверите тип ноды и вставите "add term path using Vocabulary".
Здравствуйте. Не могу настроить данный модуль, чего-то недопонимаю наверно...
Там где понятно все, можно настроить главная/статьи/советы, ясно как убрать ссылку на раздел статьи в случае необходимости ...
А как с этим быть (сайт переношу с хтмл, расположения материала было: и т.д.) То есть, есть главная (главная страница сайта) есть раздел допустим статьи, который имеет адрес (т.е. статическая страница, а не директория) и в нём находятся статьи с адресом и т.д.
Т.е. получается создать крошки Главная/статьи а дальше, что не выбираешь, крошки не отображаются ...
start add link Главная
switch on path alias (starts with)
company.html
add link Статьи
switch on path alias (starts with)
Подскажете?
Здравствуйте!
В вашем случае нужно ориентироваться на тип ноды.
start
add link Главная
switch on node type
node type article
add link Статьи
leave
Отправить комментарий