【问题标题】:Add Class to knp menu root Element with Twig使用 Twig 将类添加到 knp 菜单根元素
【发布时间】:2014-06-18 12:22:21
【问题描述】:

用twig向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'}}}) }}

他们都没有工作

【问题讨论】:

    标签: php symfony twig knpmenubundle


    【解决方案1】:

    您可以将它添加到您的菜单构建器中,例如..

    $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 值连接而生成的。

    使用{% set options = options|merge({'rootClass': '' }) %} 后,option.rootClass 的值会重置为'',这样它就不会添加到每个子菜单中。

    这将允许您使用..来呈现您的菜单。

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

    【讨论】:

    • 这是我能做到的唯一方法吗?不作为参数?
    • 我不敢说实话,抱歉。
    • 我会支持你的答案,但不接受它,因为这不是我想要的解决方案......
    • 能否请您进一步说明如何以及在何处创建此模板文件以及如何使用它?我无法让它工作。 tnx
    • 这是很久以前的事了,所以我不能确定,但​​我认为您需要在knp_menu 配置中的twig.template 下设置模板位置。见symfony.com/doc/master/bundles/KnpMenuBundle/…
    【解决方案2】:

    还没有找到一个干净的解决方案来传递参数。我在builder 类中的解决方案:

    $menu->setChildrenAttribute('id', 'boo') ->setChildrenAttribute('class', 'foo');

    【讨论】:

    • 也可以使用$menu-&gt;setChildrenAttributes(['id' =&gt; 'myId', 'class' =&gt; 'myClass']);方法设置多个属性。
    • 问题是在模板中设置的类而不是在构建器中
    【解决方案3】:

    尝试

    {% set menu = knp_menu_get('AppBundle:Builder:categoriesMenu', [], {'childrenAttributes': {'class': 'menu'}}) %}
    {{ knp_menu_render(menu) }}
    

    【讨论】:

      【解决方案4】:
      {% set menu = knp_menu_get('AppBundle:Builder:mainMenu', []) %}
      {% do menu.setChildrenAttribute('class', 'child-class') %}
      {% knp_menu_render(menu, {'currentClass': 'active'}) %}
      

      在这里找到https://github.com/KnpLabs/KnpMenu/issues/166

      【讨论】:

        猜你喜欢
        • 2017-11-20
        • 2021-05-09
        • 1970-01-01
        • 2018-08-18
        • 1970-01-01
        • 2020-02-06
        • 2016-06-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多