【发布时间】:2012-06-28 22:18:39
【问题描述】:
如何自定义 KNPMenuBundle?
我不知道如何使用 KnpMenuBundle 添加图像或跨度标签。
我只是想要这个:
<ul>
<li>
<img src="{{asset('bundles/mybundle/images/my_image.png')}} /">
<span>My Title</span>
</li>
</ul>
在 MenuBuilder 中,这将开始于:
$menu->addChild('My Title');
如何在<li> 语句中添加图片?
编辑:简单的方法
实际上有一个简单的方法可以在捆绑包中做到这一点:
1 复制模板 vendor\KnpMenu\src\Knp\Menu\Resources\views\knp_menu.html.twig
进入您的Acme\AcmeBundle\Resources\views\Menu\knp_menu.html.twig 并将其扩展如下:
{% extends 'knp_menu.html.twig' %}
2 根据您的需要修改模板。例如,如果您决定每次使用$menu->addChild('Your Title'); 时添加一个span 标签,只需在<a></a> 之间添加一个span 标签:
{% block linkElement %}
<a href="{{ item.uri }}"{{ _self.attributes(item.linkAttributes) }}>
<span>{{ block('label') }}</span>
</a>
{% endblock %}
3 您现在可以在使用菜单时选择自定义布局:
{{ knp_menu_render('main', {'template': 'AcmeBundle:Menu:knp_menu.html.twig'}) }}
【问题讨论】:
-
为什么不定义
<li>或<span>元素的属性并在css中添加图片? -
上面列出的“简单方法”很棒。谢谢。
-
我想把“knp_menu.html.twig”放到“app/Resouces/views”目录下。这行不通。可能是什么错误?
-
正如@DARSC0D3 在他的answer 中所说,您需要导入父模板才能使属性生效。
-
除了复制上述模板外,还必须修改
config.yml,使knp_menu:块中的template:行读取YourBundle:Menu:knp_menu.html.twig。
标签: symfony knpmenubundle