【问题标题】:Shopify adding a class to an existing class if condition is true如果条件为真,Shopify 将类添加到现有类
【发布时间】:2020-01-08 13:39:07
【问题描述】:

目前正在开发 shopify 主题,我正在尝试隐藏已售罄的产品变体。无论是否重要,主题都是声望。

我正在尝试以简单的方式进行操作,因为没有其他可用的变体适合我。如果产品变体数量为 0,我要做的是向现有类添加一个类。

例子:

{% for variant in product.variants %}
{% if variant.inventory_quantity == 0 %}class{% endif %}{% endfor %}

我的代码看起来如何:

{%- for value in option.values -%}

 <li class="HorizontalList__Item {% for variant in product.variants %}{% if variant.inventory_quantity < 1 %}{{ variant.inventory_quantity}}{% endif %}{% endfor %}">
      <input id="option-{{ section.id }}-{{ forloop.parentloop.index0 }}-{{ forloop.index0 }}" class="SizeSwatch__Radio" type="radio" name="option-{{ forloop.parentloop.index0 }}" value="{{ value | escape }}" {% if value == option.selected_value %}checked="checked"{% endif %} data-option-position="{{ option.position }}">
      <label for="option-{{ section.id }}-{{ forloop.parentloop.index0 }}-{{ forloop.index0 }}" class="SizeSwatch">{{ value }}</label>
 </li>    

{%- endfor -%}

我使用 {{variant.inventory_quantity }} 来查看返回的内容,结果全部返回 0。然后我删除了 {% if variant.inventory_quantity

由于 option.values -%} 中的 {%- for value ,它会一次检查所有内容并添加所有列表的类,即使变量库存数量为 0 或不为 0。

如果 variant.inventory_quantity == 0,有没有办法将该类附加到代码之外的列表中?

或者如果选项被禁用以完全隐藏列表?因为我在这里检查变体是否可用:

<select id="product-select-{{ product.id }}" name="id" title="Variant">
            {%- for variant in product.variants -%}
              <option {% if variant == selected_variant %}selected="selected"{% endif %} {% unless variant.available %}disabled="disabled"{% endunless %} value="{{ variant.id }}" data-sku="{{ variant.sku }}">{{ variant.title }} - {{ variant.price | money }}</option>
            {%- endfor -%}
          </select>

在我的例子中,产品变体 38 的数量为 0。链接到示例 https://lizzetstore.ro/collections/paltoane/products/palton-asimetric-negru

【问题讨论】:

  • 当您处理乘法选项(也就是颜色/尺寸/等等)时,最好使用 JS 来设置已售出的类。如果不至少依赖一些 JS 逻辑,只使用液体几乎是不可能的。因此,当用户选择不同的尺寸/颜色并且该组合可用时,您的逻辑将失败。 (除非您为不同的选项组合创建不同标记的多重组合 - 我不推荐它)
  • 我只有一个变体选项,即尺寸,当客户想要查看产品并且变体有 0 库存时,我想实现隐藏,现在它正在检查变体是否有库存但是当您按下 0 库存的变体时,它只会禁用购买按钮。我想要的只是隐藏它,根本不显示它。我只有一个选择,我不知道如何实现。

标签: shopify liquid


【解决方案1】:

在这种情况下,如果您确定会有一个变体,您可以这样做。

<ul>
  {%- for variant in product.variants -%}
    <li {% unless variant.available %}class="soldout"{% endunless  %}>
      <input type="radio" name="id" value="{{variant.id}}" id="variant-{{variant.id}}" {% unless variant.available %} disabled{% endunless %}>
      <label for="variant-{{variant.id}}">{{ variant.option1 }}</label>
    </li>
  {%- endfor -%}
</ul>

您不需要正在生成的选择。我们正在使用无线电来传递name="id" 输入。

请记住,这只有在您有一个选项时才有效!这意味着如果您有其他选项,它将无法正常工作。

但这是不使用任何 javascript 的方式。

【讨论】:

  • 谢谢!它就像一个魅力,两个小代码错误,你使用 {% endif %} 而不是 {% endunless %},我稍微适应了我的情况,但它就像一个魅力,谢谢!
  • 不幸的是@drip 我今天在对我的代码进行一些测试时发现了一个错误,我发现我们编写的代码有一些错误。例如,您选择尺码 40,当您将其添加到购物车时,它会添加产品的第一个尺码,而不是 40,这很奇怪,我不知道这是为什么..
  • @BogdanDutca 你删除了选择吗?你只需要单选按钮name="id" 没有其他应该有name="id"
  • {{ variant.option1 }} 我认为这是问题
  • {%- for variant in product.variants -%}
  • {%- endfor -%}.. 我认为 {{ variant.option1 }} 是问题所在,因为它返回变体第一个选项的值,我认为这就是为什么总是会选择第一个尺寸变体
猜你喜欢
相关资源
最近更新 更多
热门标签