diff options
Diffstat (limited to 'templates/menu.html.twig')
-rwxr-xr-x | templates/menu.html.twig | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/templates/menu.html.twig b/templates/menu.html.twig new file mode 100755 index 0000000..a4489ab --- /dev/null +++ b/templates/menu.html.twig @@ -0,0 +1,60 @@ +{# +/** + * @file + * Default theme implementation to display a menu. + * + * Available variables: + * - classes: A list of classes to apply to the top level <ul> element. + * - dropdown_classes: A list of classes to apply to the dropdown <ul> element. + * - menu_name: The machine name of the menu. + * - items: A nested list of menu items. Each menu item contains: + * - attributes: HTML attributes for the menu item. + * - below: The menu item child items. + * - title: The menu link title. + * - url: The menu link url, instance of \Drupal\Core\Url + * - localized_options: Menu link localized options. + * + * @ingroup templates + * + * Define a custom macro that will render all menu trees. + */ +#} +{% macro menu_links(items, attributes, menu_level, classes, dropdown_classes) %} + {% if items %} + <ul{{ attributes.addClass(menu_level == 0 ? classes : dropdown_classes) }}> + {% for item in items %} + {% + set item_classes = item.url.getOption('container_attributes').class | split(" ") + %} + {% + set item_classes = [ + item.is_expanded and item.below ? 'expanded dropdown', + item.in_active_trail ? 'active active-trail', + loop.first ? 'first', + loop.last ? 'last', + ] + %} + <li{{ item.attributes.addClass(item_classes) }}> + {% set link_title = item.title %} + {% set link_attributes = item.link_attributes %} + {% if menu_level == 0 and item.is_expanded and item.below %} + {% set link_title %}{{ link_title }} <span class="caret"></span>{% endset %} + {% set link_attributes = link_attributes.addClass('dropdown-toggle').removeAttribute('data-toggle', 'dropdown') %} + {% endif %} + {# Must use link() here so it triggers hook_link_alter(). #} + {{ link(link_title, item.url, link_attributes.addClass(item.in_active_trail ? 'active-trail')) }} + {% if item.below %} + {{ _self.menu_links(item.below, attributes.removeClass(classes), menu_level + 1, classes, dropdown_classes) }} + {% endif %} + </li> + {% endfor %} + </ul> + {% endif %} +{% endmacro %} + +{# + Invoke the custom macro defined above. If classes were provided, use them. + This allows the template to be extended without having to also duplicate the + code above. @see http://twig.sensiolabs.org/doc/tags/macro.html +#} +{{ _self.menu_links(items, attributes, 0, classes ?: ['menu', 'menu--' ~ menu_name|clean_class, 'nav'], dropdown_classes ?: ['dropdown-menu']) }} |