创建项目的筛选列表,其中只有在产品有故事时才会出现筛选项目

Create a filter list of items where a filter item appears only if there is a story for the product

我想弄清楚如何创建一个过滤器列表,它从 _products 目录中获取产品标题,并且仅当有包含产品标题的故事时才会在列表中显示标题。

我有一个包含 11 个项目的 _products 列表,我可以显示所有项目,但我想从过滤项目列表中删除一个项目,如果它是标题!= 故事列表前面的元素一个单独的目录。

{% assign product = site.products %}
            {% for product in site.products %}
             {% for success in site.success-stories %}
                {% if product.title == success.product %}
                 <li><p class="filter label label-default" data-filter=".{{product.title | downcase}}">{{product.title}}</p></li>
                {% endif %}
             {% endfor %}
            {% endfor %} 

它的作用是仅显示具有匹配项 success-story 的项目,但如果有多个故事在其首页中包含相同的产品,它将多次显示该产品。

我已经过滤掉了,它只是显示我无法过滤的项目。

谢谢!

我感觉您正在寻找 contains 过滤器。 直接取自 Liquid for Designers wiki:

# array = 1,2,3
{% if array contains 2 %}
   array includes 2
{% endif %}

对于你的情况,我猜你想要:

{% assign product = site.products %}
{% assign successfulProducts = site.success-stories | map: 'product' %}
{% for product in site.products %}
  {% if successfulProducts contains product.title %}
    ... {{ product }} ...
  {% endif %}
{% endfor %}

我在第 2 行中所做的只是 mapping success-storiessuccessfulProducts。基本上每个 story 元素都被其 story.product 属性.

替换

然后我像你一样遍历所有产品,检查每一个是否应该显示。但我并没有遍历所有故事 - 相反,我提出了一个简单的条件来检查 successfulProducts 是否包含您指定的产品标题。