Layout symfony2-细枝:从子级配置父模板?

Layout symfony2-细枝:从子级配置父模板?,layout,symfony,twig,Layout,Symfony,Twig,我是sf2/twig的新手,我想我遗漏了一点: 我有一个带有页眉、两列中间部分和页脚的布局。中间部分的左侧是主要内容区域,右侧是33%的侧边栏。我使用twig的模板继承将我的内容放入主区域以及其他需要的地方 现在,我们页面的某些部分的内容区域必须占据整个宽度,因此右侧的侧边栏不会显示这些部分。为了实现这一点,我必须对主内容区域应用不同的CSS类,显然,不呈现侧边栏的内容 如果我可以在主模板中使用一个变量,比如{%if single_column_layout%},默认值为false,我可以在需要

我是sf2/twig的新手,我想我遗漏了一点:

我有一个带有页眉、两列中间部分和页脚的布局。中间部分的左侧是主要内容区域,右侧是33%的侧边栏。我使用twig的模板继承将我的内容放入主区域以及其他需要的地方

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

如果我可以在主模板中使用一个变量,比如
{%if single_column_layout%}
,默认值为
false
,我可以在需要时在子模板中覆盖它,那就太酷了。但我觉得我走错了方向


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

我认为不可能做到这一点。但您可以使用具有默认值的细枝块来执行此操作

我解释。在主树枝中,您可以放置以下内容:

{% block parent %}
With your value to display by default
{% endblock %}
在子对象中,如果您不想显示内容,请执行以下操作:

{% block parent %}{% endblock %}

但我不确定这种方法是否能解决您的问题。

您可以使用细枝块继承:

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

PD:
{%block name content%}
是一种针对内容很少的块的方法

是的,这是通常的细枝继承,这会使我摆脱侧边栏内容,但这无助于我更改主内容区域的CSS类。正如netmikey对您所说的,您可以将不感兴趣的部分留空,输入到您的子模板中。如果您想“动态”更改类,我建议您将类直接分配到要扩展到子模板的块(main)中。通过这种方式,你可以简单地扩展你的父母,这是好的。否则您可以覆盖它并更改类。是的,这是一个选项。该解决方案唯一的缺点是,我必须同时做这两件事:覆盖侧块并在每个子模板中设置CSS类,我希望在其中有一个单独的列布局,但我想这是我的最佳选择,所以我接受这个答案。
{% extends "layout.html.twig" %}
{% block column_layout 'two-column' %}
{% block content %}
     content here
{% endblock %}