Как добавить класс в шаблоне?

Главные вкладки

Лучший ответ

Аватар пользователя negociant negociant 6 февраля 2018 в 12:40
1

Так нужно?

{% import _self as menus %}

{{ menus.menu_links(items, attributes, 0) }}

{% macro menu_links(items, attributes, menu_level) %}
  {% import _self as menus %}
  {% if items %}
    {% if menu_level == 0 %}
      <ul{{ attributes.addClass('navbar-nav', 'mr-auto') }}>
    {% else %}
      <ul class="dropdown-menu">
    {% endif %}
    {% for item in items %}
      {% set classes = [
        'nav-item',
        item.below ? 'dropdown',
        item.is_expanded ? '',
        item.is_collapsed ? 'show',
        item.in_active_trail ? 'active',
      ] %}
      <li{{ item.attributes.addClass(classes) }}>
        {% if item.below %}
          {{ link(item.title, item.url, {'class': 'nav-link dropdown-toggle',
            'data-toggle': 'dropdown', 'aria-expanded': 'true'}) }}
          {{ menus.menu_links(item.below, attributes, menu_level + 1) }}
        {% else %}
          {% if menu_level == 0 %}
            {{ link(item.title, item.url, {'class': 'nav-link'}) }}
          {% else %}
            {{ link(item.title, item.url, {'class': 'dropdown-item'}) }}
          {% endif %}
        {% endif %}
      </li>
    {% endfor %}
    </ul>
  {% endif %}
{% endmacro %}

Комментарии

Аватар пользователя N-I N-I 5 февраля 2018 в 20:05

К ссылкам пункта меню у меня добавлены классы. Не знаю, как добавить к ссылкам вложенного списка в пункт меню. Не могу найти примеры.

Аватар пользователя VasyOK VasyOK 6 февраля 2018 в 3:50

Чем же плохо? Большая часть информации выводится через views (у меня). Бeз views мне и Drupal не нужен.
Скриншоты кстати не вижу. Мне партия не разрешает на такие сайты ходить, ВПН лень включать.

Аватар пользователя negociant negociant 6 февраля 2018 в 0:49

По скринам сложно что то сказать. Приложите исходный код своего twig шаблона меню и верстку, которая должна получиться на выходе.

Аватар пользователя negociant negociant 6 февраля 2018 в 12:08
{% import _self as menus %}

{{ menus.menu_links(items, attributes, 0) }}

{% macro menu_links(items, attributes, menu_level) %}
  {% import _self as menus %}
  {% if items %}
    {% if menu_level == 0 %}
      <ul{{ attributes.addClass('navbar-nav', 'mr-auto') }}>
    {% else %}
      <ul class="dropdown-menu">
    {% endif %}
    {% for item in items %}
      {% set classes = [
        'nav-item',
        item.below ? 'dropdown',
        item.is_expanded ? '',
        item.is_collapsed ? 'show',
        item.in_active_trail ? 'active',
      ] %}
      <li{{ item.attributes.addClass(classes) }}>
        {% if item.below %}
          {# В link() передаем нужные аттрибуты и класс .dropdown-item #}
          {{ link(item.title, item.url, {'class': 'dropdown-item',
            'data-toggle': 'dropdown', 'aria-expanded': 'true'}) }}
          {{ menus.menu_links(item.below, attributes, menu_level + 1) }}
        {% else %}
          {{ link(item.title, item.url, {'class': 'nav-link'}) }}
        {% endif %}
      </li>
    {% endfor %}
    </ul>
  {% endif %}
{% endmacro %}

Аватар пользователя N-I N-I 6 февраля 2018 в 12:15

Это link пункта меню. Он должен оставаться "nav-link dropdown-toggle".
Нужно передать атрибуты в link li внутри ul "dropdown-menu".
Нужно ещё какое-то условие для пунктов в ul "dropdown-menu".

Аватар пользователя negociant negociant 6 февраля 2018 в 12:40
1

Так нужно?

{% import _self as menus %}

{{ menus.menu_links(items, attributes, 0) }}

{% macro menu_links(items, attributes, menu_level) %}
  {% import _self as menus %}
  {% if items %}
    {% if menu_level == 0 %}
      <ul{{ attributes.addClass('navbar-nav', 'mr-auto') }}>
    {% else %}
      <ul class="dropdown-menu">
    {% endif %}
    {% for item in items %}
      {% set classes = [
        'nav-item',
        item.below ? 'dropdown',
        item.is_expanded ? '',
        item.is_collapsed ? 'show',
        item.in_active_trail ? 'active',
      ] %}
      <li{{ item.attributes.addClass(classes) }}>
        {% if item.below %}
          {{ link(item.title, item.url, {'class': 'nav-link dropdown-toggle',
            'data-toggle': 'dropdown', 'aria-expanded': 'true'}) }}
          {{ menus.menu_links(item.below, attributes, menu_level + 1) }}
        {% else %}
          {% if menu_level == 0 %}
            {{ link(item.title, item.url, {'class': 'nav-link'}) }}
          {% else %}
            {{ link(item.title, item.url, {'class': 'dropdown-item'}) }}
          {% endif %}
        {% endif %}
      </li>
    {% endfor %}
    </ul>
  {% endif %}
{% endmacro %}

Аватар пользователя VasyOK VasyOK 6 февраля 2018 в 15:24

N-I wrote:

У меня меню таксономии.

И че? Делаем 2 вьюхи. Одна выводит термины 1-го уровня, вторая 2-го. Cоединяем через https://www.drupal.org/project/views_field_view

А про модуль taxonomy_menu есть информация (от бывшего вождя Gor-a) что он, к каким--то ужасам приводит.