web-dev-qa-db-fra.com

Menu de rendu dans le modèle twig

Dans admin/structure/menu J'ai créé un menu. Est-il possible de rendre ce menu (avec le nom de la machine: my_menu) dans un modèle twig??)

{{ my_menu }}
7
meez

Le menu Simplifier ressemble à ce que vous souhaitez.

Le module simplify_menu utilise une TwigExtension pour accéder au menu principal de Drupal (ou à tout autre menu d'ailleurs), rendre le tableau afin qu'il soit accessible à partir d'un modèle twig. Parmi les nombreux avantages d'avoir le contrôle total du tableau de rendu du menu dans un modèle twig est la possibilité de personnaliser le balisage de vos menus pour vous assurer qu'ils sont accessibles et conformes aux normes.

// Get menu items
{% set items = simplify_menu('main') %}

// Iterate menu tree
<ul>
  {% for menu_item in items.menu_tree %}
    <li class="{{ item_class }} navigation__item">
      <a href="{{ menu_item.url }}" class="{{ link_class }}">{{ menu_item.text }}</a>
    </li>
  {% endfor %}
</ul>

Sinon, il y a une poignée de menu-* twig modèles à utiliser lors du rendu d'un menu à partir d'un bloc. Activez vos Twig paramètres de débogage dans Drupal pour voir quelles sont les suggestions.

Cependant, vous devez avoir une assez bonne connaissance de la thématique des menus pour obtenir exactement ce qu'il faut (comme la gestion des éléments enfants et non la structure des menus plats comme l'exemple ci-dessus) - cela dit, je m'en tiendrai à laisser un bloc rendre le menu dans un région donnée. Ensuite, inspectez menu.html.twig à partir de votre thème de base (classe ou stable) pour avoir une idée de vos options si vous souhaitez modifier le balisage.

Assurez-vous d'utiliser une bonne suggestion de modèle twig et pas seulement menu.html.twig - car cela affectera tous les menus rendus par Drupal ... c'est le modèle par défaut.

Je suggérerais également d'installer le bloc de menu car cela offrirait une flexibilité supplémentaire dans le thème et twig suggestions de fichiers. Il a également rend le rendu des arbres d'un menu (comme la navigation basée sur une section dans une barre latérale) un jeu d'enfant.

7
Kevin

Activez le module simplify_menu, puis ajoutez le code ci-dessous à votre page.html.twig ou à un autre modèle twig où vous souhaitez rendre votre menu:

<nav class="navigation__main" role="navigation">
  {% set item_class = 'navigation__item' %}
  {% set link_class = 'navigation__link' %}
  <ul class="navigation__items">
    {% set items = simplify_menu('main') %}
      {% for menu_item in items.menu_tree %}
          <li class="{{ item_class }}"><a href="{{ menu_item.url }}" class="{{ link_class }}">{{ menu_item.text }}</a></li>
      {% endfor %}
  </ul>
</nav>

le 'main' est l'identifiant du menu que vous pouvez trouver en survolant le bouton d'édition du menu dans la page des menus et en regardant l'url affichée en bas du navigateur.

3
Mario Hernandez

Pour ceux qui recherchent encore une approche alternative, je suggère d'utiliser le module Twig Tweak comme cas d'utilisation plus stable et plus global, consultez son aide-mémoire

Pour rendre le menu via twig Tweak, vous pouvez simplement faire ce qui suit:

{# Expand menu items to display the entire menu tree. #}    
{{ drupal_menu('menu_machine_name') }}

{# Specify menu level and depth. #}
{{ drupal_menu('admin', 2, 3) }}
3
Sohail