2015-07-02 11 views
7

mam tej pętli:gałązka pętli umieścić co 2 elementy w nowym pojemniku

{% for div in myHandleHere %} 

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

{% endfor %} 

To faktycznie wyprowadza coś takiego:

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

Co chcę to, co 2 div, umieścić je w nowym pojemniku, jak:

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

Proszę o pomoc

Odpowiedz

2

To, co chcesz zrobić, to albo sprawdzić, w którym wierszu jesteś, albo zagnieżdżoną pętlę. Dogodnie Twig ma kilka wbudowanych loop variables, których możemy użyć.

coś takiego:

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

Pętla po wszystkich blokach. W każdej iteracji, jeżeli licznik pętli jest nieparzysty, tj. Bloki 1, 3, 5 itd., Należy rozpocząć nową <div class="container">.

A jeśli licznik pętli jest równy, tj. Bloki 2, 4, 6 itd., Zamknij ten </div>.

Również, jeśli jesteś na ostatnim bloku, upewnij się i zamknij także element nadrzędny div, np. w przypadku, gdy tylko mają nieparzystą liczbę bloków, chcesz wyjściowym HTML jak:

<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

Najlepszym rozwiązaniem w tym przypadku jest użycie wielkiej batch filter który pozwala na przetwarzanie elementów w grupach:

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

To działa. Metoda sprawdzania niepoprawnego/parzystego 'loop.index', opisana w powyższej odpowiedzi, nie zadziałała dla mnie. Wygląda na to, że Symfony ma problem z renderowaniem właśnie otwierającego tag w pierwszej części instrukcji "if", a następnie po prostu zamykając tag w instrukcji "else". – cincplug

Powiązane problemy