列出液体对象的唯一数据

时间:2012-11-30 04:23:35

标签: ruby-on-rails ruby liquid locomotivecms

我需要能够获取液体中的对象列表,并以特定格式在页面上显示它们。

如果我有一组对象(页面),我需要能够以下列方式打印它们:

列出类别名称(page.category.name)

列出每个子类别名称以及每个子类别名称下的页面列表(page.subcategory.name和page.title)

通常在红宝石中我会简单地对页面进行分组,但我不能在液体中进行分组。我尝试的另一件事是捕获页面的类别和子类别的唯一列表,但我找不到从阵列中获取唯一项目列表的方法。任何建议的帮助都会很棒。

1 个答案:

答案 0 :(得分:5)

我回答你的问题有点迟了,但也许这会帮助其他人解决同样的问题。它有点hacky,就像Liquid逻辑一样,但是它起作用(至少对我而言,在Shopify上)。

假设你有一个'pages'数组,如下所示:

pages = [
    { name: 'Page 1', category: { name: 'pants'  } },
    { name: 'Page 2', category: { name: 'pants'  } },
    { name: 'Page 3', category: { name: 'shoes'  } },
    { name: 'Page 4', category: { name: 'shirts' } },
    { name: 'Page 5', category: { name: 'shoes'  } }
]

此代码仅返回唯一的类别名称:

{% assign delimiter = "," %}
{% assign names_str = "" %}
{% assign names = pages | map: 'category' | map: 'name' %}

{% for name in names %}
    {% assign names_arr = names_str | split: delimiter %}
    {% unless names_arr contains name %}
        {% assign names_str = names_str | append: delimiter | append: name %}
    {% endunless %}
{% endfor %}
{% assign names_uniq = names_str | remove_first: delimiter | split: delimiter %}

结果:

names_uniq => [ 'pants', 'shoes', 'shirts' ]