2016-06-21 67 views
0

我從控制器發送卡(一些數據)枝杈並用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 %} 

回答

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

如果你覺得有太多的複製/粘貼回事,您可以爲「行」創建宏,帶有一些參數並具有所有邏輯。然後你可以控制,如何,何時以及呈現什麼。但是,這可以是簡單的情況下超負荷,所以你決定:

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

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