1

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 。表示しただけです...

すべてのメニュー項目とこの作業をオーバーライドするために、まったく同じことを行います。

このサブメニューをオーバーライドするにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

サブメニュー項目をオーバーライドする方法を見つけました。

サブメニュー項目は、メイン メニュー項目と同じコードでレンダリングされます。

したがって、それをオーバーライドするには、このような小枝条件を追加して、内部で必要なことを行います

{% if item.hasChildren and options.depth is not same as(0) and item.displayChildren %}
    <a href="#">
    <i class="{{ item.extra('submenu-icon') }}"></i>
{% else %}
于 2016-05-03T07:53:13.177 に答える