我正在尝试建立一个页面,该页面显示一个集合列表,例如常规的“ list-collections.liquid”,但仅显示包含带有特定产品标签的产品的集合。
我试图这样做:
{% assign var = 'test' %}
{% assign tagtrue = false %}
{% for collection in collections %}
{% unless collection.handle == 'frontpage' %}
{% for product in collection.products %}
{% for tag in product.tags %}
{% if tag contains var %}
{% assign tagtrue = true %}
{% endif %}
{% endfor %}
{% endfor %}
{% if tagtrue == true %}
<a href="{{ collection.url }}" title="{{ 'collections.general.link_title' | t: title: title }}">
{% if collection.image != blank %}
{{ collection | img_url: '480x480' | img_tag: collection.title }}
{% elsif collection.products.first != blank %}
{{ collection.products.first | img_url: '480x480' | img_tag: collection.title }}
{% else %}
{% capture current %}{% cycle 1, 2, 3, 4, 5, 6 %}{% endcapture %}
{{ 'collection-' | append: current | placeholder_svg_tag: 'placeholder-svg placeholder-svg--small' }}
{% endif %}
</a>
<p>
<a href="{{ collection.url }}" title="{{ 'collections.general.link_title' | t: title: title }}">{{ collection.title }}</a>
</p>
{% endif %}
{% endunless %}
{% endfor %}
但是当我进入收藏列表页面时,它仍然返回所有收藏。任何想法如何做到这一点?
答案 0 :(得分:0)
如果您查看文档,会发现产品上标有收藏的特殊方法。换句话说,这为您提供了产品所属的所有集合的列表。
现在开始回答您的问题。您询问如何显示收藏列表,但仅显示包含带有特定标签的产品的收藏列表。好,可以。您将加快速度,但是一个简单的算法可能是:
完成该循环后,您将获得答案。具有特定标签的产品的收藏列表。
祝您好运,并记住保持简单。这种循环对于库存有限的小商店来说是快速的,但是如果您有成千上万个skus,并且标签分布在许多馆藏中,那么您将面临即时渲染的挑战。
答案 1 :(得分:0)
使用Shopify的map
过滤器,可以大大提高David Lazar的回答速度。
与他的答案一样,第一步是使用规则“产品包含标签”创建一个集合,然后输入您正在使用的标签。
现在假设您在名为collection
的Liquid变量中具有该集合对象,则可以通过一个简单的map
命令,然后是一个uniq
命令来获取所有集合的句柄删除所有重复项:
{% assign all_collection_handles = collection.products | map: 'collections' | map: 'handle | uniq %}
map
过滤器从成堆的对象中获取非常具体的信息,因此它比遍历具有许多您不关心的字段的许多大对象要快得多。
(请注意uniq
仅适用于字符串,数字或其他简单数据类型,这就是为什么我们一直将其映射到集合的句柄的原因)
现在您可以遍历all_collection_handles
来完成您需要做的事情:
{% for handle in all_collection_handles %}
{% assign collection = collections[handle] %}
<!-- Cool stuff here -->
{% endfor %}
由于与产品相比,您的收藏清单应该短得多,因此应该具有合理的性能。与往常一样,请注意,您在Liquid代码中所做的工作越繁重,就越有可能出现页面加载延迟,因此,请保持循环简短,并尽可能使用map
这样的集中过滤器帮助保持一切正常运行。
注意:如果您的页面开始遭受页面严重滞后的困扰,则可能要跳过页面加载过程中的操作,只保留一个占位符元素,然后使用Javascript来获取所需信息并创建您想要的显示。