如何在Liquid中对集合进行分组?

时间:2012-10-27 00:23:35

标签: jekyll liquid

我有一个Jekyll应用程序(使用Liquid),我想知道如何在Liquid中将一组项目分组到一小部分集合中。

例如,假装我有这个数组:

fruits = ['apples', 'oranges', 'bananas', 'pears', 'grapes']

在Liquid页面中,我真正想做的是:

fruit_groups = [['apples', 'oranges'], ['bananas', 'pears'], ['grapes', null]]

例如,Ruby on Rails可以使用附加到枚举的.group_by方法执行此操作。

我可以在Liquid中这样做吗?

使用案例:我有很多项目,但我需要将它们转换为<ul>元素的列。所以,如果我有三列,我需要获得三个子集。

谢谢!

1 个答案:

答案 0 :(得分:2)

这不直接回答你的问题,但我不确定你是否想要做你所描述的(我很确定你不能) - 液体是一个模板系统,而​​不是一种完全成熟的编程语言。我怀疑你能够使用一些for循环和循环功能来实现你的最终目标:http://code.google.com/p/liquid-markup/wiki/UsingLiquidTemplates

例如:

<ul>
{% for fruit in fruits %}
    {% capture pattern %}{% cycle 'odd_class', 'even_class' %}{% endcapture %}
        <li class={{ pattern }}>{{ fruit }}</li>
{% endfor %}
</ul>

<ul class="odd">
{% for fruit in fruits %}
    {% capture pattern %}{% cycle 'odd', 'even' %}{% endcapture %}
    {% if pattern == 'odd' %}
        <li>{{ fruit }}</li>
    {% endif%}
{% endfor %}
</ul>

<ul class="even">
{% for item in fruits %}
    {% capture pattern %}{% cycle 'odd', 'even' %}{% endcapture %}
    {% if pattern == 'even' %}
        <li>{{ fruit }}</li>
    {% endif%}
{% endfor %}
</ul>

如果您有三个专栏,那么您的周期中只需要三个步骤,并且在if语句中有三个方向。

如果一切都失败了,你可以编写一个插件(在Ruby中),它会在你的数据到达模板层之前对其进行重组,但我怀疑这会有点过分。