2016-11-01 16 views
0

Ich habe einige Bilder, die ich nach Monaten anzeigen möchte.Zeige etwas nur einmal in einer Schleife im Zweig

Aber ich meine Code Ich bekomme den Monat oben auf jedem Bild.

Wie vermeide ich das?

{% for media in medias %} 
 
    {% if media.date|date("m") == 10 and media.assetpath is not null %} 
 
     <h2>Photos october</h2> 
 
     <div class="col-xs-2"> 
 
     <img class="img-responsive" src="{{ asset(media.assetpath) }}"/> 
 
     </div> 
 
    {% elseif media.date|date("m") == 11 and media.assetpath is not null %} 
 
     <h2>Photos november</h2> 
 
     <div class="col-xs-2"> 
 
     <img class="img-responsive" src="{{ asset(media.assetpath) }}"/> 
 
     </div> 
 
    {% else %} 
 
     <h2>other month</h2> 
 
     <div class="col-xs-2"> 
 
     <img class="img-responsive" src="{{ asset(media.assetpath) }}"/> 
 
    </div> 
 
{% endif %} 
 
{% endfor %}

+0

Hängt weitgehend davon ab, aus was "Medien" besteht. Ich denke, dass Sie über jedes Medium iterieren und nur gegen eine statische Zahl prüfen. Ich sehe keine Kontrolle gegen den aktuellen Monat. Schauen Sie sich auch 'loop.first' an. –

Antwort

1

Unter der Annahme, dass medias eine Anordnung nach dem Datum sortiert ist, kann das Problem unter Verwendung einer temporären Variablen gelöst werden:

{% set last_month = '' %} 
{% for media in medias %} 
    {% set month = media.date('F')|lower %} 
    {% if last_month and month != last_month %} 
    <h2>Photos {{ month }}</h2> 
    {% endif %} 
    {% set last_month = month %} 

    <div class="col-xs-2"> 
    <img class="img-responsive" src="{{ asset(media.assetpath) }}"/> 
    </div> 
{% endfor %} 

aber ich würde eher eine geeignetere Struktur erzeugen , zB:

$media = [ 
    'November' => [ 
    [ /* media 1 */], 
    [ /* media 2 */], 
    // ... 
    ], 
    // ... 
]; 

Mit dieser Struktur sieht der Vorlagencode viel sauberer aus:

+0

+1 für die zweite Hälfte der Antwort. Das Problem mit der ersten Hälfte ist, dass Sie nicht wissen, wie das Medien-Array sortiert ist, daher könnte es möglich sein, dass Sie etwas wie "Januar", "März", "Januar", ... bekommen. – DarkBee

Verwandte Themen