admin/structure/menu
メニューを作成しました。このメニューをレンダリングすることは可能ですか(machinename:my_menu
)twigテンプレート?
{{ my_menu }}
メニューを簡略化する 希望どおりの音がします。
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ファイルの提案に柔軟性を与えるためです。また、メニューのツリーをレンダリングします(セクションベースのナビゲーションなど)サイドバー)そよ風。
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を見るとわかります。
まだ別のアプローチを探している人のために、私は 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) }}