Время от времени на Друпал.ру появляются вопросы о работе с хлебными крошками. О них в настоящей заметке и пойдет речь — о хлебных крошках (они же 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.
На этом, собственно, все.