使用Twig将类添加到knp菜单根元素

时间:2014-06-18 12:22:22

标签: php symfony twig knpmenubundle

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

他们都没有工作

4 个答案:

答案 0 :(得分:15)

您可以在菜单制作工具中添加它,例如..

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

<强>更新

我刚刚收到有关此内容的通知,并发现了另一种方法,但它要求您使用自定义模板来实现它。

在您的自定义模板中,您需要覆盖{... 1}}块,例如..

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': '' }) %}

答案 1 :(得分:2)

还没有找到一个干净的解决方案来传递params。我在builder课程中的解决方案:

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

答案 2 :(得分:1)

尝试

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

答案 3 :(得分:1)

{% 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