Symfony2,Twig,包括后更换树枝

时间:2013-06-18 21:25:07

标签: symfony block twig

我有这种树枝文件的层次结构

我的主要(对于控制器)树枝

{% extends "MainSiteBundle::layout.html.twig" %}

{% block footer_moderator_buttons %}
    some buttons
{% endblock %}

{% block content_body %}
    <p>hello moderator</p>

    {{ include ('MainBlogBundle:_parts:postList.html.twig', {'postList': aPostDraft}) }}

{% endblock %}

postList.html.twig

<div class="post-list">
{% for postSingle in postList %}
    {{ include ('MainBlogBundle:_parts:postSingle.html.twig', {'postSingle': postSingle}) }}
{% endfor %}
</div>

postSingle.html.twig

<div class="post">
    <div class="post-header">
        <a class="title" href="3">{{ postSingle.title }}</a>
    </div>
    <div class="post-meta">
        <div>Date: {{ postSingle.date|date('D M Y') }}</div>
        <div>Category: <a href="#">{{ postSingle.getCategory.getTitle }}</a></div>
        <div>Author: <a href="#">{{ postSingle.getUser.username }}</a>
        </div>
    </div>
    <div class="post-body">
        <div class="content">
            <img width="450" height="200" src="#">
            <div class="text">{{ postSingle.content }}</div>
        </div>
    </div>

    <div class="post-footer">
        {% block footer_moderator_buttons %}f{% endblock %}
        <div>Views: 152</div>
        <div>Comments: 1231</div>
        <div>
            <a class="link" href="#">More... </a>
        </div>
    </div>
</div>

正如你可以看到的那样(postSingle.html.twig)阻止了“footer_moderator_buttons”, 所以如何从主枝 (第一个)更改它?当前不起作用,我需要改变什么呢?

3 个答案:

答案 0 :(得分:1)

在Twig 1.8中,有embed标记(http://twig.sensiolabs.org/doc/tags/embed.html)。

您必须删除postList.html.twig文件或解决此问题。

{% embed "MainBlogBundle:_parts:postSingle.html.twig" with {'postSingle': postSingle} %}
    {% block footer_moderator_buttons %}
        custom buttons here
    {% endblock %}
{% endembed %}

答案 1 :(得分:0)

所以,你的问题实际上是“我想要了解什么枝条可以”。那么,这个问题的答案是:“它不能覆盖从”主“到较小的那些的块。”

如果你想使用twig,你必须不再考虑使用php include()方式创建新文件,然后反复“PUT”组件,如页眉,页脚,菜单等组件。 / p>

在树枝中,您可以使用块来定义主树枝文件,这些块可以想象为空格,可以但不必覆盖它们。当然,它仍然意味着你可以在一些扩展MainSiteBundle :: layout.html.twig的文件中包含postList.html.twig。 postSingle.html.twig也是如此。

我认为你抓住了twig的逻辑,除了不要试图从错误的一侧覆盖块 - 在这种情况下,从MainSiteBundle :: layout.html.twig到它的较小部分。

答案 2 :(得分:0)

怎么样:

{% extends "MainSiteBundle::layout.html.twig" %}
....
{% block footer_moderator_buttons %}
{{ parent() }}
{% endblock %}

woops没有放父母.. {{parent()}}将从扩展的树枝继承{%block footer_moderator_buttons%} {%endblock%}。