我有一个带有以下块的树枝模板:

{% block dashboard %}
    {% include "::user_dashboard.html.twig" %}
{% endblock dashboard %}


在该模板的后面,我想基于该块中是否有任何内容在div上设置一个类(即,默认情况下,它将具有上面的include,但是此模板的子代可以覆盖它并将其清空)。

我所拥有的(有点奏效)是...

{% set _dashboard = block('dashboard') %}
{% set _mainWidth = ( _dashboard|trim is empty ? "no-dashboard" : "with-dashboard" ) #}
<div id="main" class="{{ _mainWidth }}">


这里的问题是整个仪表板块被调用两次。除了块会渲染一些控制器动作外,这不会让我感到困扰,即...

{% render "UserWidget:userAppMenu" %}


...,并且该操作中的代码被调用了两次。由于各种原因,其中最重要的就是性能,这与该仪表板块中的某些内容混为一谈。

所以,我的问题是……有没有办法在不加载两次的情况下判断该块是否为空?有没有我真正想念的东西,甚至有可能吗?

谢谢!

编辑:

这是我的完整模板,如果它有助于澄清问题:

{% extends '::base.html.twig' %}

{% block layout %}

{% block header %}
    {% include "::header.html.twig" %}
{% endblock header %}

<div id="container" class="row-fluid">

    {% block dashboard %}
        {% include "::user_dashboard.html.twig" %}
    {% endblock dashboard %}

    {% set _dashboard = block('dashboard') %}
    {% set _mainWidth = ( _dashboard|trim is empty ? "no-dashboard" : "with-dashboard" ) %}
    <div id="main" class="{{ _mainWidth }}">
        <h1 class="page-title">{% block page_title %}{% endblock %}</h1>
        {% block main_filters %}{% endblock %}

        {% if app.session.flashbag.has('message') %}
          <div class="alert alert-block alert-success">
            <ul>
                {% for flashMessage in app.session.flashbag.get('message') %}
                    <li>{{ flashMessage }}</li>
                {% endfor %}
            </ul>
          </div>
        {% endif %}

        {% if app.session.flashbag.has('warning') %}
          <div class="alert alert-block alert-success">
            <ul>
                {% for flashWarning in app.session.flashbag.get('warning') %}
                    <li>{{ flashWarning }}</li>
                {% endfor %}
            </ul>
          </div>
        {% endif %}

        {% block body %}{% endblock %}

        {% block footer %}
            {% include "::footer.html.twig" %}
        {% endblock footer %}
    </div>

</div>

{% endblock layout %}


在这里,您可以在第11行和第15行上看到-这两个行似乎都包含并处理其中的内容。

最佳答案

那这个呢?这样,当您调用block('dashboard')时,该块仅应呈现一次。

{# at top of twig #}
{% set _dashboard = block('dashboard') %}

{# where ever you include your block #}
<div>
    {{ _dashboard|raw }}
</div>

{# and your main #}
{% set _mainWidth = ( _dashboard|trim is empty ? "no-dashboard" : "with-dashboard" ) #}
<div id="main" class="{{ _mainWidth }}">

关于symfony - Twig 块是空的吗? -Symfony 2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16679200/

10-14 15:51