11

小枝でクラスをknp_menu'sルート要素に追加する正しい方法は何ですか?<ul>

私は多くのことを試しました:

1.

{{ knp_menu_render('main', {'class': 'foo'}) }}

2.

{{ knp_menu_render('main', {'attributes': {'class': 'foo'}}) }}

3.

{{ knp_menu_render('main', {'listAttributes': {'class': 'foo'}}) }}

4.

{{ knp_menu_render('main', {'attributes': {'listAttributes': {'class': 'foo'}}}) }}

それらのどれも機能しませんでした

4

4 に答える 4

18

次のようにメニュービルダーに追加できます..

$menu = $this->factory->createItem('root', array(
    'childrenAttributes'    => array(
        'class'             => 'foo',
    ),
));

アップデート

これについての通知を受け取り、別の方法を見つけましたが、それを実現するにはカスタム テンプレートを使用する必要があります。

listカスタム テンプレートでは、次のようにブロックをオーバーライドする必要があります。

{% block list %}
    {% if item.hasChildren and options.depth is not sameas(0) and item.displayChildren %}
        {% import 'knp_menu.html.twig' as knp_menu %}
        <ul{{ knp_menu.attributes(listAttributes|merge({'class': [
                options.rootClass is defined ? options.rootClass : '',
                listAttributes.class is defined ? listAttributes.class : ''
            ]|join(' ')
        })) }}>
            {% set options = options|merge({'rootClass': '' }) %}
            {{ block('children') }}
        </ul>
    {% endif %}
{% endblock %}

これを使用するのではなく、knp_menu.attributes(listAttributes)オンザフライで生成されたlistAttributes.class値を配列に渡します。option.rootClassこの属性は、(存在する場合) とlistAttributes.class(存在する場合) を値として結合することによって生成されlistAttributes.classます。

すべてのサブメニューに追加されないように、使用後にoption.rootClass値がリセットされます。''{% set options = options|merge({'rootClass': '' }) %}

これにより、..

{{ knp_menu_render('main', {'rootClass': 'foo' }) }}
于 2014-06-18T12:37:02.823 に答える