Shopify(Liquid)if语句中的多个条件

时间:2019-01-07 21:24:23

标签: shopify liquid

我要遍历所有收藏夹,并使用每个收藏夹标题,图像和链接创建一个预览项目。但是我想排除15种收藏。

目前,我正在使用“包含”来排除我不希望使用的15个,但是我想知道是否存在一种更干净的方法来编写它,因为它的条件很长。

谢谢!

以下示例:

{% for collection in collections %}
    {% if collection.title contains 'collection-1' or collection.title 
    contains 'collection-2' or collection.title contains 'collection-3' 
    or collection.title contains 'collection-4' or collection.title 
    contains 'collection-5' %}

    {% else %}

        // build item here

    {% endif %}
{% endfor %}

2 个答案:

答案 0 :(得分:1)

我将创建一个排除数组,并检查我的排除数组是否包含有问题的集合。 (而不是标题,我将使用集合句柄,因为保证句柄只能是“干净的”名称,并且保证是唯一的)

示例:

{% assign collection_exclusion_array = 'collection-1, collection-2, collection-3, collection-4, collection-5' | remove: ' ' | split: ',' %}
{% for collection in collections %}
  {% if collection_exclusion_array contains collection.handle %}
    {% continue %}
  {% endif %}
  {% comment %} Build items here {% endcomment %}
{% endfor %}

工作原理:

  • 我们无法在Liquid中直接创建数组-我们只能通过使用字符串并使用拆分过滤器创建数组来创建一个数组。
  • 通过使用句柄,我们保证列表值仅包含字母,数字和连字符-我们的定界符(在这种情况下为逗号)不会偶然显示为值的一部分。
  • 我们不希望空格成为数组值的一部分,因此我们在使用拆分过滤器之前将其删除。取而代之的是,我们不能在每个值之间放置空格,而在我的大脑中读起来就像是对语法的严重滥用。第一次删除空格或在创建字符串后删除空格都可以。
  • 现在我们有了排除数组,当我们遍历集合时,我们可以检查列表中是否显示了当前集合的句柄。
  • 如果找到了,请使用continue语句跳到下一个集合-这样可以节省一层缩进,因为我们不必在空的if后接else包含我们想要做的所有事情。

然后您就去了!希望对您有所帮助:)

注意:有关Shopify中的句柄的更多信息,请参见https://help.shopify.com/en/themes/liquid/basics/handle

答案 1 :(得分:1)

另一种实现排除的方法:

如果为集合提供某种标志,指示它们不应出现在集合循环中,则可以直接管理每个集合,而不必维护单独的列表。

但是,如果我们在您的管理员中查看收藏集页面,则不会有什么帮助:我们看到的只是标题,说明等内容。甚至没有一个给收藏集指定特定标签的地方!

幸运的是,集合能够具有元字段-Shopify只是向普通用户隐藏了该功能。元字段使您可以为商店中的对象(产品,收藏,页面等)创建其他信息,然后可以通过Liquid进行引用。

您可以在此处阅读有关Shopify使用元字段的更多信息:https://www.shopify.com/partners/blog/110057030-using-metafields-in-your-shopify-theme

我以前最喜欢的用于访问元字段的插件是ShopifyFD,这是一个浏览器扩展程序,可让您直接在收藏页上查看和编辑该元数据,但不幸的是Shopify最近对管理员的更改破坏了该插件。作者正在开发新版本,但在撰写本文时尚未准备就绪:https://freakdesign.com.au/blogs/news/shopifyfd-and-the-current-case-of-the-broken-tool

(注意:我没有尝试过上面链接的文章中列出的其他任何元字段编辑工具-当ShopifyFD开始出现问题时,我开始使用admin API进行元字段编辑并自己创建/发布请求: https://help.shopify.com/en/api/reference/metafield

一旦您有一种可以轻松设置元字段的方法(令人惊讶的是,这似乎是目前的难题),for循环逻辑就非常简单。假设为此创建的元字段具有名称空间“ preview”和键“ exclude”:

{% for collection in collections %}
  {% if collection.metafields.preview.exclude %}
    {% continue %}
  {% endif %}
  {% comment %}  Do stuff! {% endcomment %}
{% endfor %}

现在,这将跳过在自定义字段中设置了任何值的任何集合,因此,如果您对当前或将来的任何集合改变主意,则只需更改集合本身上的一个元字段即可。