我是sf2 / twig的新手,我想我在某个地方错过了一点:
我有一个带有标题,两列中间部分和页脚的布局。中间部分的左侧是主要内容区域,右侧是33%的侧边栏。我使用twig的模板继承将我的内容放入主区域,否则需要。
现在,我们页面的某些部分的内容区域必须占据整个宽度,因此右侧的侧边栏不会显示在这些部分中。为了实现这一点,我必须将不同的CSS类应用于主要内容区域,显然,不要呈现侧边栏的内容。
如果我可以在{% if single_column_layout %}
这样的主模板中使用变量,默认值为false
,我可以在需要时覆盖子模板,这样会很酷。但感觉我正朝着错误的方向前进......
以更一般的方式,在由一堆构建块组成的页面上,如何最好地控制每页显示哪些块以及哪些块不显示?
答案 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 %}
但我不确定这样可以解决你的问题。