覆盖 KnpMenu 子菜单项
Override KnpMenu submenu items
我用 KnpMenu 创建了一个菜单,我正在尝试覆盖子菜单
这是我添加子菜单项的方式
$menu
->addChild('sidebar.front.servers', ['route' => 'server_index'])
->setExtras([
'icon' => 'fa fa-hdd-o',
'regex' => '#^/servers/#',
])
;
$menu['sidebar.front.servers']
->addChild('nnanana', ['route' => 'server_index'])
;
我在 knp_menu.html.twig
上搜索以查找呈现子菜单的内容。
我找到了这个渲染子菜单列表和项目的人。
{% block list %}
{% if item.hasChildren and options.depth is not same as(0) and item.displayChildren %}
{% import _self as knp_menu %}
<ul{{ knp_menu.attributes(listAttributes) }}>
{{ block('children') }}
</ul>
{% endif %}
{% endblock %}
{% block children %}
{# save current variables #}
{% set currentOptions = options %}
{% set currentItem = item %}
{# update the depth for children #}
{% if options.depth is not none %}
{% set options = options|merge({'depth': currentOptions.depth - 1}) %}
{% endif %}
{# update the matchingDepth for children #}
{% if options.matchingDepth is not none and options.matchingDepth > 0 %}
{% set options = options|merge({'matchingDepth': currentOptions.matchingDepth - 1}) %}
{% endif %}
{% for item in currentItem.children %}
{{ block('item') }}
{% endfor %}
{# restore current variables #}
{% set item = currentItem %}
{% set options = currentOptions %}
{% endblock %}
这会将 类 放入子菜单列表。
{%- set childrenClasses = item.childrenAttribute('class') is not empty ? [item.childrenAttribute('class')] : [] %}
{%- set childrenClasses = childrenClasses|merge(['menu_level_' ~ item.level]) %}
{%- set listAttributes = item.childrenAttributes|merge({'class': childrenClasses|join(' ') }) %}
这会呈现所有子菜单项
{{ block('list') }}
但是当我试图覆盖我的模板中的这个块时,就像这样
{% block item %}
{% import 'knp_menu.html.twig' as knp_menu %}
<a href="#">test</a>
{% endblock %}
这不起作用,菜单不再呈现,我只显示 test
...
我用完全相同的方法来覆盖每个菜单项并且这项工作有效。
如何覆盖此子菜单?
谢谢
我找到了覆盖子菜单项的方法。
子菜单项使用与主菜单项相同的代码呈现。
所以要覆盖它,只需添加一个像这样的树枝条件,然后在里面做任何你想做的事
{% if item.hasChildren and options.depth is not same as(0) and item.displayChildren %}
<a href="#">
<i class="{{ item.extra('submenu-icon') }}"></i>
{% else %}
我用 KnpMenu 创建了一个菜单,我正在尝试覆盖子菜单
这是我添加子菜单项的方式
$menu
->addChild('sidebar.front.servers', ['route' => 'server_index'])
->setExtras([
'icon' => 'fa fa-hdd-o',
'regex' => '#^/servers/#',
])
;
$menu['sidebar.front.servers']
->addChild('nnanana', ['route' => 'server_index'])
;
我在 knp_menu.html.twig
上搜索以查找呈现子菜单的内容。
我找到了这个渲染子菜单列表和项目的人。
{% block list %}
{% if item.hasChildren and options.depth is not same as(0) and item.displayChildren %}
{% import _self as knp_menu %}
<ul{{ knp_menu.attributes(listAttributes) }}>
{{ block('children') }}
</ul>
{% endif %}
{% endblock %}
{% block children %}
{# save current variables #}
{% set currentOptions = options %}
{% set currentItem = item %}
{# update the depth for children #}
{% if options.depth is not none %}
{% set options = options|merge({'depth': currentOptions.depth - 1}) %}
{% endif %}
{# update the matchingDepth for children #}
{% if options.matchingDepth is not none and options.matchingDepth > 0 %}
{% set options = options|merge({'matchingDepth': currentOptions.matchingDepth - 1}) %}
{% endif %}
{% for item in currentItem.children %}
{{ block('item') }}
{% endfor %}
{# restore current variables #}
{% set item = currentItem %}
{% set options = currentOptions %}
{% endblock %}
这会将 类 放入子菜单列表。
{%- set childrenClasses = item.childrenAttribute('class') is not empty ? [item.childrenAttribute('class')] : [] %}
{%- set childrenClasses = childrenClasses|merge(['menu_level_' ~ item.level]) %}
{%- set listAttributes = item.childrenAttributes|merge({'class': childrenClasses|join(' ') }) %}
这会呈现所有子菜单项
{{ block('list') }}
但是当我试图覆盖我的模板中的这个块时,就像这样
{% block item %}
{% import 'knp_menu.html.twig' as knp_menu %}
<a href="#">test</a>
{% endblock %}
这不起作用,菜单不再呈现,我只显示 test
...
我用完全相同的方法来覆盖每个菜单项并且这项工作有效。
如何覆盖此子菜单?
谢谢
我找到了覆盖子菜单项的方法。
子菜单项使用与主菜单项相同的代码呈现。
所以要覆盖它,只需添加一个像这样的树枝条件,然后在里面做任何你想做的事
{% if item.hasChildren and options.depth is not same as(0) and item.displayChildren %}
<a href="#">
<i class="{{ item.extra('submenu-icon') }}"></i>
{% else %}