使用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'}}}) }}
他们都没有工作
答案 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'}) %}