it-swarm.com.de

Rendermenü in twig Vorlage

Im admin/structure/menu Ich habe ein Menü erstellt. Ist es möglich, dieses Menü zu rendern (mit Maschinenname: my_menu) in einer twig Vorlage? Irgendwie wie:

{{ my_menu }}
7
meez

Menü vereinfachen klingt wie das, was Sie wollen.

Das simplify_menu-Modul verwendet eine TwigExtension, um Zugriff auf das Rup-Array des Hauptmenüs von Drupal (oder eines anderen Menüs) zu erhalten, sodass auf es über eine Vorlage twig) zugegriffen werden kann Die vollständige Kontrolle über das Render-Array des Menüs in einer Vorlage twig) ist die Möglichkeit, das Markup für Ihre Menüs anzupassen, um sicherzustellen, dass sie zugänglich sind und den Standards entsprechen.

// 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>

Andernfalls gibt es eine Handvoll menu-* twig Vorlagen, die beim Rendern eines Menüs aus einem Block verwendet werden sollen. Aktivieren Sie Ihr Twig Debugging-Einstellungen) == in Drupal, um zu sehen, was die Vorschläge sind.

Sie müssen jedoch ziemlich gute Kenntnisse über Menü-Themen haben, um sie genau richtig zu machen (wie das Behandeln von untergeordneten Elementen und nicht die flache Menüstruktur, wie im obigen Beispiel gezeigt) - das heißt, ich würde mich daran halten, einen Block das Menü in a rendern zu lassen gegebene Region. Überprüfen Sie dann menu.html.twig In Ihrem Basisthema (entweder edel oder stabil), um eine Vorstellung davon zu erhalten, welche Optionen Sie haben, wenn Sie das Markup ändern möchten.

Stellen Sie sicher, dass Sie einen anständigen twig Vorlagenvorschlag und nicht nur menu.html.twig Verwenden - da dies jedes Menü betrifft, das von Drupal gerendert wird ... es ist die Standardvorlage.

Ich würde auch vorschlagen, Menu Block zu installieren, da dies zusätzliche Flexibilität beim Theming und twig Dateivorschläge) bietet. Außerdem werden Bäume eines Menüs gerendert (z. B. abschnittsbasierte Navigation) in einer Seitenleiste) eine Brise.

7
Kevin

Aktivieren Sie das Modul simplify_menu und fügen Sie den folgenden Code zu Ihrer page.html.twig oder einer anderen twig - Vorlage hinzu, in der Sie Ihr Menü rendern möchten:

<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>

das 'main' ist die Menü-ID, die Sie finden können, indem Sie den Mauszeiger über die Schaltfläche zum Bearbeiten des Menüs auf der Menüseite bewegen und die unten im Browser angezeigte URL anzeigen.

3
Mario Hernandez

Für diejenigen, die noch nach einem alternativen Ansatz suchen, empfehle ich die Verwendung des Moduls Twig Tweak als stabileren und globaleren Anwendungsfall. Schauen Sie sich dessen Spickzettel an

Zum Rendern des Menüs über twig Tweak) können Sie einfach Folgendes tun:

{# 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