-1

希望有人可以请教。我正在为 CMS 设计一个主题。我有一个基于 twig 的页面作为主题模板,因此很明显,不同类型页面的所有 Twig 块都在一个文档中。CMS 有两种类型的页面,可以通过页面构建器创建和查看。目前,所有的 Twig 块都出现在页面 A 和页面 B 中,从字体端开始。我是否可以编写一些 Twig 代码,使我能够在 A 页上显示 Twig 块,但不能在 B 页上显示?我知道我需要某种过滤器,但我是按 url 过滤,还是有更好的方法?感谢您能给我的任何帮助。

4

1 回答 1

0

要防止显示扩展模板中的块,您可以覆盖该块

主要的.twig

{% block foo %}
    Foo
{% endblock %}

{% block bar %}
    Bar
{% endblock %}

孩子.twig

{% extends "main.twig" %}
{% block foo %}{% endblock %}

上面的代码片段只会显示Bar

更进一步,您可以通过使用函数覆盖一个块并仍然让扩展模板的原始块执行{{ parent() }}

孩子.twig

{% extends "main.twig" %}
{% block foo %}
    Lorem Ipsum<br />
    {{ parent() }}
{% endblock %}

这将输出

Lorem Ipsum<br />
Foo
Bar

有了这个解释,你可以在你喜欢的任何条件下包装函数调用parent(),从而控制显示/隐藏哪个块

{% extends "main.twig" %}
{% block foo %}
    {% if conditionA == true %}
        {{ parent() }}
    {% endif %}
{% endblock %}

{% block bar %}
    {% if conditionB == true %}
        {{ parent() }}
    {% endif %}
{% endblock %}

演示

于 2021-10-27T11:56:21.173 回答