Skip to content

Commit a1441c8

Browse files
author
Thomas Jarrand
committed
Allow hide some menu items
1 parent 8390ae5 commit a1441c8

3 files changed

Lines changed: 16 additions & 6 deletions

File tree

Menu/Builder.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ public function isActive(array $item): bool
4343
|| $this->isCurrentRoute($this->resolve($item, ['route']));
4444
}
4545

46+
public function isAccessible(array $item): bool
47+
{
48+
if (isset($item['access'])) {
49+
return (bool) $item['access'];
50+
}
51+
52+
return true;
53+
}
54+
4655
private function resolve(array $item, array $keys)
4756
{
4857
foreach ($keys as $key) {

Resources/views/base.html.twig

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<ul>
1919
{% set item_class = 'primary-nav__item' %}
2020
{% set item_active_class = 'primary-nav__item--active' %}
21-
{% for item in menu_primary|default([]) %}
21+
{% for item in menu_primary|default([])|filter(item => item is accessible) %}
2222
{% block menu_item %}
2323
<li class="{{ item_class|default('') }} {{ item is active ? item_active_class|default('') : '' }}">
2424
{% block menu_item_link %}
@@ -67,7 +67,7 @@
6767
{% block nav_mobile %}
6868
<div class="mobile-nav">
6969
<ul class="tree">
70-
{% for item in menu_mobile|default([]) %}
70+
{% for item in menu_mobile|default([])|filter(item => item is accessible) %}
7171
<li class="mobile-nav__item mobile-nav__item--primary tree-item {{ item is active ? 'mobile-nav__item--active' : '' }}">
7272
<a class="{{ item.children|default(false) ? 'tree-item__trigger' : '' }}" href="{{ menu_path(item) }}">
7373
{% if item.icon|default(false) %}
@@ -77,7 +77,7 @@
7777
</a>
7878
{% if item.children|default(false) %}
7979
<ul class="tree-item__content tree">
80-
{% for secondary_item in item.children %}
80+
{% for secondary_item in item.children|filter(item => item is accessible) %}
8181
<li class="mobile-nav__item tree-item mobile-nav__item--secondary {{ secondary_item is active ? 'mobile-nav__item--active' : '' }}">
8282
<a href="{{ menu_path(secondary_item) }}" class="{{ secondary_item.children|default(false) ? 'tree-item__trigger' : '' }}">
8383
{% if secondary_item.icon|default(false) %}
@@ -87,7 +87,7 @@
8787
</a>
8888
{% if secondary_item.children|default(false) %}
8989
<ul class="tree-item__content">
90-
{% for tertiary_item in secondary_item.children %}
90+
{% for tertiary_item in secondary_item.children|filter(item => item is accessible) %}
9191
<li class="mobile-nav__item mobile-nav__item--tertiary {{ tertiary_item is active ? 'mobile-nav__item--active' : '' }}">
9292
<a href="{{ menu_path(tertiary_item) }}">
9393
{% if tertiary_item.icon|default(false) %}
@@ -116,7 +116,7 @@
116116
<ul>
117117
{% set item_class = 'secondary-nav__item' %}
118118
{% set item_active_class = 'secondary-nav__item--active' %}
119-
{% for item in menu_secondary %}
119+
{% for item in menu_secondary|filter(item => item is accessible) %}
120120
{{ block('menu_item') }}
121121
{% endfor %}
122122
</ul>
@@ -132,7 +132,7 @@
132132
<ul>
133133
{% set item_class = 'tertiary-nav__item' %}
134134
{% set item_active_class = 'tertiary-nav__item--active' %}
135-
{% for item in menu_tertiary %}
135+
{% for item in menu_tertiary|filter(item => item is accessible) %}
136136
{{ block('menu_item') }}
137137
{% endfor %}
138138
</ul>

Twig/Extensions/MenuExtension.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public function getTests(): array
3030
new TwigTest('active', [$this->builder, 'isActive']),
3131
new TwigTest('currentRoot', [$this->builder, 'isCurrentRoot']),
3232
new TwigTest('currentRoute', [$this->builder, 'isCurrentRoute']),
33+
new TwigTest('accessible', [$this->builder, 'isAccessible']),
3334
];
3435
}
3536
}

0 commit comments

Comments
 (0)