Vous êtes ici

Premier module Hello World : Ajouter un lien dans le menu du site

Vous avez 30 secondes ?
S'abonner au flux d'actualités
Rubrique: 
Technique
Difficultée: 
Facile
Nous avons créé notre premier module Hello World et disposons à présent d'une page à l'adresse /hello_world. C'est bien ! Mais à moins que vos visiteurs puissent deviner l'URL de vos pages, il faudra créer un lien vers cette page dans le menu.
 
Dans cette dernière partie sur la création de notre premier module Drupal 8 : Hello World, nous allons ajouter un lien dans le menu du site pour accéder à notre nouvelle page hello_world.
 
Pour ajouter un lien dans un des menus de Drupal 8, nous allons utiliser le nouveau Menu API de Drupal 8 et créer un fichier nommé module_name.links.menu.yml placé à la racine de notre module.
 
Les anciens développeurs Drupal auront pour réflexe d'utiliser hook_menu(). Ceux ayant suivis les premières étapes de Drupal 8 voudront utiliser hook_menu_link_defaults(). Ces deux approches ont désormais changé. Plus besoin de code procédural, seule la configuration YAML est désormais nécessaire pour créer notre nouveau lien de menu.
  • Comme pour les tutoriaux précédents, commencez par créer un fichier nommé hello_world.links.menu.yml à la racine de votre module.
  • Insérez le code suivant :
hello_world.hello_world:
  title: Hello World
  description: 'Access the hello world page.'
  route_name: hello_world.hello_world
Dans ce fichier YML, vous pouvez définir l'ensemble des liens de menu de votre module les uns à la suite des autres. Chacun d'entre eux doit être dans une structure définie par plusieurs paramètres :
  • une clef unique pour le lien. Par convention et pour garantir l'unicité de cette clef, nous pourrons la choisir de la forme : nom_du_module.action_du_lien où "action du lien" représente quelque chose de logique par rapport à ce lien. Dans notre cas, le lien mène vers la page hello_world, c'est donc le nom logique de notre action.
    • title (obligatoire) : définit le titre du lien dans le menu.
    • description (optionnel) : permet d'ajouter une description au lien (dans la balise title).
    • route_name (obligatoire) : indique quelle route appeler lors du clic sur ce lien. Rappelez-vous que le concept de route est nouveau dans Drupal 8, voyez ici comment créer une route basique.
La convention de choix de nom pour notre lien est la même que celle pour le choix du nom de notre route. En toute logique nous retrouvons donc dans notre exemple un nom de route identique à celui de notre lien. C'est logique mais pas obligatoire.
 
Par cette configuration, notre lien sera automatiquement ajouté au menu Tools de Drupal 8 en tant qu'élément classique de menu. Ceci car :
  • la clef optionnelle menu_name n'ayant pas été précisée, elle est automatiquement assignée au menu Tools.
  • la clef optionnelle parent n'ayant pas été précisée, le lien est automatiquement affecté à la racine du menu et non comme enfant d'un autre lien.
  • la clef optionnelle weight n'ayant pas été précisée, le lien sera placé parmi les autres par ordre alphabétique.
Si vous aviez déjà activé le module dans les articles précédents, n'oubliez pas de vider les caches (à l'adresse : /admin/config/development/performance).
Le résultat est l'ajout de notre lien dans le menu Tools de Drupal 8.
 
Notre lien est ajouté dans le menu Tools de Drupal 8.
 
En résumé...
 
Un lien se crée via l'usage du Menu API de Drupal 8. Grâce à cette API votre lien se définit simplement via une configuration YAML dans un fichier nommé $module.links.menu.yml placé à la racine du module.
Fichier(s) joint(s): 
Notation: 
Average: 4.2 (5 votes)
Vous avez aimé: 

Commentaires

Tout à fait : le "?>" à la fin des fichiers (que ce soit le .module, ou les .inc) est déconseillé par les conventions Drupal. Malheureusement dans mon article, c'est le filtre Geishi qui me l'ajoute automatiquement du moment que le code est en PHP. Je n'ai pas encore regardé comment désactiver cela (le bug des commentaires était prioritaire !).
24
This post is useful!
This post is useless!
-13

Bonjour,
En effet, ceci a encore changé depuis la dernière mise à jour de ce tutoriel. Je vous remercie de le faire remarquer. Je ferais une passe sur l'ensemble des tutos déjà publiés lors de la sortie de la première bêta.
Dom.
Changement des nom des YML pour les liens :
This post is useful!
This post is useless!