我有一个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>
元素的列。所以,如果我有三列,我需要获得三个子集。
谢谢!
答案 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中),它会在你的数据到达模板层之前对其进行重组,但我怀疑这会有点过分。