Menu kết xuất trong mẫu twig


7

Trong admin/structure/menutôi đã tạo ra một menu. Có thể hiển thị menu này (với machinename my_menu:) trong một mẫu twig? Bằng cách nào đó như:

{{ my_menu }}

Câu trả lời:


7

Đơn giản hóa âm thanh Menu như những gì bạn muốn.

Mô-đun Simplify_menu sử dụng TwigExtension để có quyền truy cập vào menu chính của Drupal (hoặc bất kỳ menu nào khác cho vấn đề đó), kết xuất mảng để có thể truy cập từ mẫu twig. Trong số nhiều ưu điểm của việc có toàn quyền kiểm soát mảng kết xuất của menu trong mẫu twig là khả năng tùy chỉnh đánh dấu cho các menu của bạn để đảm bảo chúng có thể truy cập và tuân thủ các tiêu chuẩn.

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

Mặt khác, có một số menu-*mẫu twig để sử dụng khi hiển thị menu từ một khối. Bật cài đặt gỡ lỗi Twig của bạn trong Drupal để xem các đề xuất là gì.

Tuy nhiên, bạn cần có kiến ​​thức khá tốt về chủ đề menu để có được chính xác (như xử lý các mục con và không cấu trúc menu phẳng như ví dụ ở trên) - điều đó nói rằng, tôi sẽ kiên quyết để một khối hiển thị menu trong một khu vực nhất định. Sau đó, kiểm tra menu.html.twigtừ chủ đề cơ sở của bạn (đẳng cấp hoặc ổn định) để có ý tưởng về các tùy chọn của bạn là gì nếu bạn muốn sửa đổi đánh dấu.

Hãy chắc chắn sử dụng một gợi ý mẫu twig phong nha và không chỉ menu.html.twig- vì điều đó sẽ ảnh hưởng đến mọi menu được Drupal hiển thị ... đó là mẫu mặc định.

Tôi cũng đề nghị cài đặt Menu Block vì điều đó sẽ cho phép thêm linh hoạt trong các đề xuất tệp theo chủ đề và twig. Nó cũng làm cho việc hiển thị cây của một menu (như điều hướng dựa trên phần trong thanh bên) trở nên dễ dàng.


cảm ơn. Lý do tại sao tôi hỏi câu hỏi của tôi ở trên là vì tôi không thể hiển thị menu của mình (menu khối của tôi) trong một mẫu twig lồng nhau? Xem ở đây câu hỏi của tôi . Có lẽ bạn đã có câu trả lời ..?
meez

Menu Simplify cho phép bạn gọi bất kỳ menu nào từ bất kỳ mẫu twig nào.
Kevin

Tôi đã cài đặt và kích hoạt Menu Simplify. Trong tập tin header.twig của tôi, tôi đã thêm {% set items = simplify_menu('main') %}nhưng (trong trường hợp này) menu điều hướng chính không được hiển thị?
meez

Bạn đã làm theo phần còn lại của ví dụ? Bạn có thể phải làm theo cách đó hoặc gọi một khối chứa menu, kết xuất nó và tạo một biến. Thành thật mà nói, tốt nhất là để nó vào hệ thống khối, thay vì tiêm các menu vào các mẫu twig khác mà chúng thường không có.
Kevin

ok cảm ơn Nếu tôi làm theo phần còn lại của ví dụ thì nó hoạt động! Nhưng như bạn đề xuất, tốt hơn hết là để nó vào hệ thống khối. Làm thế nào để tôi làm điều này với Menu Simplify? 1) Trong quản trị / cấu trúc / khối tôi đã đặt menu trong một khu vực và sau đó tôi đã tắt nó (vì vậy bây giờ tôi có ID khối). 2) Trong tôi header.twigđã thử {{ simplify_menu('crmnavigation') }}, nhưng nó không tải khối? Bạn có biết làm cách nào để tải khối và menu bên trong nó header.twigbằng Menu Simplify không?
meez

3

Kích hoạt mô-đun Simplify_menu, sau đó thêm mã bên dưới vào page.html.twig hoặc mẫu twig khác mà bạn muốn hiển thị menu của mình:

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

những 'main'là id đơn mà bạn có thể tìm thấy bằng cách lơ lửng trên nút chỉnh sửa của trình đơn trong trang menu và nhìn vào url hiển thị ở dưới cùng của trình duyệt.


3

Đối với những người vẫn đang tìm kiếm một phương pháp thay thế, tôi khuyên bạn nên sử dụng mô-đun Twig Tweak như một trường hợp sử dụng ổn định hơn và toàn cầu hơn, hãy xem bảng cheat của nó

Để hiển thị menu thông qua chỉnh twig, bạn chỉ cần làm như sau:

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

{# Specify menu level and depth. #}
{{ drupal_menu('admin', 2, 3) }}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.