在Symfony2中自定义knp-menu-template

时间:2014-02-19 10:51:36

标签: symfony twig knpmenu

我在自定义knp-menu模板时遇到问题。

我只是简单地解释了this site中的knp_menu.html.twig。

如果我这样尝试,我会收到此错误:

enter image description here

我的knp_menu.html.twig看起来像这样:

{% extends 'knp_menu.html.twig' %}

{% block linkElement %}{% import _self as knp_menu %}
   <a href="{{ item.uri }}"{{ knp_menu.attributes(item.linkAttributes) }}>{{ block('label') }}</a>
{% endblock %}

我尝试像这样渲染模板:

{{ knp_menu_render('MainShowBundle:Builder:mainUserMenu', {'template': 'MainShowBundle:Menu:knp_menu.html.twig'}) }}

我希望有人可以帮助我。

感谢。 迈克尔

3 个答案:

答案 0 :(得分:3)

您需要先从父模板导入宏,然后才能使用它们。

{% block linkElement %}
    {% import 'knp_menu.html.twig' as knp_menu %}
    <a href="{{ item.uri }}"{{ knp_menu.attributes(item.linkAttributes) }}>
        <span>{{ block('label') }}</span>
    </a>
{% endblock %}


我已经回复了您最初发布问题的地方

答案 1 :(得分:1)

您是否已尝试清除缓存?

php app / console cache:clear

答案 2 :(得分:1)

我正在研究基于Symfony的CMS的Sonata项目。 在管理区域中,我为菜单添加了自定义模板,在该模板中我做了:

{% extends 'knp_menu.html.twig' %}

{% block linkElement %}
    {% import 'knp_menu.html.twig' as knp_menu %}
    <a href="{{ item.uri }}"{{ knp_menu.attributes(item.linkAttributes) }}>
        <span>{{ block('label') }}</span>
    </a>
{% endblock %}

{% block spanElement %}
{% import 'knp_menu.html.twig' as knp_menu %}
<a href="{{ item.uri }}"{ knp_menu.attributes(item.linkAttributes) }{ block('label') }</a>
{% endblock %}

请注意,您可能需要添加“spanElement”以及“linkElement”。

完整模板实施https://github.com/sonata-project/sandbox-build/blob/2.4/vendor/knplabs/knp-menu/src/Knp/Menu/Resources/views/knp_menu.html.twig