我将卡片(一些数据)从控制器发送到树枝,然后用3个元素创建行。
{% for elem in Cards|batch(3) %}
<div>
<div class="row">
{% include ':appviews/elements/Card:Card.html.twig' with {'elem': elem} %}
</div>
</div>
{% endfor %}
它运作良好,但现在我需要添加静态html卡(不是来自Data),必须渲染一次。 有没有办法,在第一个循环中只添加2个elems?
{% for elem in Cards|batch(3) %}
<div>
<div class="row">
{% if loop.first %}
<div class="col-md-4 noPadding margin">
<div class="square"> SOME TEXT</div>
</div>
{% endif %}
{% include ':appviews/elements/Card:Card.html.twig' with {'elem': elem} %}
</div>
</div>
{% endfor %}
答案 0 :(得分:1)
使用“批量”过滤器无法执行此操作。我建议你使用一些逻辑技巧。可能有很多,取决于:
例如,如果您在开始时只需要一次,则可以将数组切片一次,然后再将其切片:
{% for elem in Cards|slice(0, 1) %}
<div>
<div class="row">
{% if loop.first %}
<div class="col-md-4 noPadding margin">
<div class="square"> SOME TEXT</div>
</div>
{% endif %}
{% include ':appviews/elements/Card:Card.html.twig' with {'elem': elem} %}
</div>
</div>
{% endfor %}
{% for elem in Cards|slice(2, Cards|length) %}
...
{% endfor %}
如果您认为复制/粘贴过多,您可以为“行”创建一个宏,其中包含一些参数并包含所有逻辑。然后你可以控制,如何,何时和什么呈现。但在简单的情况下这可能是一个过载,所以你决定:
答案 1 :(得分:0)
嗯,最终的代码是:
<div class="row rowQuest">
<div class="col-md-4 noPadding margin">
<div class="square">HARDCODED CARD</div>
</div>
{% set firstPartOfQuests = quests|slice(0,2) %}
{% for elem in firstPartOfQuests|batch(2) %}
{% include 'appviews/elements/questCard/questCard.html.twig' with {'elem': elem} %}
{% endfor %}
</div>
{% set lastPartOfQuests = quests|slice(2,quests|length) %}
{% for elem in lastPartOfQuests|batch(3) %}
<div class="row rowQuest">
{% include ':appviews/elements/questCard:questCard.html.twig' with {'elem': elem} %}
</div>
{% endfor %}
PS我仍然不明白为什么我不能在没有批次的情况下使用循环。
{% for elem in first2Quests %}
{% include 'appviews/elements/questCard/questCard.html.twig' with {'elem': elem} %}
{% endfor %}