xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Рендеринг дерева в Twig шаблоне с помощью макроса

Опубликовано в

Есть twig шаблон, который принимает на вход переменную tree в формате:

$tree = [
  0 => [
    'data' => 'Item 1',
    'childrens' => [
      0 => ['data' => 'Item 1.1'],
      1 => ['data' => 'Item 1.2'],
    ],
  ],
  1 => ['data' => 'Item 2'],
  2 => [...]
];

Нужно вывести эту переменную в виде дерева состоящего из вложенных списков ul/li.

Один из способов это макросы:

{% macro render_tree(tree) %}
  {% import _self as macros %}
  <ul>
    {% for item in tree %}
      <li>
        {{ item.data }}
        {% if item.childrens %}
          {{ macros.render_tree(item.childrens) }}
        {% endif %}
      </li>
    {% endfor %}
  </ul>
{% endmacro %}
 
{% import _self as macros %}
{{ macros.render_tree(tree) }}

Так выводятся например системные меню — menu.html.twig.

Написанное актуально для Drupal 8
Похожие записи

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании