Makina Blog
Mon Top 30 des modules Drupal 8
Transcription d'une conférence donnée au Drupalcamp Paris 2019
Les fonctionnalités d'un site Drupal reposent en grande partie sur les modules issus de la communauté qui composent ce site. Ce qui prend du temps aux débutants en Drupal est de connaître les bons modules à utiliser, ou ceux qui existent depuis longtemps dans la communauté pour assurer des fonctionnalités classiques.
L'idée derrière cette conférence était de présenter une sélection de modules que j'estime soit nécessaires pour les fonctionnalités basiques d'un site, soit ceux qui, s'ils ne sont pas nécessaires sur tous les sites, reviennent fréquemment dans les conversations à un moment ou à un autre lors de la construction de sites Drupal complexes.
On pourrait bien sûr se contenter de passer en revue le top des modules en fonction de leur utilisation. Mais je préfère donner une vision subjective (et argumentée) de ceux qui me paraissent importants.
Ils seront présentés ici en tentant de les regrouper par thématique. L'ensemble des modules présentés est compatible avec Drupal 8.
Merci à la communauté !
Comme à chaque fois dans ce genre de liste, les premiers modules viennent très vite, et une fois à 20-25, on est bloqués. J'ai décidé alors de faire appel au pouvoir de la communauté :
Et elle a répondu présente. Merci donc à toutes celles et ceux qui ont répondu à ce tweet.
SEO
Celles et ceux qui me lisent régulièrement savent que le SEO est un peu ma marotte, et j'ai notamment déjà écrit sur le SEO avec Drupal. Je commence par cette section parce que ces modules se retrouvent installés sur la plupart des sites publics (j'exclue donc les extra / intranets), et que donc j'y pense souvent en premier.
Je considère qu'une configuration basique permettant un référencement efficace des sites est la suivante :
- Pathauto pour la réécriture des URLs ;
- Metatag pour la génération de balises META, dans sa configuration initiale ;
- Redirect dans sa configuration initialie.
Bien sûr, avec ces configurations basiques, vous n'obtiendrez pas un référencement optimisé. Néanmoins, par rapport à une grande partie des sites présents sur les internets, c'est le meilleur ratio temps passé / efficacité du résultat que vous pouvez obtenir.
Pathauto
Ce module très connu de l'éco-système permet de réécrire automatiquement les URLs. Depuis sa version Drupal 8, il ne comporte plus de configuration initiale, c'est-à-dire que directement après son installation, vos URLs ne seront pas réécrites automatiquement.
Il faut d'abord, pour chaque type de contenu (ou de façon générique), créer une règle ("Configuration" / "URL Aliases" / "Patterns"). Bien sûr, ces règles dépendent de votre site, mais si vous manquez d'inspiration, je peux vous recommander au moins ces deux règles applicables sur beaucoup de sites :
- D'abord, une règle qui s'appliquera à tous les types de contenus faute de règle qui la surcharge, réécrivant les URLs avec le motif suivant : [node:content-type:machine-name]/[node:title]. Ainsi, pour un type de contenu "Actualités", de nom machine "actualités", les contenus auront pour URL "/actualités/titre-de-l-actualite". Pour ensuite avoir un site cohérent, je vous recommende alors d'utiliser comme page /actualités une vue (du module du cœur Views) qui liste les dernières actualités ;
- Pour un type de contenu "page" générique (servant par exemple aux pages type "Mentions légales", "À propos"…), vous ne savez souvent pas à l'avance dans quelle arborescence il se placera. Comme le fil d'ariane en Drupal 8 est basé sur l'URL, on va essayer d'avoir les URLs qui reprennent la hiérarchie de menu, et je vous propose alors d'utiliser comme règle Pathauto pour les pages : [node:menu-link:parents:join-path]/[node:title].
Metatag
Ici, la configuration à l'installation du module ("Configuration" / "Metatag") est suffisante pour un référencement basique. Par contre, il reste deux choses à faire pour une utilisation efficace du module au quotidien :
- D'abord, activer quelques sous-modules pour l'intégration aux réseaux sociaux, notamment Metatag Opengraph pour l'intégration à Facebook (qui se base sur les balises META opengraph pour générer un aperçu du contenu lors d'un partage sur Facebook) et Metatag Twitter pour la génération de Twitter Cards, Twitter utilisant ses balises spécifiques. Vous n'avez pas besoin du module Metatag Facebook dans la plupart des cas ;
- Pour permettre à chaque contenu de surcharger les règles par défaut proposées par le module (suffisantes pour un fonctionnement basique, mais qu'une équipe de rédaction éclairée sur le référencement souhaitera surcharger), vous devez, pour chaque type de contenu, ajouter un champ Metatag ("Structure" / "Content Types" / … / "Manage fields" / "Add field" / "Meta tags") :
Redirect
Ce module permet de créer ses propres redirections sur un site web (par exemple, des URLs raccourcies). Si je n'utilise pas si souvent ce module pour sa fonctionnalité principale, j'aime par contre sa configuration initiale parce qu'elle introduit une certaine robustesse au changement.
En effet, vous allez souvent baser vos modèles d'URLs (en utilisant Pathauto comme vu plus haut) sur le titre d'une page. Or, la configuration à l'installation de pathauto ("Configuration" / "URL Aliases" / "Settings") est prévue pour mettre à jour la réécriture à chaque changement de titre, pouvant amener certaines URLs à disparaître :
On pourrait bien sûr choisir de ne pas changer l'URL (première option), mais cette solution ne protège que des mises à jour automatiques d'URLs, et pas des changements manuels effectués par l'équipe éditoriale.
En utilisant les fonctionnalités de base du module Redirect, on introduit cette robustesse grâce au réglage ("Configuration" / "URL redirects" / "Settings") "Créer automatiquement une redirection quand des alias d'URLs changent" :
Et voilà, vous disposez désormais d'une configuration efficace pour le référencement. À vous maintenant de mettre en place de véritables stratégies pour aller plus loin !
Les petits utilitaires
Ici, nous allons parler de petits modules que l'on finit toujours plus ou moins par installer, parce qu'ils rendent un service que quasiment tous les clients demandent, ou s'attendent à retrouver dans un CMS :
- Diff pour faire la différence entre 2 versions d'un contenu ;
- Honeypot pour assurer un filtre antispam basique sur un site ;
- Scheduler pour permettre la (dé)publication différée d'un contenu.
Diff
Ce petit module apporte une fonctionnalité qui je trouve manque au cœur Drupal : la possibilité de comparer 2 versions ("révisions" la terminologie Drupal) d'un contenu.
Dès qu'un client souhaite la mise en place d'un workflow éditorial, il s'attend à trouver ce module, j'ai donc tendance à l'installer même sans demande explicite du client, parce que c'est une fonctionnalité "naturelle" d'un CMS.
La modification de l'interface est très faible, mais la fonctionnalité apportée très utile :
- Sans Diff :
- Avec Diff :
Honeypot
Honeypot ajoute à tous vos formulaires sélectionnés un champ masqué (appelé comme vous le souhaitez, "URL" par défaut). Comme le champ est masqué, les humains ne le remplissent pas, mais les robots, oui. Et la soumission du formulaire est alors refusée.
Il permet également d'ajouter un temps "minimum" de remplissage du formulaire : si le formulaire est soumis en moins de 2 secondes, la soumission est refusée également.
S'il n'arrête pas tous les spams, il en stoppe quand même une bonne partie, avec le net avantage de ne pas provoquer d'opérations supplémentaires pour les humains, ni d'entraîner les modèles d'intelligence artificielle de Google (coucou Recaptcha).
J'ajoute cependant que Recaptcha v3 (potentiellement transparent pour les utilisateurs) est en cours d'implémentation dans le module Recaptcha, et sera probablement bientôt la solution que je recommenderai pour ce besoin. Il semble de toute façon que Recaptcha soit la solution la plus efficace :
Scheduler
On sous-estime le nombre de clients qui souhaitent planifier la publication / dépublication de leurs contenus. Il semble que cela coïncide notamment avec le nombre de gens qui souhaitent parfois prendre des congés (étonnant !).
C'est donc ce qu'ajoute ce petit module. S'il est relativement connu dans le monde Drupal (il est là depuis longtemps), il n'est aujourd'hui plus si utilisé car :
- il n'est pas encore compatible avec le module cœur de workflow éditorial (même si des développements sont en cours pour corriger cela). Or les workflows sont de plus en plus présents sur les sites ;
- l'utilisation de widgets HTML 5 des navigateurs moderne semble provoquer plusieurs soucis (même si là aussi une correction sera probablement disponible).
Il existe (malheureusement) de nombreuses tentatives pour remplacer ce module notamment à cause du premier point : les modules "Scheduled Transitions", "Scheduled Updates", "Scheduled Publish" existent tous, tous avec des degrés de finitions et des ergonomie diverses. Cependant ils semblent peu utilisés :
Scheduler reste en effet le module le plus souvent utilisé pour réaliser cette fonctionnalité.
La recherche
Le moteur de recherche du cœur de Drupal est… disons très limité.
Heureusement, une suite de modules vient pallier ses défauts :
- Search API est le point de départ de toute une suite de modules fournissant des fonctionnalités supplémentaires à la recherche ;
- Facets permet de réaliser la demande habituelle des interfaces de recherches riches : des facettes ;-)
Search API
Search API augmente les capacités de recherche du cœur de Drupal en permettant un contrôle fin sur les données indexées. Fournissant également une interface pour de nombreux moteurs externes (Solr, Elasticsearch…), on peut tout à fait l'utiliser directement avec la base de données comme index, tout en conservant les possibilités supplémentaires offertes :
- filtre sur les contenus indexés ;
- suppression de mots ;
- priorisation de certains champs pour la pertinence du résultat ;
- intégration de modules supplémentaires (comme Search API Autocomplete) ;
- De très nombreuses possibilités de traitement de données :
Facets
Ici, pas grand chose à en dire, sinon que les blocs de facettes sont assez paramétrables, mais que vous pouvez tout de même vous retrouver devant une fonctionnalité assez pénible à faire, donc prototypez avec le module pour voir ce que Drupal fait nativement avant d'accepter n'importe quelle demande client !
Droits d'accès
Si les droits Drupal offrent de nombreuses possibilités, en utilisant uniquement le cœur, il est parfois impossible de réaliser ce que l'on souhaite. Il existe heureusement de nombreux modules pour augmenter les possibilités de Drupal :
Workbench Access
Workbench Access, initialement développé par une société réalisant des sites de musées et d'universités, permet un contrôle de droits d'accès éditorial par rubrique ("section" dans le vocabulaire du module).
Nous avons déjà parlé de ce module dans notre article sur la pertinence de Drupal 8 pour les sites d'universités, je ne reviendrais donc pas sur sa configuration.
C'est le module idéal pour couvrir ce besoin.
Role Delegation
Si les permissions de Drupal sont une force du CMS, et notamment leur granularité, il reste quelques domaines où on souhaiterait toujours pouvoir faire plus fin, et la gestion des utilisateurs en est un : on souhaite parfois pouvoir permettre à certains profils d'attribuer certains rôles (notamment pour les responsables d'équipe) sans leur donner l'autorisation complète d'administrer les utilisateurs ou les permissions.
C'est cette niche (tout de même relativement courante) que couvre Role Delegation : il rajoute un onglet "Roles" sur les profils utilisateurs permettant d'affecter de façon ciblée certains rôles à ces utilisateurs :
Attention à bien donner la permission de voir les profils utilisateurs aux utilisateurs à qui vous souhaitez déléguer la gestion de certains rôles.
Permissions by field
Les versions précédentes de Drupal permettaient d'utiliser le module Content Access pour un contrôle d'accès par rôle sur la visualisation / édition / suppression de contenus d'un contenu donné (et en ajoutant le module ACL, on pouvait même contrôler ces droits par utilisateur). Mais ce module n'est pas fonctionnel en Drupal 8.
Le meilleur module que j'ai trouvé pour combler ce vide est Permissions by field. Son interface est plus complexe, mais permet également beaucoup plus de choses : le contrôle d'accès à un contenu est désormais configuré selon la valeur d'un champ, qui peut contenir un rôle, imitant Content Access, mais également bien plus.
En plus, le mainteneur est français (coucou Flocondetoile), et il est donc facilement accessible pour nous en cas de soucis.
Rédaction de contenu
Il existe de nombreux modules liés à la rédaction de contenu, mais je n'en ai ici sélectionnés que deux, qui me paraissent relever des besoins les plus courants :
Content locking (anti-concurrent editing)
Content Lock répond à une problématique d'édition concurrente de contenu, en empêchant un utilisateur de modifier un contenu actuellement en cours d'édition par un autre utilisateur. Cette fonctionnalité courante dans certains CMS peut donc sembler naturelle pour des utilisateurs qui passent à Drupal :
Linkit
Si les champs "Entity Reference" permettent de lier deux entités entre elles, insérer éditorialement un lien dans un éditeur de texte riche est plus complexe, notamment parce qu'on ne sait pas à l'avance comment le site sera utilisé (nom de domaine qui change entre pré-production et production, possible préfixe de langue…).
Linkit vient combler ce vide en permettant, après création d'un profil ("Configuration" / "Content Authoring" / "Linkit" / "Add profile"), et ajout dans un format de texte ("Configuration" / "Content Authoring" / "Text formats and editors"), de permettre une recherche sur le titre d'entité :
On aimerait ne pas en avoir besoin
La couverture fonctionnelle des modules de la communauté est considérable. Et s'il y a certains modules qu'on souhaiterait parfois ne pas avoir à utiliser, on est tout de même parfois ravis qu'ils existent :
Password Policy
Ce module permet, comme son nom l'indique, de créer des politiques de mot de passe (nombre de caractères, caractères spéciaux…). Il permet aussi de forcer le renouvellement de mot de passe de façon périodique.
Souvent imposé par d'absurdes politiques de sécurité (le renouvellement forcé conduit souvent à une utilisation de mot de passe ciblé sur la période ("janvier2018")), on aimerait que ce module n'ait pas besoin d'exister, mais en tout cas, il couvre parfaitement le besoin.
Cookies / RGPD
Là encore, l'utilisation de ces modules est souvent imposée par une contrainte externe plus que par un réel besoin fonctionnel, ici la contrainte est juridique.
Si le bandeau cookie (parfaitement implémenté par le module Eu Cookie Compliance) n'a jamais rien apporté aux utilisateurs, le Règlement Général sur la Protection des Données a un objectif plus noble. Son implémentation courante (notamment sur les sites de presse et leurs nombreux traqueurs) laisse à désirer.
Mais le module GDPR (l'acronyme anglais correspondant au RGPD) tente de répondre aux obligations de ce règlement : identification des champs contenant des données personnelles, traçabilité des consentements des utilisateurs…
Il va devenir un module incontournable des sites désormais. Je vous invite à consulter la présentation dédiée au Drupalcamp, par Guillaume Bès.
UX
Les petits modules qui suivent servent à améliorer l'interface, deux sont dédiés aux contributeurs, et un permet d'améliorer les filtres de vues :
Inline Entity Form
J'ai longuement hésité à mettre ce module dans ce top, notamment parce que son utilité se révèle notamment sur les sites complexes, ou en tout cas avec un modèle de données complexe, dès lors que des Entity Reference entrent en jeu.
Il permet tout simplement de créer / éditer une entité à l'intérieur du formulaire d'une autre entité, permettant la création simultanée de 2 entités, et diminuant les opérations à réaliser sur les sites complexes.
J'ai fini par considérer que son utilisation par Drupal Commerce mérite à elle seule l'inclusion du module dans cette liste, comme module "à connaître".
Allowed Formats
Je n'ai personnellement jamais utilisé ce module, mais je comprends son utilité : il permet de limiter pour chaque champ texte riche les formats de texte à utiliser. Rien de plus, rien de moins.
Better Exposed Filters
L'objectif principal de Better Exposed Filters est d'améliorer les possibilités de configuration des filtres exposés de Views, pour remplacer une liste de sélection par des cases à cocher, ou des liens :
Un autre avantage de ce module est de permettre de soumettre automatiquement les filtres exposés lors de l'utilisation d'Ajax dans les vues :
À la mode
J'appelle "à la mode" des modules extrêmement populaires cette année 2019 :
Paragraphs
Paragraphs est en train de s'installer, pour Drupal 8 et en écrasant la concurrence Field Collection, comme LE module de mise en page travaillée de Drupal.
Pour tous les sites pour qui la mise en page du contenu doit être évolutive, composée de plusieurs morceaux sans savoir à l'avance comment les agencer, Paragraphs est aujourd'hui la meilleure (la seule ?) solution.
Le rêve, désormais, c'est de disposer d'une interface de contribution plus ergonomique que la situation actuelle. Et je ne suis pas le seul à le souhaiter, c'est même une énorme réflexion communautaire ! Des modules comme Paragraphs frontend ui sont une piste de réflexion, par exemple :
JSON:API
Plus qu'à la mode, l'utilisation du module JSON:API est tellement plébiscitée que le module s'apprête à rentrer dans le cœur de Drupal.
C'est aujourd'hui LA solution préconisée pour la réalisation d'un Drupal 8 découplé.
Mais attention, l'utilisation du module communautaire JSON:API seul génère une API complète sur l'ensemble des objets de Drupal et il est suggéré pour pallier ce déferlement d'endpoints d'y ajouter le module JSON:API Extras afin de contrôler plus précisément les données exposées :
Tome
Nous sommes en 2019, et JAMstack (pile Javascript / APIs / Markup) est un mot-croisillon qui est de plus en plus répandu.
Heureusement, des drupalistes ont développé un module permettant de profiter des capacités éditoriales de Drupal, tout en générant un front-end statique : Tome.
Très prometteuse, cette solution est désormais couplable à Netlify (module Tome Netlify), pour encore plus de hype.
Éco-systèmes
Ces modules sont de taille plus conséquentes que la plupart des modules cités précédemment. Ils sont loin d'être applicables à tous les sites, mais sont des réponses fonctionnelles à des problématiques relativement récurrentes, et se doivent donc d'être connus. ils ont aussi la propriété de posséder souvent des modules gravitant autour, et constituent de vraies briques de base fonctionnelles d'un site, chacun d'eux dans un contexte fonctionnel différent :
Drupal Commerce
Il n'y a pas grand chose à dire que vous ne sachiez déjà : Drupal Commerce, depuis Drupal 7, est une suite de modules permettant de construire un site e-commerce. S'appuyant sur la même philosophie que Drupal : fournir des briques de bases, et faire peu de choix pour vous, cela nécessite un peu de travail pour mettre en place un site.
Cela dit, la version Drupal 8 est (à mon sens) bien mieux que celle de Drupal 7, à la fois en terme de rapidité de mise en place, de potentiel évolutif ou de personnalisation, et de fonctionnalités disponibles dans le cœur de Drupal Commerce.
En terme de modules supplémentaire à installer, il est très courant d'installer Commerce Shipping, mais la nouveauté Drupal 8 est surtout Commerce Cart Flyout, pour une ergonomie plus actuelle :
Group
Group est l'alternative récente et à jour (en Drupal 8) du module historique Organic Groups. C'est actuellement le module référence pour toute gestion de communautés.
Il sert notamment de base à la distribution Open Social, véritable Réseau Social d'Entreprise en Drupal, à tester absolument si vous devez réaliser des projets dans ce domaine :
Feeds
Feeds, module historique de Drupal, n'est malheureusement pas vraiment abouti à l'heure actuelle en Drupal 8. Solution couteau suisse pour importer des flux RSS ou fichiers CSV dans Drupal de façon simple et rapide, même en tant que simple webmaster du site, il souffre à mon sens aujourd'hui de l'inclusion de Migrate dans le cœur de Drupal, qui permet aux développeurs de mettre en place rapidement la fonctionnalité équivalente en quelques lignes de YAML.
Il est même possible d'importer des flux RSS avec Migrate !
Si je trouve cela dommage, notamment pour les possibilités que cela offrait aux webmasters (et encore plus grâce au module Feeds Tamper), je suis depuis longtemps un adorateur de Migrate (mon deuxième module préféré ?), et étant développeur, la non-disponibilité de Feeds n'est pas vraiment un problème pour moi.
Il semble d'ailleurs qu'une interface à Migrate commence à se développer : Entity Importer reprenant la fonctionnalité de Feeds, je pense que la belle vie de ce module va s'arrêter en Drupal 8.
Et les mails, alors ?
L'envoi de courriels en texte brut est une limitation souvent insupportable dès lors qu'on veut utiliser Drupal dans un contexte de communication / marketing.
Si certains passent par un outil externe (type Mailjet / Mailchimp), il est tout de même parfois nécessaire de pouvoir envoyer des mails en HTML / avec un thème.
Pour cela, si plusieurs solutions concurrentes existaient en Drupal 7, et si c'est plus ou moins toujours le cas en Drupal 8, la communauté semble se standardiser autour de la solution principale adoptée par la communauté Symfony : Swift Mailer.
On finit toujours par les utiliser
Quels que soient les projets, certaines fonctionnalités récurrentes sont demandées, et certains modules finissent donc par revenir souvent dans la conversation :
Easy Breadcrumb
La gestion du fil d'Ariane en Drupal 8 a changé : basé auparavant sur le menu, il est désormais basé sur les URLs. Un site bien construit (voir l'utilisation de Pathauto ci-dessus). Cependant, certaines URLs techniques de Drupal occasionnent parfois des fils d'Ariane incorrects (avec des éléments répétés, par exemple).
Easy Breadcrumb est un module qui permet de corriger certaines de ces erreurs, comme par exemple les segments identiques du fil d'Ariane :
Entity Print
Entity Print vous permet de générer un PDF à partir d'une entité. Il n'y a pas grand chose de plus à en dire, mais ce besoin est tout de même assez courant pour mentionner ce module.
Quand tout va mal
Au vu de la réaction de la salle à l'évocation de ce problème, ça reste un cas courant : quand l'équipe de rédaction saisit du contenu sur le serveur de pré-production en insérant des liens (sans utiliser le module Linkit évoqué plus haut), le passage en production "casse" tous les liens non relatifs.
Pour résoudre rapidement ce problème, j'utilise régulièrement le module Pathologic, qui permet à Drupal de réécrire les liens pour que les URLs restent valides.
Mon module préféré
Les personnes de la communauté française qui me connaissent bien savent que mon module préféré est . C'est le cas depuis de nombreuses versions du logiciel, pour la complétude fonctionnelle apportée par le module (qui permet, pour moi, l'intégralité de ce à quoi s'attendent les clients quand ils demandent une fonctionnalité de création de formulaires : création de champs, export des résultats, gestion de conditions sur chaque champ, envoi de multiples courriels…).
Si l'amélioration d'interface offerte par "Form Builder" n'existe pas en Drupal 8, le module s'est agrémenté de nombreuses fonctionnalités (à la fois de mise en page, mais aussi en terme de nombre de champs proposés ou en intégrant des fonctionnalités offertes auparavant par des modules communautaires additionnels). On peut par exemple directement poster la soumission d'un formulaire vers un web-service distant.
Bref, la solution de référence pour toute implémentation de formulaire en Drupal 8. J'ai même tendance à l'utiliser pour un simple formulaire de contact (au lieu du module Contact du cœur), simplement pour son évolutivité et pour pouvoir répondre rapidement à d'éventuels besoins futurs d'un client.
Les oubliés…
Bien sûr, il est impossible de tous les citer. Je peux néanmoins parler de quelques modules dont le nom a été mentionné durant la conférence : Config Split, Ultimate Cron, LDAP & Simple LDAP.
Conclusion
Cet article ne présente qu'une sélection d'environ 30 modules. L'éco-système Drupal en comporte bien plus. À vous de les découvrir !
Formations associées
Actualités en lien
Drupal 9 : préparez-vous !
Dans quelques jours, le 3 juin 2020, aura lieu la sortie de Drupal 9 en version stable. À quels changements s’attendre ? Quel sera l’impact sur les sites développés actuellement en Drupal 8 et Drupal 7 ? Voici quelques informations qui vous permettront de mieux appréhender cet événement et d'en mesurer les impacts.
Drupal : un CMS pas comme les autres
Mais moi je l'aime, c'est pas de ma faute…
Utiliser Migrate en Drupal 8
Trucs, astuces et points d'attention pour l'import de données avec Migrate en Drupal 8.