2012-01-23 11 views
32

Jeśli mam pętlę for in Liquid (używając Jekyll), jak mogę kierować tylko na elementy parzyste (lub nieparzyste)? Próbowałem:Płynne szablony: parzyste/nieparzyste elementy w pętli for

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

ale to nie wydaje się działać. Próbowałem również:

(forloop.index % 2) == 1 

oraz:

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

Odpowiedz

52

myślę, że chcesz użyć tagu cyklu do tego. Na przykład:

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

Jeśli chcesz inny znaczników HTML dla każdego cyklu:

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

można znaleźć więcej informacji na jej temat w Liquid for Designers, chociaż na przykład nie jest szczególnie pomocne. Ta Shopify support thread powinna również pomóc.

+1

To nie było dokładnie to, czego szukałem, ale link znalazłeś załatwił mi prawdziwą odpowiedź. Zmienilem twoją odpowiedź na moje rozwiązanie. Dzięki! –

+0

Również twoje rozwiązanie działałoby, gdybym chciał używać tylko CSS, ale chciałem podzielić 'site.posts' na dwie kolumny, więc tylko przełączanie klas nie było dla mnie wystarczające. –

+0

Tak, nie byłem pewien, czy chcesz używać CSS, czy nie. Cieszę się, że mogę Ci pomóc! –

10

W przeciwieństwie do tego, co Shopify support thread w Ales Lande's answer mówi tam jestmodulo funkcja w płynie - w formie the modulo filter.

Dzięki nim, można to zrobić:

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

Podoba mi się to rozwiązanie lepiej niż przy użyciu 'cyklu'; rozwiązanie problemu matematycznego za pomocą łańcucha wydaje się ... dziwne! –