Крошечные модули
Время от времени на Друпал.ру появляются вопросы о работе с хлебными крошками. О них в настоящей заметке и пойдет речь — о хлебных крошках (они же breadcrumbs, они же навигационные цепочки).
Действительно, из коробки Друпал практически не предоставляет возможностей по настройке хлебных крошек. Стоит пользователю поработать с таксономией и создать новое меню — и вот уже цепочки содержат только одну ссылку — на главную страницу. Можно, конечно, задавать крошки функцией drupal_set_breadcrumb(), но программировать хотят (и могут) далеко не все. Да и разве это дело — писать модуль каждый раз, когда нужно добавить в цепочку тег таксономии или заголовок на базе синонима?
Но разумеется, в Друпале есть дополнительные модули, помогающие пользователям рассыпать хлебные крошки как можно лучше. Данная заметка — взгляд на существующие на данный момент решения по настройке breadcrumbs в Друпале, скромная попытка обзора крошечных модулей.
Module-Finder, пользоваться которым, кстати, я настоятельно рекомендую всем ищущим модули, помог мне найти 7 модулей, в той или иной мере решающих задачу хлебных крошек:
Начнем с малышей, то есть небольших модулей, решающих самые основные проблемы хлебных крошек.
Первой проблемой является отсутствие воспроизведения в хлебных крошках иерархии меню, если это не меню Навигации. Именно эту проблему исправляет модуль
Menu Breadcrumb
Посмотрим на скриншот:
Очевидно неплохо было бы добавить в цепочку название родительского пункта меню. Модуль Menu Breadcrumb автоматически добавляет иерархию пунктов меню в крошки для всех меню, а не только для Навигации:
Больше ничего Menu Breadcrumb не делает, так что использовать его имеет смысл только если нет других запросов и вы не используете модуль
Menu Trails
Да-да, модуль Menu Trails умеет делать то же самое. Кроме того, его рекомендуется использовать для выделения на странице набора активных пунктов меню для отображаемой ноды. Так что велика вероятность, что между Menu Breadcrumb и Menu Trails вам больше подойдет последний.
К слову, чтобы больше не останавливаться на проблеме иерархии пунктов меню в хлебных крошках, отмечу, что все остальные модули, рассмотренные в заметке, тоже ее решают. Кроме разве что
Taxonomy Breadcrumb
Модуль Taxonomy Breadcrumb позволяет напихать в хлебные крошки терминов таксономии. Модуль может подхватывать и вставлять в цепочку названия словарей и терминов, и ссылаться как на обычную страницу термина (taxonomy/term/tid), так и на специально заданную администратором страницу термина.
Понять удобство этого модуля мне оказалось затруднительно. Он цепляется за первый попавшийся словарь и первый попавшийся термин без возможности указать, какие термины для каких нод предпочтительней. Наверное эту проблему можно решить с помощью весов словарей и терминов, но в свете возможностей модулей, упомянутых далее, Taxonomy Breadcrumb не представляется мне полезным.
Node Breadcrumb
Модуль Node Breadcrumb позволяет задать отдельно для каждого типа содержимого родительский пункт меню, заголовки из которого будут попадать в хлебные крошки, а также словари таксономии, термины которых ждет та же участь.
При этом, правда, отсутствует всякая гибкость настройки: в пределах одного типа содержимого крошки будут генерироваться для всех нод единообразно. Кроме того, в форме добавления новых настроек адски бесит секция «More options» (аналогичная Menu Trails) — она находится в самом низу настроек и поэтому по инерции все время нажимаешь именно ее кнопку «Сохранить», в результате чего настройки хлебных крошек не сохраняются.
Custom Breadcrumbs
Этот модуль предоставляет значительно больше возможностей. Перво-наперво Custom Breadcrumbs поддерживает в настройке хлебных крошек токены. Сами крошки настраиваются отдельно для каждого типа содержимого. Выглядит это примерно вот так:
Кстати, как мы видим из скриншота, есть блок для PHP-кода, позволяющего определять, использовать, или не использовать это правило оформления крошек для данной страницы.
А вот результат:
Уже гораздо симпатичнее, не так ли?
Однако недостатки все те же: жесткая привязка к типам содержимого, затрудняющая оформление возможных частных случаев внутри того или иного типа. Создавать несколько правил для одного и того же типа, разделяя их использование для разных случаев с помощью PHP-сниппета можно, но по сравнению со следующим модулем — неудобно.
Кстати, у Custom Breadcrumbs есть версия 2.2, которая находится в статусе беты с багами. В ней есть интеграция с Views а также создание правил не только для типов содержимого, но и для элементов адреса страницы. Однако она еще содержит баги и не рекомендуется к использованию.
Hansel
Hansel недавно уже появлялся на домовой странице в новостях модулей. Напомню, что назван он в честь сказки братьев Гримм «Гансик и Греточка» (из которой собственно и выросло понятие «хлебные крошки»). Правда, надмозги назвали сказку «Гензель и Гретель», но не будем о грустном.
Модуль Hansel гораздо мощнее всех перечисленных модулей вместе взятых. В нем пользователь для настройки задания хлебных крошек должен задавать цепочки правил поведения с поддержкой условных операторов, вот так:
Здесь описан следующий порядок определения крошек. Сначала модуль смотрит на синоним адреса страницы. Если синоним начинается с 'project', в крошки добавляется ссылка «Разработки». Если начинается с 'shows', добавляется ссылка «Сериалы», после чего проверяется продолжение синонима: если в нем содержится запись 'shows/flight_of_the_conchords/', в крошки последовательно добавляются ссылки «Разработки» и «Полет Конкордов». Если же синоним не содержит ни 'project', ни 'shows', конструктор крошек переходит к правилу storybreads, которое задает генерацию крошек для типов содержимого. Обратите внимание на надпись Restore original breadcrumbs. Эта опция позволяет восстанавливать для страниц, соответствующих правилу, те крошки, которые были бы сгенерированы без Гансика (например, модулями forum или image).
Hansel крайне гибок. Он поддерживает токены, он поддерживает правила, и мне сложно, вообще говоря, представить, какие крошки на нем сделать нельзя. Поначалу может показаться, что он непрост в освоении, но это не так: в readme.txt модуля содержится подробнейшее описание конструктора правил создания хлебных крошек. Я разобрался — сможете и вы.
Единственный недостаток модуля — это несколько недоработанный интерфейс ввода правил. Ввод каждого правила происходит в две стадии, но вернуться на предыдущую и исправить что-то — нельзя. Приходится постоянно отменять правила и создавать их заново, либо редактировать после создания. Это раздражает.
Тем не менее, считаю, что именно модуль Hansel на данный является лучшим решением крошечного вопроса, особенно если необходимо создавать крошки по сложным правилам.
Crumbs
Модуль Crumbs возможно еще гибче Гансика, так как еще более нацелен на разработчика со всеми вытекающими. Но разобраться в его устройстве так и не удалось. И вот почему:
Это текстовое поле с непонятными строчками — и есть настройка хлебных крошек модуля Crumbs. Вообще, я такое люблю — когда можно просто набивать правила от руки на клавиатуре. Но все-таки хотелось бы, чтоб было понятно, что набивать-то надо. А инструкций никаких нет, написано — копируйте строчки, двигайте их вверх-вниз, и смотрите что будет.
Работать в таком ключе желания не возникает. Поэтому видимо придется отложить до лучших времен. Пока наш выбор — Hansel.
На этом, собственно, все.
hansel - супермодуль, таким монстрам программирования, как автор модуля, нужно памятники при жизни ставить :D
Ну или пиво поставить с успешной сдачи проекта :)
Спасибо. Ганс ты разрекламировал так, что придётся поставить его и попробовать :)
спасибо за обзор, теперь буду ставить модуль Hansel. Ибо первый уже не справляется ))
Спасибо за обзор, снёс 3 первых модуля, установил Hansel.
Теперь буду разбираться в нём...
довелось поюзать Crumbs. может он и делает своё дело, но разобраться в нём не представляется возможным
Спасибо за обзор! Пробовал почти все, кроме последних двух. Однозначно перехожу на Хансель
Пробую установить модуль Hansel. Hansel Domain не активен так как нет модуля: Domain (отсутствует). Такой модуль найти не могу ...
Domain - наверное вот это: http://drupal.org/project/domain
Но только зачем Hansel Domain, если Domain не используется? У меня, например, только Hansel и Hansel Taxonomy включены.
Но только зачем Hansel Domain, если Domain не используется? У меня, например, только Hansel и Hansel Taxonomy включены.
Просто месяц плотно занимаюсь Друпалом, хочу сделать хороший и функциональный сайт, думаю неделю По Гуглу и Яндексу по вопросом модулей Ваш сайт на первом месте, по этому повторно Вас терроризировал. Разобрался с этим модулем.
Спасибо.
Очень удобно пользоваться утилитой drush, которая при попытке включить модуль с неудовлетворёнными зависимостями покажет их названия, которые тут же можно поставить (drush dl module && drush en module). При следующей попытке все зависимости включатся автоматически, вместе с модулем. Это всё минуя тяжёлые веб-интерфейсы, где придётся все нудно включать несколько раз.
* пост проплачен девелоперами drush =))
подскажите как в результаты поиска выводить хлебные крошки для найденных файлов. Пока получилось только реализовать главная/имя ноды или главная/имя предшествующей градации. а весь путь не отображается
Не знаю, не сталкивался.
А, случаем, не подскажите как в Hansel`е сформировать крошки для родительского пункта меню?
Не понимаю вопроса в такой формулировке. Любой странице, которая выбирается правилами Hansel, можно сформировать крошки.
Например. У меню 2 уровня
Основное меню
- Уровень один
- Уровень два
Нужно с помощью Hansel сформировать крошки для родительского пункта – Уровень один. То есть должны получиться такие хлебные крошки
Главная >> Уровень один >> Уровень два
Вот, уже лучше.
Я бы делал через ЧПУ, но вообще Гансик поддерживает токены, в том числе там есть [menu].
А не подскажете, какой из перечисленных модулей лучше подойдёт для встроенного модуля Blog? Я уже попробовала три модуля - не получается сделать, как я хочу: Главная - Блоги - Блог пользователя... Menu Breadcrumb для всех пользователей пишет "Главная - Мой блог", Taxonomy Breadcrumb вообще с меню не работает, а в Custom Breadcrumbs я не понимаю, куда вводить имя конкретного пользователя (хотя и не верю, что это делается вручную для каждого пользователя). Заранее благодарю.
Ольга, для всех крошечных задач, решение которых вам кажется нетривиальным, отлично подходит Гансик :)
Если не получится, напишите — помогу.
Спасибо за ответ. Только оказалось, что моя проблема ещё глубже, чем я думала. У меня стоит Taxonomy Breadcrumbs. Видимо, он и мешает сформироваться правильным хлебным крошкам в меню. Попробовала на чистом сайте - крошки работают без всякого дополнительного модуля. А Hansel, как я прочитала, не дружит с Taxonomy Breadcrumbs.
Установила Hansel на чистом сайте. С ходу в нём не разобраться, придётся читать инструкцию.
А без никак нельзя обойтись в моём случае?
Ну поскольку без Taxonomy Breadcrumbs крошки в блогах работают как надо — видимо все зависит от того, что вам Taxonomy Breadcrumbs делает. В Гансике все можно воссоздать. Бояться не нужно, это не так трудно, как может показаться :)
Спасибо! Если не разберусь, приду к Вам за помощью. :)
Роман, вернулась к Вам за помощью. Прочитала файл, но не получила представления, как работать с модулем. Методом тыка мне удалось создать несколько правил, но хлебные крошки так и не появились.
Хорошо, Оля, давайте я вам помогу. Воспользуемся более оперативным средством связи. Если аська или скайп — напишите мне ваш адрес в форму обратной связи, я постучу. Если фейсбук — стучите сюда.
Спасибо! Hansel просто сказка.



















Использую Menu Breadcrumb, не знал что Menu Trails тоже, но с маленьким плюсиком.
Спасибо было интересно почитать.
Hansel посмотрю (вдруг появятся задачи по сложнее)!