web-dev-qa-db-ja.com

twigテンプレートのメニューをレンダリングする

admin/structure/menuメニューを作成しました。このメニューをレンダリングすることは可能ですか(machinename:my_menu)twigテンプレート?

{{ my_menu }}
7
meez

メニューを簡略化する 希望どおりの音がします。

Optimize_menuモジュールは、TwigExtensionを使用してDrupalのメインメニュー(またはそのほかの任意のメニュー)にアクセスし、配列をレンダリングして、twigテンプレートからアクセスできるようにします。 twigテンプレート内のメニューのレンダー配列の完全な制御は、メニューのマークアップをカスタマイズして、アクセス可能で標準に準拠していることを確認する機能です。

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

それ以外の場合、ブロックからメニューをレンダリングするときに使用するmenu-* twigテンプレートがいくつかあります。 あなたのTwigデバッグ設定 Drupalで提案を確認します。

ただし、メニューのテーマを正確に理解するにはかなりの知識が必要です(上記の例のようにフラットなメニュー構造ではなく、子アイテムを処理するなど)。つまり、ブロックにメニューをレンダリングさせることに固執します。特定の地域。次に、ベーステーマ(上品または安定)からmenu.html.twigを調べて、マークアップを変更する場合のオプションを確認します。

適切なtwigテンプレートの提案を使用してください。menu.html.twigだけではありません。これは、Drupalによってレンダリングされるすべてのメニューに影響します...これがデフォルトのテンプレートです。

Menu Block をインストールすることをお勧めします。これは、テーマ設定とtwigファイルの提案に柔軟性を与えるためです。また、メニューのツリーをレンダリングします(セクションベースのナビゲーションなど)サイドバー)そよ風。

7
Kevin

Optimize_menuモジュールを有効にしてから、メニューをレンダリングするpage.html.twigまたはその他のtwigテンプレートに以下のコードを追加します。

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

'main'はメニューIDで、メニューページのメニューの編集ボタンにカーソルを合わせ、ブラウザの下部に表示されるURLを見るとわかります。

3
Mario Hernandez

まだ別のアプローチを探している人のために、私は Twig Tweak モジュールをより安定した、よりグローバルなユースケースとして使用することをお勧めします チートシート をチェックしてください

twig Tweakを使用してメニューをレンダリングする場合は、次の操作を実行できます。

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