web-dev-qa-db-fra.com

Modèles liquides: éléments pairs / impairs dans la boucle

Si j'ai une boucle for dans Liquid (en utilisant Jekyll), comment puis-je cibler uniquement les articles pairs (ou impairs)? J'ai essayé:

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

mais cela ne semble pas fonctionner. J'ai aussi essayé:

(forloop.index % 2) == 1

et:

forloop.index - (forloop.index / 2 * 2) == 1
46
Adam Kiss

Je pense que vous voudrez utiliser la balise cycle pour cela. Par exemple:

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

Si vous souhaitez un balisage HTML différent pour chaque cycle:

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

Vous pouvez trouver plus d'informations à ce sujet sur Liquid for Designers , bien que l'exemple ne soit pas particulièrement utile. Cela fil de support Shopify devrait également aider.

68
Alex Lande

Contrairement à ce que le fil de support Shopify dans réponse d'Ales Lande dit, il y a un modulo fonction dans Liquid - sous forme de le filtre modulo .

Avec lui, vous pouvez le faire:

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