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


How can I conditionally override a TWIG layout block?

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

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

我试图实现的是,只有当名为modal的变量为true时,才不显示页眉和页脚块。我在if语句下面也有这个:

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

这里发生的情况是,无论modal的值是true还是true,我清空页眉和页脚块的覆盖始终运行。所以,我用传递为false的modal来运行这个,结果是页眉和页脚仍然没有显示。dump命令的输出准确地显示true或false,但if语句中的条件似乎总是计算为true。

块可以不封装在条件语句中吗?或者我需要做一些额外的事情来实现这一点吗?

谢谢你能提供的任何帮助。

定义

{% block footer %}Some standard content{% endblock %}

在父分支模板中。然后在你想决定是否显示页脚内容的模板中,你可以做:

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

如果模态为true,页脚将为空,如果不是,页脚中将打印"某些标准内容"

正如文档中所说,块不关心它周围的任何逻辑:

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

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