2012-01-23 13 views
32

Se ho un ciclo for in Liquid (utilizzando Jekyll), come posso indirizzare solo oggetti (o dispari)? Ho provato:Modelli liquidi: elementi pari/dispari in per ciclo

{% for item in site.posts %} 
    {% if forloop.index % 2 == 1 %} 

ma quello non sembra funzionare. Ho anche provato:

(forloop.index % 2) == 1 

e:

forloop.index - (forloop.index/2 * 2) == 1 

risposta

52

Penso che si vorrà utilizzare il tag per questo ciclo. Per esempio:

{% for post in site.categories.articles %} 
    <article class="{% cycle 'odd', 'even' %}"></article> 
{% endfor %} 

Se volete diverso markup HTML per ogni ciclo:

{% for item in site.posts %} 
    {% capture thecycle %}{% cycle 'odd', 'even' %}{% endcapture %} 
    {% if thecycle == 'odd' %} 
    <div>echo something</div> 
    {% endif %} 
{% endfor %} 

Potete trovare ulteriori informazioni su di esso a Liquid for Designers, anche se l'esempio non è particolarmente utile. Questo Shopify support thread dovrebbe anche aiutare.

+1

Non era esattamente quello che stava cercando, ma il link che hai trovato mi ha fatto la vera risposta. Ho modificato la tua risposta per includere la mia soluzione. Grazie! –

+0

Inoltre, la tua soluzione funzionerebbe se volessi usare solo i CSS, ma volevo dividere 'site.posts' in due colonne, quindi solo il cambio di classe non era abbastanza per me. –

+0

Sì, non ero sicuro se stavi cercando di usare i CSS o meno. Felice di aiutare però! –

10

In contrasto con ciò che il Shopify support thread in Ales Lande's answer dice, non v'è una funzione modulo in liquido - in forma di the modulo filter.

Con esso, si può fare questo:

{% for item in site.posts %} 
    {% assign mod = forloop.index | modulo: 2 %} 
    {% if mod == 0 %} 
     <!-- even --> 
    {% else %} 
     <!-- odd --> 
    {% endif %} 
{% endfor %} 
+1

Mi piace questa soluzione meglio di quella che usa 'cycle'; risolvere un problema matematico usando una stringa sembra ... strano! –

Problemi correlati