2015-07-02 89 views
7

我有這樣的循環:樹枝for循環把每2個元素在一個新的容器

{% for div in myHandleHere %} 

    <div> {{ block.text }} </div> 

{% endfor %} 

這實際上輸出是這樣的:

<div> one </div> 
<div> two </div> 
<div> three </div> 
<div> ... </div> 

我要的是,每2格,把他們在新的容器,如:

<div class="container"> 
    <div> one </div> 
    <div> two </div> 
</div> 
<div class="container"> 
    <div> three </div> 
    <div> ... </div> 
</div> 

請幫

回答

2

你想要做的就是保持你在哪一行的計數,或者有一個嵌套循環。方便地Twig有幾個我們可以使用的內置loop variables

事情是這樣的:

{% for div in myHandleHere %} 
    {% if loop.index is odd %} 
     <div class="container"> 
    {% endif %} 

    <div> {{ block.text }} </div> 

    {% if loop.index is even or loop.last %} 
     </div> 
    {% endif %} 
{% endfor %} 

遍歷所有的塊。在每次迭代中,如果循環計數器是奇數,即塊1,3,5等,則開始新的<div class="container">

如果循環計數器是偶數,即塊2,4,6等,則關閉</div>

此外,如果你在最後一個塊,確保並關閉父div,例如,如果你只有一個奇數塊,你想輸出HTML這樣的:

<div class="container"> 
    <div> one </div> 
    <div> two </div> 
</div> 
<div class="container"> 
    <div> three </div> 
    <div> four </div> 
</div> 
<div class="container"> 
    <div> five</div> 
</div> 
7

在這種情況下,最好的解決辦法是使用大batch filter允許分批處理元素:

{% for pair in myHandleHere|batch(2) %} 
    <div class="container"> 
     {% for element in pair %} 
      <div>{{ element }}</div> 
     {% endfor %} 
    </div> 
{% endfor %} 
+0

這工作。在上面的答案中描述的檢查odd/even'loop.index'的方法對我並不適用。很顯然,Symfony在if語句的第一部分中只是打開標記,然後在else語句中關閉標記。 – cincplug

相關問題