【问题标题】:Vendor list page - Only list vendors with items in stock供应商列表页面 - 仅列出有库存商品的供应商
【发布时间】:2017-06-12 06:33:00
【问题描述】:

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

<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 个收藏标签,分别是“有货”和“已售罄”,以帮助使用我们的过滤器菜单过滤它们,并将其附加到网址中,因此我们只向客户展示库存商品。

【问题讨论】:

    标签: shopify liquid


    【解决方案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。

    【讨论】:

    • 我似乎无法以这种方式按首字母组织它们(参考您建议的最后一个想法)
    • 如果我的商店有 10,000 多种产品要通过,循环遍历所有可用产品会导致任何 api 问题吗?
    • 你是对的。排序不是该算法的强项。拥有 10,000 种产品也肯定会减慢您的速度……
    • 您可能希望为此投资外部流程。让您的信息在 Shopify 之外保持最新,并在需要时调用它,这样它总是很快的。
    • 大卫,请看我的回答。它有点工作,但无法处理我的现场网站的规模
    【解决方案2】:

    我可以这样写:

    {% 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。与我的实际网站相比,我的开发网站肯定缺乏集合和产品,因此这可能适用于拥有较小网站的人。

    【讨论】:

    • 哈……是的……凡事都有限制……做小事很容易……不那么容易适应现实
    猜你喜欢
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    相关资源
    最近更新 更多