嫩枝批次条件

问题描述:

我从控制器发送卡(一些数据)枝杈并用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 %} 

如果你觉得有太多的复制/粘贴回事,您可以为“行”创建宏,带有一些参数并具有所有逻辑。然后你可以控制,如何,何时以及呈现什么。但是,这可以是简单的情况下超负荷,所以你决定:

http://twig.sensiolabs.org/doc/tags/macro.html

+0

谢谢!解决方案已经准备就绪,但我在第6-8行有一些问题。转储工作,但包括不起作用!它如何不能? https://codeshare.io/rMuAf –

+0

我不熟悉这样的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

那么,最终的代码是:

<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 %}