Makina Blog
10 modules pour gérer le fil d'Ariane (breadcrumb) en Drupal
Dans tous les derniers projets Drupal auxquels j'ai participé, le fil d'Ariane s'est retrouvé à un moment ou à un autre dans les problèmes à régler.
Le problème
Contrairement au CMS Plone, qui comporte une hiérarchie (dans laquelle tous les contenus sont placés et qui sert au fil d'Ariane) mais permet de masquer certains contenus dans la navigation (l'équivalent du "menu" Drupal), Drupal n'a pas de hiérarchie : tous les contenus sont au même niveau. Seuls les menus introduisent une notion hiérarchique (virtuelle) entre les contenus.
Deux points notamment posent des problèmes :
- Drupal ne se base que sur le menu principal ("main menu") pour déterminer le fil d'Ariane.
- Il est rarement envisageable sur un site de positionner l'ensemble des contenus dans le menu, sous peine de surcharger celui-ci.
Nous allons voir dans cet article les différentes façons de traiter ces points, pour plusieurs profils d'utilisateurs Drupal.
Vous êtes un "site builder"
Il existe de très nombreux modules dédiés à la gestion du fil d'Ariane (prouvant si il était besoin que c'est un problème récurrent), nous allons traiter les principaux (et les plus maintenus), du plus simple au plus complexe.
Menu Breadcrumb
Ce petit module résout le premier de nos 2 problèmes en étendant la détermination du fil d'Ariane à tous les menus du site, augmentant la couverture "correcte" du fil d'Ariane standard de Drupal.
Je l'utilise finalement assez peu, dans la mesure où les menus additionnels que je créé (pied de page, par exemple), ne comportent souvent qu'un seul niveau et le fil d'Ariane est alors réduit à sa plus simple expression (Accueil >> contenu), géré nativement par Drupal. Il est cependant très utilisé.
Menu Position
Ce module très utile résout le deuxième problème en proposant de positionner virtuellement des contenus dans le menu automatiquement suivant leur type de contenu ou leur taxonomie (par exemple, placer toutes les actualités sous l'entrée de menu "Actualités"). Ces contenus n'apparaitront pas dans le menu, mais le fil d'Ariane sera basé sur cette position virtuelle. Pour les sites simples / moyennement simples, c'est la solution parfaite pour combler le manque de hiérarchie de Drupal, nous l'avons déjà souvent utilisé.
Hansel breadcrumbs
Fonctionne selon des règles créés dynamiquement par le webmaster (en mode SI-ALORS-SINON). Relativement puissant, pas toujours très facile à mettre en place. A essayer parce qu'il va un peu plus loin que Menu Position parfois.
Breadcrumbs by Path & Breadcrumb Manager & Easy Breadcrumb
Tous ces modules fonctionnent de la même façon, en cherchant à générer le fil d'Ariane complètement indépendamment du menu, en se basant sur vos URLs. Cette approche intéressante conditionne le site à n'avoir que des URLs "hackables", ce qui est très intéressant, mais peut être relativement contraignant (et surtout elle contraint l'architecture du site uniquement pour obtenir un fil d'Ariane utilisable). Je n'ai utilisé aucun de ces modules, des règles spécifiques m'ayant toujours obligé à utiliser plutôt les modules suivants.
Custom Breadcrumbs & Path Breadcrumbs
Ces deux modules permettent théoriquement de configurer le fil d'Ariane de n'importe quelle page, en fonction de son URL. Contrairement à tous les modules précédents, ils demandent plus de configuration dans la mesure où, si les traitements par lots sont possibles, on réserve souvent l'usage de ces modules à une configuration très fine du fil d'Ariane, page par page, pour les webmasters du site.
Crumbs
Autant le dire tout de suite, Crumbs est mon préféré. Pourquoi ? Parce qu'il permet de définir un ordre de règles permettant de générer le fil d'Ariane, reprenant, par exemple, le menu auquel appartient la page, ou l'URL (rendant ainsi les premiers modules de cette liste inutiles), mais également d'autres comme les termes de taxonomie du contenu, le forum, utiliser des champs du contenu, …). Bien configuré, vous pouvez être à peu près sûrs que Drupal trouvera une règle à utiliser pour générer le fil d'Ariane d'une façon cohérente.
Attention, cependant, l'interface de ce module n'est pas évidente à utiliser, donc à ne pas mettre entre les mains d'un utilisateur avec un profil débutant en Drupal.
Vous êtes un développeur
Note : les thémeurs sont pour cet article considérés comme des développeurs (contrairement à la distinction en vigueur dans la communauté Drupal), ils surchargeront simplement tout le fil d'Ariane dans la fonction theme_breadcrumb() pour obtenir le résultat souhaité.
Menu Position
Menu Position comporte une API, vous permettant d'ajouter des greffons et d'ajouter donc d'éventuelles règles manquantes.
Crumbs
Crumbs comporte également une API pour ajouter de nouvelles règles.
Pourquoi un module, je suis un codeur !
Si vous êtes un développeur, il n'y à priori aucune raison d'utiliser un module pour le fil d'Ariane (à part si le client doit agir dessus) : il y a, en gros, 2 niveaux pour intervenir : dans un module, ou dans la couche de thème (c'est moins propre, la couche de thème n'étant normalement là que pour éventuellement changer le séparateur du fil d'Ariane, et uniquement cela).
Pour intervenir dans un module, et modifier le fil d'Ariane, en s'inspirant du module Menu position, on voit qu'il est possible d'utiliser le hook_delivery_callback_alter() (dont le principal avantage est d'être appelé "au bon moment") et d'utiliser à l'intérieur la fonction menu_tree_set_path() (pour indiquer un parent pour certaines de vos pages). Il est également possible d'utiliser directement le hook_menu_breadcrumb_alter() pour réaliser des opérations.
Vous pouvez consulter toute une explication ainsi que des bouts de code sur ce lien.
Comment choisir entre tous ces modules ?
Le choix dépend surtout de 2 choses : le besoin (pour certains, les fils d'Ariane standards de Drupal suffiront, inutile de charger le site pour rien), et le profil du webmaster du site (pour des utilisateurs qui comprennent ce qu'ils font avec fil d'Ariane, et maitrisent l'interface, leur proposer Custom Breadcrumbs ou un équivalent n'est pas un problème). Chaque besoin peut être couvert par une réponse adéquate.
Ma stratégie est à peu près : rien si aucune demande n'est faite, Crumbs dans la plupart des cas, Custom Breadcrumbs ou Path Breadcrumbs si le client doit pouvoir personnaliser le fil d'Ariane lui-même sur certaines pages.
En Bonus
Un dernier point qui pose problème est que beaucoup de "starter themes" (Zen, Omega, Bootstrap, …) font plus que modifier le séparateur du thème et agissent par exemple sur l'affichage en sus du titre de la page (avec ou sans lien). Par exemple, la configuration du thème Bootstrap par défaut rentre en conflit avec la plupart des modules (Custom Breadcrumbs, Crumbs, …), heureusement, le thème indique dans ses réglages ce qu'il faut indiquer en cas de conflit avec un module s'occupant déjà du fil d'Ariane.
Et Drupal 8, dans tout ça ?
Drupal 8 change deux choses au niveau du fil d'Ariane :
- Le fil d'Ariane est désormais un bloc plaçable où vous le souhaitez dans l'interface ;
- Le fil d'Ariane est désormais un service, par défaut la classe BreadcrumbManager qui transmettra la construction du fil d'Ariane a des builders, que vous pourrez implémenter dans l'un de vos modules. Le cœur en contient quelques uns qui pourront vous servir d'inspiration.
Voilà, vous n'avez plus d'excuse pour ne pas savoir gérer vos fils d'Ariane dans Drupal.
Actualités en lien
Migration d'un site Drupal 7 en Drupal 11
Trucs, astuces et "bouts" de code pour migrer votre site web de Drupal 7 à Drupal 11. Compte-rendu d'une conférence donnée au Drupalcamp Rennes 2024.
Makina Corpus, partenaire du DrupalCamp 2024
Nous sommes fiers d’annoncer que Makina Corpus est le sponsor du DrupalCamp à Rennes. Notre expert vous y propose une conférence « migrer de Drupal 7 à Drupal 10 ».