symfony2 - Twig:从子节点配置父模板?

时间:2012-11-20 23:29:22

标签: layout symfony twig

我是sf2 / twig的新手,我想我在某个地方错过了一点:

我有一个带有标题,两列中间部分和页脚的布局。中间部分的左侧是主要内容区域,右侧是33%的侧边栏。我使用twig的模板继承将我的内容放入主区域,否则需要。

现在,我们页面的某些部分的内容区域必须占据整个宽度,因此右侧的侧边栏不会显示在这些部分中。为了实现这一点,我必须将不同的CSS类应用于主要内容区域,显然,不要呈现侧边栏的内容。

如果我可以在{% if single_column_layout %}这样的主模板中使用变量,默认值为false,我可以在需要时覆盖子模板,这样会很酷。但感觉我正朝着错误的方向前进......

以更一般的方式,在由一堆构建块组成的页面上,如何最好地控制每页显示哪些块以及哪些块不显示?

2 个答案:

答案 0 :(得分:4)

您可以使用twig block inheritance:

{# layout.html.twig #}
<div id="main" class="{% block column_layout 'single-column' %}">
    {% block content %}{% endblock %}
</div>

然后在你的另一个模板中,如果你想改变div#main的类,只需重新实现块

{% extends "layout.html.twig" %}
{% block column_layout 'two-column' %}
{% block content %}
     content here
{% endblock %}

PD:{% block name content %}对于内容很少的块来说是shortcut syntax

答案 1 :(得分:0)

我认为不可能这样做。但你可以使用一个带有默认值的树枝块来做到这一点。

我解释一下。在主枝中,你把它放在:

{% block parent %}
With your value to display by default
{% endblock %}

在孩子身上,如果你不想显示内容,你可以这样做:

{% block parent %}{% endblock %}

但我不确定这样可以解决你的问题。