mirror of
https://github.com/kevinveenbirkenbach/infinito.git
synced 2025-09-13 21:57:16 +02:00
Substituted old menu trough KNP menu bundle
This commit is contained in:
200
application/templates/frames/structure/knp_menu.html.twig
Normal file
200
application/templates/frames/structure/knp_menu.html.twig
Normal file
@@ -0,0 +1,200 @@
|
||||
{# @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(' ') }) %}
|
||||
|
||||
<li{{ macros.attributes(attributes) }}>
|
||||
{# displaying the item #}
|
||||
{%- if is_dropdown %}
|
||||
{{ block('dropdownElement') }}
|
||||
{%- elseif item.uri is not empty and (not item.current or options.currentAsLink) %}
|
||||
{{ block('linkElement') }}
|
||||
{%- else %}
|
||||
{{ block('spanElement') }}
|
||||
{%- endif %}
|
||||
{%- if divider_append %}
|
||||
{{ block('dividerElement') }}
|
||||
{%- endif %}
|
||||
{% if item.hasChildren and options.depth is not same as(0) and item.displayChildren %}
|
||||
{{ block('dropdownlinks') }}
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block dropdownlinks %}
|
||||
{% if use_multilevel %}
|
||||
<ul class="dropdown-menu">
|
||||
{% else %}
|
||||
<div class="dropdown-menu">
|
||||
{% endif %}
|
||||
{% for item in item.children %}
|
||||
{{ block('renderDropdownlink') }}
|
||||
|
||||
{% if use_multilevel and item.hasChildren and options.depth is not same as(0) and item.displayChildren %}
|
||||
{{ block('dropdownlinks') }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if not use_multilevel %}
|
||||
</div>
|
||||
{% else %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block renderDropdownlink %}
|
||||
{% import _self as ownmacro %}
|
||||
{%- set divider_prepend = item.attributes.divider_prepend|default(false) %}
|
||||
{%- set divider_append = item.attributes.divider_append|default(false) %}
|
||||
{%- set attributes = item.attributes|merge({'dropdown': null, 'divider_prepend': null, 'divider_append': null }) %}
|
||||
|
||||
{% if use_multilevel %}
|
||||
<li>
|
||||
{% endif %}
|
||||
|
||||
{%- if divider_prepend %}
|
||||
{{ block('dividerElementDropdown') }}
|
||||
{%- endif %}
|
||||
|
||||
{%- if item.uri is not empty and (not item.current or options.currentAsLink) %}
|
||||
{{ ownmacro.setCssClassAttribute(item, 'LinkAttribute', 'dropdown-item') }}
|
||||
{{ block('linkElement') }}
|
||||
{%- else %}
|
||||
{{ block('spanElementDropdown') }}
|
||||
{%- endif %}
|
||||
|
||||
{%- if divider_append %}
|
||||
{{ block('dividerElementDropdown') }}
|
||||
{%- endif %}
|
||||
|
||||
{% if use_multilevel %}
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block spanElementDropdown %}
|
||||
{% import "knp_menu.html.twig" as macros %}
|
||||
{% import _self as ownmacro %}
|
||||
{{ ownmacro.setCssClassAttribute(item, 'LabelAttribute', 'dropdown-header') }}
|
||||
<div {{ macros.attributes(item.labelAttributes) }}>
|
||||
{% if item.attribute('icon') is not empty %}
|
||||
<i class="{{ item.attribute('icon') }}"></i>
|
||||
{% endif %}
|
||||
{{ block('label') }}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block dividerElementDropdown %}
|
||||
<div class="dropdown-divider"></div>
|
||||
{% endblock %}
|
||||
|
||||
{% block dividerElement %}
|
||||
{% if item.level == 1 %}
|
||||
<li class="divider-vertical"></li>
|
||||
{% else %}
|
||||
<li class="divider"></li>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block linkElement %}
|
||||
{% import "knp_menu.html.twig" as macros %}
|
||||
{% import _self as ownmacro %}
|
||||
{{ ownmacro.setCssClassAttribute(item, 'LinkAttribute', 'nav-link') }}
|
||||
<a href="{{ item.uri }}"{{ macros.attributes(item.linkAttributes) }}>
|
||||
{% if item.attribute('icon') is not empty %}
|
||||
<i class="{{ item.attribute('icon') }}"></i>
|
||||
{% endif %}
|
||||
{{ block('label') }}
|
||||
</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block spanElement %}
|
||||
{% import "knp_menu.html.twig" as macros %}
|
||||
{% import _self as ownmacro %}
|
||||
{{ ownmacro.setCssClassAttribute(item, 'LabelAttribute', 'navbar-text') }}
|
||||
<span {{ macros.attributes(item.labelAttributes) }}>
|
||||
{% if item.attribute('icon') is not empty %}
|
||||
<i class="{{ item.attribute('icon') }}"></i>
|
||||
{% endif %}
|
||||
{{ block('label') }}
|
||||
</span>
|
||||
{% endblock %}
|
||||
|
||||
{% block dropdownElement %}
|
||||
{% import "knp_menu.html.twig" as macros %}
|
||||
{%- set classes = item.linkAttribute('class') is not empty ? [item.linkAttribute('class')] : [] %}
|
||||
{%- set classes = classes|merge(['dropdown-toggle', 'nav-link']) %}
|
||||
{%- set attributes = item.linkAttributes %}
|
||||
{%- set attributes = attributes|merge({'class': classes|join(' ')}) %}
|
||||
{%- set attributes = attributes|merge({'data-toggle': 'dropdown'}) %}
|
||||
<a href="#"{{ macros.attributes(attributes) }}>
|
||||
{% if item.attribute('icon') is not empty %}
|
||||
<i class="{{ item.attribute('icon') }}"></i>
|
||||
{% endif %}
|
||||
{{ block('label') }}
|
||||
<b class="caret"></b>
|
||||
</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block label %}{{ item.label|trans }}{% endblock %}
|
@@ -7,29 +7,6 @@
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<ul class="navbar-nav mr-auto">
|
||||
{% for item in menu_items %}
|
||||
{% if item.name %}
|
||||
{% if item.url %}
|
||||
<li class="nav-item {% if item.active %}active{% endif %}"><a
|
||||
class="nav-link" href="{{ item.url }}"> {{ item.name }}
|
||||
</a></li>
|
||||
{% elseif item.toArray %}
|
||||
<li class="nav-item dropdown"><a
|
||||
class="nav-link dropdown-toggle" href="#" id="navbarDropdown"
|
||||
role="button" data-toggle="dropdown" aria-haspopup="true"
|
||||
aria-expanded="false"> {{ item.name }}
|
||||
</a>
|
||||
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
|
||||
{%for link in item %}
|
||||
<a class="dropdown-item {% if link.active %}active{% endif %}"
|
||||
href="{{ link.url }}"> {{ link.name }}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div></li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{{ knp_menu_render('userTopbar', {'currentClass': 'active', 'template': 'frames/structure/knp_menu.html.twig'}) }}
|
||||
</div>
|
||||
</nav>
|
||||
|
Reference in New Issue
Block a user