如何有条件地覆盖TWIG布局块?

时间:2013-02-06 21:05:06

标签: php templates symfony twig

首先,让我开始尝试使用的代码:

{% if modal == true %}
    {% block header %}{% endblock %}
    {% block footer %}{% endblock %}
{% endif %}

我想要完成的是,如果名为modal的变量为true,则不显示我的页眉和页脚块。我在if声明下面也有这个:

{% block content %}
    {{ dump(modal) }}
{% endblock %}

这里发生的事情是,无论modal的值是否为true,我的覆盖以清空页眉和页脚块总是会运行。因此,我运行此模式传入的模式为false,结果是页眉和页脚仍然没有显示。 dump命令的输出准确显示true或false,但if语句中的条件似乎总是评估为true。

块可以不包含在条件语句中,还是需要做一些额外的工作才能使其工作?

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:48)

定义

{% block footer %}Some standard content{% endblock %}
在父树枝模板中

。 然后在模板中,您要决定是否可以显示页脚的显示内容:

{% block footer %}
  {% if not modal == true %}
    {{ parent() }}
  {% endif %}
{% endblock %}

如果模态为真 - 页脚将为空,如果不是 - 页脚将打印“某些标准内容”

答案 1 :(得分:23)

块不关心它周围的任何逻辑,如the documentation中所述:

  

一个块提供了一种方法来改变模板的某个部分的呈现方式,但它不会以任何方式干扰它周围的逻辑。

您应该将该逻辑放在块中,而不是放在外部,正如您在该文章的最后一个示例中所看到的那样。