【问题标题】:How can I conditionally override a TWIG layout block?如何有条件地覆盖 TWIG 布局块?
【发布时间】:2013-01-22 05:22:25
【问题描述】:

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

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

我想要完成的是仅当名为 modal 的变量为真时才显示我的页眉和页脚块。我在 if 语句下面也有这个:

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

这里发生的情况是,无论 modal 的值是否为真,我对清空页眉和页脚块的覆盖总是运行。因此,我使用作为 false 传入的模态运行它,结果是页眉和页脚仍然不显示。 dump 命令的输出准确地显示了真假,但在 if 语句中条件似乎总是为真。

可以不将块包装在条件语句中,还是我需要做一些额外的事情来完成这项工作?

感谢您提供的任何帮助。

【问题讨论】:

    标签: php templates symfony twig


    【解决方案1】:

    定义

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

    在父树枝模板中。 然后在要决定是否显示页脚内容的模板中:

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

    如果模态框为真 - 页脚将为空,否则 - 在页脚中将打印“一些标准内容”

    【讨论】:

    • 虽然接受的答案是正确的,但这个答案采用了这种方法并展示了如何实际实施该解决方案。 +1 为 {{ parent() }}
    • 这是最好的答案,因为它回退到默认值
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢。我只是在和一位提出同样建议的同事交谈。他说如果 modal 不正确,请尝试渲染父块。
    • 是否有任何其他提示或文档可以解决这个问题? (即无法在块之外设置样式)。我正在尝试向来自父主题的现有 div 添加一个 div 类。我正在尝试在我的子主题中执行此操作(以避免损害父主题模板文件)。我遇到的问题是有问题的 div 位于(环绕)一个块之外。所以我不确定如何向它添加类,因为如果我在子主题树枝中写一些东西会触发错误(由于它扩展了父主题的 page.html.twig,因此块之外的任何东西都是不可以的)?
    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 2011-10-30
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多