我有一个带有以下块的树枝模板:
{% block dashboard %}
{% include "::user_dashboard.html.twig" %}
{% endblock dashboard %}
稍后在该模板中,我想根据该块中是否有任何内容在div上设置一个类(即,默认情况下,它将包含上面的包含,但此模板的子项可能会覆盖它并且把它清空。
我所拥有的(有点有效)是......
{% 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行 - 这两个实际上似乎都包含并处理了包含的内容。
答案 0 :(得分:0)
这个怎么样?这样,当您调用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 }}">