供应商列表页面 - 仅列出库存商品的供应商

时间:2017-01-26 17:26:33

标签: shopify liquid

我的网站上有一个页面,列出了我店里的所有供应商,如下所示:

<div class="vendor-list" id="designers-a-to-z">
    <ul>
        {% assign current = "" %}
        {% capture alphabet %}
            -A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z
        {% endcapture %}
        {% assign letters = alphabet | split: '-' %}
        {% assign its_a_letter = false %}
        {% for vendor in shop.vendors %}
            {% assign vendor_first_letter = vendor | strip | upcase | slice : 0 %}
            {% for letter in letters %}
                {% if vendor_first_letter == letter %}
                    {% assign its_a_letter = true %}
                    {% break %}
                {% endif %}
            {% endfor %}
            {% if its_a_letter %}
                {% unless vendor_first_letter == current %}
                    <h3><span class="anchor" id="designers-{{ vendor_first_letter }}"></span>{{ vendor_first_letter }}</h3>
                {% endunless %}
                <li class="vendor-list-item">
                    <a href="/collections/{{ vendor | handleize }}/in-stock">{{ vendor }}</a>
                </li>
            {% else %}
                {% assign vendor_first_letter = "#" %}
                {% unless vendor_first_letter == current %}
                    <h3><span class="anchor" id="designers-{{ vendor_first_letter }}"></span>{{ vendor_first_letter }}</h3>
                {% endunless %}
                <li class="vendor-list-item">
                    <a href="/collections/{{ vendor | handleize }}/in-stock">{{ vendor }}</a>
                </li>
            {% endif %}
            {% assign current = vendor_first_letter %}
        {% endfor %}
    </ul>
</div>

其中一些供应商目前没有任何库存商品,因此将它们展示在这里毫无意义。是否可以仅显示其集合中有库存商品的供应商?

我目前在我的商店中有2个收集代码,用于&#39;库存&#39;并且&#39;售罄&#39;使用我们的过滤器菜单帮助过滤它们,并将其附加到网址,以便我们只显示库存商品中的客户。

2 个答案:

答案 0 :(得分:1)

由于产品有供应商,而产品有库存,因此您可以检查一下。这会非常缓慢和令人讨厌但是嘿!这就是托管平台的用途,将疯狂的Liquid变成正确的HTML。

请注意 product.available

的Liquid
Returns true if a product is available for purchase. Returns false if all of the products variants' inventory_quantity values are zero or less, and their inventory_policy is not set to "Allow users to purchase this item, even if it is no longer in stock."

因此,当您遍历供应商列表时,循环浏览所有产品,检查产品供应商是否匹配以及可用性。如果他们不适合你...跳过供应商。

看到它有多缓慢会很有趣......但是直到你尝试才会知道...

另一种方法,也许更聪明,就是迭代所有库存产品一次。建立您的供应商列表,而不是 shop.vendors

答案 1 :(得分:0)

我能够通过这样编写来实现这一点:

{% for vendor in shop.vendors %}
    {% for collection in collections %}
        {% if collection.title == vendor %}
            {% if collection.all_tags contains 'in-stock' %}
                then the conditions for checking the first letter and displaying the vendor, etc. nothing new

然而,它只能在我的开发网站上运行,我正在测试它,当我将它推向生产时,我得到了liquid error: memory limits exceeded。与我的实际网站相比,我的开发网站肯定缺少收藏品和产品,所以这可能适用于网站较小的人。