【问题标题】:Liquid templates: even/odd items in for loop液体模板:for循环中的偶数/奇数项目
【发布时间】:2012-02-17 07:23:07
【问题描述】:

如果我在 Liquid 中有一个 for 循环(使用 Jekyll),我如何才能只定位偶数(或奇数)项?我试过了:

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

但这似乎不起作用。我也试过:

(forloop.index % 2) == 1

和:

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

【问题讨论】:

    标签: jekyll liquid


    【解决方案1】:

    我想你会想为此使用循环标签。例如:

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

    如果您希望每个循环使用不同的 HTML 标记:

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

    您可以在Liquid for Designers 找到有关它的更多信息,尽管那里的示例并不是特别有用。这个Shopify support thread 也应该有帮助。

    【讨论】:

    • 这不是我想要的,但你找到的链接让我得到了真正的答案。我编辑了您的答案以包含我的解决方案。谢谢!
    • 另外,如果我只想使用 CSS,您的解决方案也可以工作,但我想将 site.posts 分成两列,所以只有类切换对我来说是不够的。
    • 是的,我不确定您是否希望使用 CSS。不过很高兴能提供帮助!
    • 您的示例效果很好,尽管我需要在我的一个循环中添加一个偏移量才能让它为我工作。
    • 我得到了答案,但是为什么模数版本不起作用?
    【解决方案2】:

    Ales Lande's answer 中的Shopify support thread 所说的相反,Liquid 中一个modulo 函数 - 形式为the modulo filter

    有了它,你可以这样做:

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

    【讨论】:

    • 我比使用cycle 的解决方案更喜欢这个解决方案;使用字符串解决数学问题似乎......很奇怪!
    • 如果您有条件地跳过循环中的任何内容,例如循环通过 site.collections 但试图将“帖子”(标准集合)排除在外,则此解决方案将不起作用。
    猜你喜欢
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多