web-dev-qa-db-fra.com

Créer un nouveau menu dans Drupal 8 par programme

Est-il possible de créer un nouveau menu dans Drupal 8 par programmation en utilisant un module personnalisé?

Je crée un module personnalisé et l'une des exigences du module est qu'il crée un nouveau menu sous Structure > Menus.

La plupart des didacticiels expliquent comment ajouter un lien de menu à un menu existant. Par exemple, Création de liens de men , Ajouter un lien de men , etc.

En bref, j'ai besoin d'un moyen pour que le résultat final soit un menu sous "User Account Menu" dans l'image, puis je peux y ajouter mes liens de menu, en utilisant les didacticiels ci-dessus.

Merci.

enter image description here

8
Akshay Khot

Les menus sont la configuration; vous pouvez en inclure un dans votre module en ajoutant un fichier nommé <module_root>/config/install/system.menu.foo.yml à votre base de code (en remplaçant foo par l'ID de menu souhaité).

Le contenu du fichier sera quelque chose de similaire à l'une des mêmes configurations installées par le module système principal, par ex.

langcode: en
status: true
dependencies: {  }
id: foo
label: 'Foo menu'
description: 'Links related to foo'
locked: true

Lorsque le module est (ré) installé, le menu sera créé.

Vous pouvez également utiliser techniquement l'API dans un hook_install ou similaire:

$menu = \Drupal::entityTypeManager()->getStorage('menu')
  ->create([
    'langcode' => 'en',
    'status' => TRUE,
    ...
  ]);

mais la méthode yml est un peu plus propre, et je pense que c'est recommandé (je ne peux pas trouver de source pour l'instant).

En passant, les menus sont classés par ordre alphabétique. Je ne pense pas qu'il serait simple de changer cela, les menus n'ont pas de notion de poids les uns par rapport aux autres, vous devriez donc le caler d'une manière ou d'une autre si vous avez vraiment besoin de votre menu au bas de la liste.

6
Clive