Menü in Zweigvorlage rendern

7

In habe admin/structure/menuich ein Menü erstellt. Ist es möglich, dieses Menü (mit Maschinenname :) my_menuin einer Zweigvorlage zu rendern ? Irgendwie wie:

{{ my_menu }}
meez
quelle

Antworten:

7

Das Menü "Vereinfachen" klingt nach Ihren Wünschen.

Das simplify_menu-Modul verwendet eine TwigExtension, um Zugriff auf das Render-Array des Hauptmenüs von Drupal (oder eines anderen Menüs) zu erhalten, sodass über eine Zweigvorlage darauf zugegriffen werden kann. Zu den vielen Vorteilen der vollständigen Kontrolle über das Render-Array des Menüs in einer Zweigvorlage gehört 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 können menu-*beim Rendern eines Menüs aus einem Block eine Handvoll Zweigvorlagen verwendet werden. Aktivieren Sie Ihre Twig-Debugging-Einstellungen in Drupal, um die Vorschläge zu sehen.

Sie müssen jedoch ziemlich gute Kenntnisse über Menü-Themen haben, um sie genau richtig zu machen (wie die Behandlung von untergeordneten Elementen und nicht die flache Menüstruktur, wie das obige Beispiel zeigt) - das heißt, ich würde mich daran halten, einen Block das Menü in a rendern zu lassen gegebene Region. Überprüfen menu.html.twigSie anschließend anhand Ihres Basisthemas (entweder edel oder stabil), welche Optionen Sie haben, wenn Sie das Markup ändern möchten.

Stellen Sie sicher, dass Sie einen anständigen Vorschlag für eine Zweigvorlage verwenden und nicht nur menu.html.twig- da dies jedes Menü betrifft, das von Drupal gerendert wird ... ist dies die Standardvorlage.

Ich würde auch vorschlagen, Menu Block zu installieren, da dies zusätzliche Flexibilität bei Themen- und Zweigdateivorschlägen bietet. Außerdem wird das Rendern von Menübäumen (z. B. abschnittsbasierte Navigation in einer Seitenleiste) zum Kinderspiel.

Kevin
quelle
Vielen Dank. Der Grund, warum ich meine Frage oben gestellt habe, ist, dass ich mein Menü (mein Blockmenü) nicht in einer verschachtelten Zweigvorlage rendern kann. Siehe hier meine Frage . Vielleicht hast du die Antwort ..?
Meez
Mit "Menü vereinfachen" können Sie ein beliebiges Menü aus einer beliebigen Zweigvorlage aufrufen, wie es aussieht.
Kevin
Ich habe das Menü "Vereinfachen" installiert und aktiviert. In meiner Datei header.twig habe ich hinzugefügt, {% set items = simplify_menu('main') %}aber (in diesem Fall) das Hauptnavigationsmenü wird nicht gerendert?
Meez
Haben Sie den Rest des Beispiels befolgt? Sie müssen dies entweder auf diese Weise tun oder einen Block aufrufen, der ein Menü enthält, es rendern und eine Variable erstellen. Es ist ehrlich gesagt am besten, es dem Blocksystem zu überlassen, anstatt Menüs in andere Zweigvorlagen einzufügen, in denen sie normalerweise nicht enthalten sind.
Kevin
ok danke Wenn ich dem Rest des Beispiels folge, funktioniert es! Aber wie Sie vorschlagen, ist es besser, es dem Blocksystem zu überlassen. Wie mache ich das mit Simplify Menu? 1) In admin / structure / block habe ich das Menü in einer Region platziert und dann deaktiviert (also habe ich jetzt die Block-ID). 2) In meinem habe header.twigich versucht {{ simplify_menu('crmnavigation') }}, aber es wird nicht der Block geladen? Wissen Sie, wie ich den Block und das darin enthaltene Menü in meinem header.twigSimplify-Menü lade ?
Meez
3

Aktivieren Sie das Modul simplify_menu und fügen Sie den folgenden Code zu Ihrer page.html.twig oder einer anderen Zweigvorlage 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 das Menü - ID , die Sie mit dem Mauszeiger über das Menü der Schaltfläche Bearbeiten in den Menüs Seite und Blick auf die URL angezeigt am unteren Rand des Browsers finden.

Mario Hernandez
quelle
3

Für diejenigen , die noch nach einem alternativen Ansatz suchen, schlage ich mit Zweig Tweak - Modul als stabiler und globalen Anwendungsfall Besuche seine Spickzettel

Um das Menü über Twig Tweak zu rendern, 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) }}
Sohail
quelle