【问题标题】:Listing unique data from liquid objects列出来自液体对象的唯一数据
【发布时间】:2012-11-30 04:23:34
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby liquid locomotivecms


    【解决方案1】:

    我回答你的问题有点晚了,但也许这会帮助其他人在同样的问题上苦苦挣扎。这有点 hacky,因为 Liquid 逻辑往往如此,但它有效(至少对我来说,在 Shopify 上)。

    假设您有一个如下所示的“页面”数组:

    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' ]
    

    【讨论】:

    • 谢谢!真的很烦人,它是如此先进,而且不只是一个{% assign names_uniq = names | unique %} 过滤器:-(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多