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

if语句中的Shopify(液体)多个条件,shopify,liquid,Shopify,Liquid,我在所有集合中循环,并创建一个预览项目,其中包含每个集合标题、图像和链接。但我想排除15个系列 目前我正在使用“contains”来排除我不想要的15个,但是我想知道是否有更干净的方法来编写这个,因为它是一个非常长的if条件 提前谢谢 示例如下: {% for collection in collections %} {% if collection.title contains 'collection-1' or collection.title contains 'coll

我在所有集合中循环,并创建一个预览项目,其中包含每个集合标题、图像和链接。但我想排除15个系列

目前我正在使用“contains”来排除我不想要的15个,但是我想知道是否有更干净的方法来编写这个,因为它是一个非常长的if条件

提前谢谢

示例如下:

{% 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 %}

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

例如:

{% 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 %}
工作原理:

  • 我们不能直接在液体中创建数组-我们只能通过获取字符串并使用拆分过滤器创建数组来创建数组
  • 通过使用句柄,我们可以保证列表值只包含字母、数字和连字符-我们的分隔符(在本例中为逗号)不可能意外显示为值的一部分
  • 我们不希望空格成为数组值的一部分,所以在使用拆分过滤器之前先删除它们。相反,我们可以不在每个值之间加空格,而是在我的大脑中,读起来像是对语法的严重滥用。第一次省略空格或在创建字符串后删除空格都可以
  • 现在我们有了排除数组,当我们循环集合时,我们可以检查当前集合的句柄是否显示在列表中
  • 如果找到,请使用
    continue
    语句跳到下一个集合-这将节省一层缩进,因为我们不必在
    If
    后面跟一个包含我们要执行的所有操作的
    else
就这样!希望有帮助:)


注意:有关Shopify中句柄的更多信息,请参见实现排除的替代方法:

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

但是,如果我们在你的管理员中查看收藏页面,我们不会得到很多有用的信息:我们看到的只是标题、描述等内容,甚至没有一个地方可以给收藏指定标签

幸运的是,集合能够有元字段——Shopify只是对普通用户隐藏了该功能。元字段允许您为商店中的对象(产品、集合、页面等)创建附加信息,然后可以通过Liquid引用这些信息

您可以在此处阅读有关Shopify使用元字段的更多信息:

我以前最喜欢的访问元字段的插件是ShopifD,它是一个浏览器扩展,可以让你在收藏页面上查看和编辑元数据,但不幸的是,Shopify最近对管理员的更改破坏了该插件。作者正在编写一个新版本,但在撰写本文时尚未准备好:

(注意:我没有尝试过上面链接文章中列出的任何其他元域编辑工具-当ShopifD出现问题时,我开始使用管理API进行元域编辑,并自己创建/发布请求:)

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

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

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

还要注意:此答案与发布的示例之间的一个区别是,
contains
在字符串和数组上使用时的行为略有不同。与字符串一起使用时,
contains
如果与第一个值的任何子字符串匹配,则为true。在数组上使用时,
contains
仅当数组中的值与搜索词完全匹配时才会返回true。在您的示例中,标题为“collection-10”、“pokemon-collection-1-of-1000”和“Best of Jazz:collection-1”的集合都与您的第一次检查匹配,但在使用数组时只有“collection-1”匹配。感谢您的回答!我将研究metafield插件,否则排除数组有意义:)不用担心!希望您能找到最适合您的情况的解决方案:)