ruby 在shopify liquid中制作自定义集合- liquid

8aqjt8rx  于 2023-06-29  发布在  Ruby
关注(0)|答案(2)|浏览(149)

我想在collection.liquid中基于一些条件场景创建一个自定义集合,为此我应用了concatappendjoin,但问题是它返回ProductDropProductDropProductDropProductDrop...LazyProductDropCollectionLazyProductDropCollection而不是产品。下面是代码片段

{% assign custom_products = '' %}
{% for product in collections["paneer-easy-indie-bowls"].products %}
  {% assign custom_products = custom_products | append: product %}
{% endfor %}

我尝试了joinconcat而不是append,但返回了ProductDropProductDropProductDropProductDrop...

{% assign custom_products = custom_products | concat: product %}

然后我尝试了以下方法:

{% capture custom_products %}
  {% for product in collections["paneer-easy-indie-bowls"].products %}
    {{ custom_products }},{{ product.handle }}
  {% endfor %}
{% endcapture %}

{% assign custom_products = custom_products | split: ',' %}

{% for product in custom_products %}
  {{ product}}
{% endfor %}

但是这个代码没有以正确的方式添加产品。我想要像{{collection.products}}一样的产品。有什么建议吗?

brc7rcf0

brc7rcf01#

如果我没有看错您的伪代码,您正试图从一个产品集合构建一个产品集合。这就引出了一个问题,为什么?既然你已经有了一个完美的收藏,就照原样使用吧!

ggazkfy8

ggazkfy82#

遗憾的是,这些字符串过滤器不能用于Liquid对象。
如果您能够创建一个包含所有这些自定义产品的集合,那将是最好的。
但是如果您想要的自定义产品没有任何相关性,并且太多而无法手动添加到新集合中,

  • 您可以尝试在每个集合上循环,并为每个迭代呈现HTML。

您可以使用if/unless语句或“where”过滤器来过滤迭代中的产品。

  • 如果你想实现更复杂的东西,

考虑使用相同的Liquid迭代创建JavaScript对象。
例如:

<script>
  const customProducts = [
    {% for product in collections['collection1'].products -%}
      {{ product | json }},
    {%- endfor %}
    {% for product in collections['collection2'].products -%}
      {{ product | json }},
    {%- endfor %}
    {% for product in collections['collection3'].products -%}
      {{ product | json }}{%- unless forloop.last -%},{%- endunless -%}
    {%- endfor %}
  ]
</script>

然后你就可以用JavaScript来处理任何事情了。
当然,这是不太推荐的,如果你能只使用Liquid和HTML来处理所有事情,那就最好了。

相关问题