嫩枝批次条件
问题描述:
我从控制器发送卡(一些数据)枝杈并用3个elems的创建一行。嫩枝批次条件
{% for elem in Cards|batch(3) %}
<div>
<div class="row">
{% include ':appviews/elements/Card:Card.html.twig' with {'elem': elem} %}
</div>
</div>
{% endfor %}
它运行良好,但现在我需要添加静态HTML(不是来自数据),必须呈现一次卡。 有没有办法,在第一个循环中只添加2个元素?
{% 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 %}
答
你不能用“批量”过滤器来做到这一点。我建议你使用一些逻辑技巧。可以有很多的,这取决于:
- 要插入的硬编码块
- 多少码/模板片被重用
例如如何经常做,如果你只需要这一次,在开始的时候,你可以切片的阵列一次,然后再分析它:
{% 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 %}
如果你觉得有太多的复制/粘贴回事,您可以为“行”创建宏,带有一些参数并具有所有逻辑。然后你可以控制,如何,何时以及呈现什么。但是,这可以是简单的情况下超负荷,所以你决定:
答
那么,最终的代码是:
<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 %}
谢谢!解决方案已经准备就绪,但我在第6-8行有一些问题。转储工作,但包括不起作用!它如何不能? https://codeshare.io/rMuAf –
我不熟悉这样的Symfony参考:包括“:应用浏览量/元/ questCard:questCard.html.twig”查看文档和修复路径:http:// symfony的。 com/doc/2.8/best_practices/templates.html#template-locations http://symfony.com/doc/2.8/book/templating.html#referencing-templates-in-a-bundle PS。我仍然建议你使用宏而不是include。这将是完全相同的代码,但更易于阅读。 – lllypa