3

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

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

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

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

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

4

2 回答 2

4

您可以为此使用树枝块继承:

{# 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 %}是内容少的块的快捷语法

于 2012-11-21T13:17:01.447 回答
0

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

我解释。在主树枝中,你把这个:

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

在孩子中,如果您不想显示内容,请执行以下操作:

{% block parent %}{% endblock %}

但我不确定这种方式能解决你的问题。

于 2012-11-21T00:17:15.010 回答