her*_*w78 11 php symfony twig knpmenubundle
使用twig 将类添加到knp_menu'sroot元素的正确方法是什么<ul>?
我尝试了很多东西:
1.
{{ knp_menu_render('main', {'class': 'foo'}) }}
Run Code Online (Sandbox Code Playgroud)
2.
{{ knp_menu_render('main', {'attributes': {'class': 'foo'}}) }}
Run Code Online (Sandbox Code Playgroud)
3.
{{ knp_menu_render('main', {'listAttributes': {'class': 'foo'}}) }}
Run Code Online (Sandbox Code Playgroud)
4.
{{ knp_menu_render('main', {'attributes': {'listAttributes': {'class': 'foo'}}}) }}
Run Code Online (Sandbox Code Playgroud)
他们都没有工作
qoo*_*mao 15
您可以在菜单生成器中添加它,例如..
$menu = $this->factory->createItem('root', array(
'childrenAttributes' => array(
'class' => 'foo',
),
));
Run Code Online (Sandbox Code Playgroud)
更新
我刚收到一个关于此的通知,并找到了另一种方法,虽然它要求您使用自定义模板来实现它.
在您的自定义模板中,您需要覆盖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 %}
Run Code Online (Sandbox Code Playgroud)
在这里,而不是使用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' }) }}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10329 次 |
| 最近记录: |