液体模板:for循环中的偶数/奇数项目
Posted
技术标签:
【中文标题】液体模板:for循环中的偶数/奇数项目【英文标题】:Liquid templates: even/odd items in for loop 【发布时间】: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
【问题讨论】:
【参考方案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 但试图将“帖子”(标准集合)排除在外,则此解决方案将不起作用。以上是关于液体模板:for循环中的偶数/奇数项目的主要内容,如果未能解决你的问题,请参考以下文章
用php打出1到100之间的偶数之和,还有奇数之和,还有定义一个变量,用for循环打出来,总共三个