Liquid - 了解 'where' 的使用

Liquid - Understanding the use of the 'where'

我正在尝试在 shopify 中创建一个导航菜单,如果客户有标签 'X' 并且该标签 一个集合,则显示相应的集合link 在菜单中。虽然我不确定我是否正确理解 'where' 属性 的用法。

我对液体完全陌生,所以请原谅任何错误。

根据文档,位于 here。 'Where',创建一个数组,仅包含具有给定 属性 值的对象,或默认情况下的任何真值。所以理论上我认为我可以在我的 link 数组中使用它。

这是文档的示例

All products:
{% for product in products %}
  {{ product.title }}
{% endfor %}

{% assign kitchen_products = products | where: "type", "kitchen" %}

Kitchen products:
{% for product in kitchen_products %}
  {{ product.title }}
{% endfor %}


Output:
All products:
 - Vacuum
 - Spatula
 - Television
 - Garlic press
    
Kitchen products:
 - Spatula
 - Garlic press

这是我的尝试

<!-- custom collection loop for sidebar navigation -->
{% if customer.tags != blank %}
  {% assign link = linklists.main-collections.links | where: link.title, customer.tags %} // This line in particular...
    {% for link in linklists.main-collections.links %}
        {% assign outer_index = forloop.index %}
        {% if link.links != blank %}
            {% assign has_active_link = false %}
            {% if link.active or link.child_active %}
                {% assign has_active_link = true %}
            {% endif %}
            <li class="site-nav--has-submenu site-nav__item"></li>
        {% else %}
            <li class="site-nav__item {{ collection.handle }}-collection {% if link.active %} site-nav--active{% endif %}">
                <a href="{{ link.url }}" class="site-nav__link" {% if link.active %} aria-current="page" {% endif %}>{{ link.title | escape }}</a>
            </li>
        {% endif %}
    {% endfor %}
{% endif %}
<!-- / end custom collection loop for sidebar navigation -->

如能就我的问题提供任何指导,我们将不胜感激。

进一步说明:

Customer A has the tags Apple, Pear, Peach

Collections exist for Apple, Pear Peach

预期输出:

<ul>
  <li><a href="/apple">Apple</a></li>
  <li><a href="/pear">Pear</a></li>
  <li><a href="/peach">Peach</a></li>
</ul>

它不会那样工作有两个原因。

  1. where 的第一部分采用 link 对象的字段 属性 键。所以应该是 "title"
  2. 而不是 link.title
  3. 第二部分应该是完全匹配条件,例如“Apple”或“Pear”。 customer.tags 是一个数组,或者 Shopify 称之为“drop”。

这里,由于标签总是唯一的,我们不需要使用where

您需要循环标记和链接。改用这个循环

{% if customer.tags.size >0  %}
{% for tag in customer.tags %}
{% for link in linklists.main-collections.links %}
{% if link.title == tag %}

... do magic here ...

{% endif %}
{% endfor %}
{% endfor %}
{% endif %}