{# @see https://gist.github.com/lsv/24a9e9d7d961d22226f8e220d2c4a7d0 #} {% extends 'knp_menu.html.twig' %} {% macro setCssClassAttribute(item, type, add) %} {% set getter = 'get' ~ type %} {% set setter = 'set' ~ type %} {% set value = attribute(item, getter, ['class']) %} {% if value is iterable %} {% set value = value|join(' ') %} {% endif %} {% do attribute(item, setter, ['class', value ~ ' ' ~ add]) %} {% endmacro %} {% block item %} {% import "knp_menu.html.twig" as macros %} {# As multiple level is not currently supported by bootstrap 4 This requires you to install https://github.com/bootstrapthemesco/bootstrap-4-multi-dropdown-navbar And set the the use_multilevel = true #} {% set use_multilevel = false %} {% if item.displayed %} {%- set attributes = item.attributes %} {%- set is_dropdown = attributes.dropdown|default(false) %} {%- set divider_prepend = attributes.divider_prepend|default(false) %} {%- set divider_append = attributes.divider_append|default(false) %} {# unset bootstrap specific attributes #} {%- set attributes = attributes|merge({'dropdown': null, 'divider_prepend': null, 'divider_append': null }) %} {%- if divider_prepend %} {{ block('dividerElement') }} {%- endif %} {# building the class of the item #} {%- set classes = item.attribute('class') is not empty ? [item.attribute('class'), 'nav-item'] : ['nav-item'] %} {%- if matcher.isCurrent(item) %} {%- set classes = classes|merge([options.currentClass]) %} {%- elseif matcher.isAncestor(item, options.depth) %} {%- set classes = classes|merge([options.ancestorClass]) %} {%- endif %} {%- if item.actsLikeFirst %} {%- set classes = classes|merge([options.firstClass]) %} {%- endif %} {%- if item.actsLikeLast %} {%- set classes = classes|merge([options.lastClass]) %} {%- endif %} {# building the class of the children #} {%- set childrenClasses = item.childrenAttribute('class') is not empty ? [item.childrenAttribute('class')] : [] %} {%- set childrenClasses = childrenClasses|merge(['menu_level_' ~ item.level]) %} {# adding classes for dropdown #} {%- if is_dropdown %} {%- set classes = classes|merge(['dropdown']) %} {%- set childrenClasses = childrenClasses|merge(['dropdown-menu']) %} {%- endif %} {# putting classes together #} {%- if classes is not empty %} {%- set attributes = attributes|merge({'class': classes|join(' ')}) %} {%- endif %} {%- set listAttributes = item.childrenAttributes|merge({'class': childrenClasses|join(' ') }) %}