Shopify 多种产品选项
Shopify Multiple Product Options
我目前有以下表格,它很好,并生成多个变体下拉列表,但是当尝试使用 Cart.js
将其添加到购物车时,它实际上并没有向购物车添加任何东西。我不确定我是否在这里遗漏了一些代码,但我目前在我的主题中所做的是:
在我的header
{{ 'option_selection.js' | shopify_asset_url | script_tag }}
加入购物车表格
<form action="/cart/add" method="post" enctype="multipart/form-data" id="AddToCartForm" class="form-vertical" data-cart-submit>
<select id="variant-select" name="id">
{% for variant in product.variants %}
{% if variant.available %}
<option value="{{variant.id}}">{{ variant.title }} for {{ variant.price | money_with_currency }}{% if variant.price < variant.compare_at_price %} usually {{ variant.compare_at_price | money_with_currency }}{% endif %}</option>
{% else %}
<option value="{{variant.id}}" disabled="disabled">{{ variant.title }} - sold out!</option>
{% endif %}
{% endfor %}
</select>
<input name="cart-add" type="submit" class="button" id="cart-add" value="Buy Now!">
<span id="price-field"></span>
</form>
我是不是漏掉了什么?
您似乎错过了初始化选项 selectors 的调用。再加上变体下拉菜单没有默认值,可能会导致在您尝试添加到购物车时没有有效 ID 发布到 Shopify。
要做的一件事是在您的 select 框中自动 select 适当的变体。 Shopify 的产品对象有一个名为 'selected_or_first_available_variant' 的字段,在这里很有用。示例:
<option value="{{variant.id}}" {% if variant == product.selected_or_first_available_variant %} selected {%endif %}>{{ variant.title }}</option>
(我经常参考 Shopify 的优秀 reference for Liquid objects,它可以帮助您了解可能的想法)
如果您使用的是 Shopify 的 OptionSelectors,您可能还需要制作变体 ID 字段 display:none
- 当 OptionSelectors 运行时,它会根据产品的选项自动为您创建 1-3 个下拉列表方面。
例如:有 3 种不同尺寸和 2 种不同颜色的产品最多有 6 种不同款式。您的初始 select 框将包含所有可用的组合,如 "Small / Red"、"Small / Blue"、"Medium / Red" 等。
运行 上述示例产品的 OptionSelectors 代码将为您提供两个 selector:一个用于尺寸,一个用于颜色。在幕后,OptionSelectors 代码从每个单独的选项维度(例如:"Small" 和 "Blue")中获取值,以在(隐藏的)主列表中找到适当的变体 ID。
要初始化 Shopify 的 OptionSelectors,请尝试在表单后立即添加此脚本标签以查看是否有帮助:
{% if product.variants.size > 1 %}
<script>
function selectCallback(variant, selector){
// This is where you would put any code that you want to run when the variant changes.
}
var variantIdFieldIdentifier = 'variant-select';
new Shopify.OptionSelectors(variantIdFieldIdentifier, {
product: {{ product | json }}, // Product object required to know how options map to variants
onVariantSelected: selectCallback, // Function to do any interesting stuff (eg: update price field, image, etc) when selections change
enableHistoryState: true // When true, will update the URL to be a direct link to the currently-selected variant
})
</script>
{% endif %}
我目前有以下表格,它很好,并生成多个变体下拉列表,但是当尝试使用 Cart.js
将其添加到购物车时,它实际上并没有向购物车添加任何东西。我不确定我是否在这里遗漏了一些代码,但我目前在我的主题中所做的是:
在我的header
{{ 'option_selection.js' | shopify_asset_url | script_tag }}
加入购物车表格
<form action="/cart/add" method="post" enctype="multipart/form-data" id="AddToCartForm" class="form-vertical" data-cart-submit>
<select id="variant-select" name="id">
{% for variant in product.variants %}
{% if variant.available %}
<option value="{{variant.id}}">{{ variant.title }} for {{ variant.price | money_with_currency }}{% if variant.price < variant.compare_at_price %} usually {{ variant.compare_at_price | money_with_currency }}{% endif %}</option>
{% else %}
<option value="{{variant.id}}" disabled="disabled">{{ variant.title }} - sold out!</option>
{% endif %}
{% endfor %}
</select>
<input name="cart-add" type="submit" class="button" id="cart-add" value="Buy Now!">
<span id="price-field"></span>
</form>
我是不是漏掉了什么?
您似乎错过了初始化选项 selectors 的调用。再加上变体下拉菜单没有默认值,可能会导致在您尝试添加到购物车时没有有效 ID 发布到 Shopify。
要做的一件事是在您的 select 框中自动 select 适当的变体。 Shopify 的产品对象有一个名为 'selected_or_first_available_variant' 的字段,在这里很有用。示例:
<option value="{{variant.id}}" {% if variant == product.selected_or_first_available_variant %} selected {%endif %}>{{ variant.title }}</option>
(我经常参考 Shopify 的优秀 reference for Liquid objects,它可以帮助您了解可能的想法)
如果您使用的是 Shopify 的 OptionSelectors,您可能还需要制作变体 ID 字段 display:none
- 当 OptionSelectors 运行时,它会根据产品的选项自动为您创建 1-3 个下拉列表方面。
例如:有 3 种不同尺寸和 2 种不同颜色的产品最多有 6 种不同款式。您的初始 select 框将包含所有可用的组合,如 "Small / Red"、"Small / Blue"、"Medium / Red" 等。
运行 上述示例产品的 OptionSelectors 代码将为您提供两个 selector:一个用于尺寸,一个用于颜色。在幕后,OptionSelectors 代码从每个单独的选项维度(例如:"Small" 和 "Blue")中获取值,以在(隐藏的)主列表中找到适当的变体 ID。
要初始化 Shopify 的 OptionSelectors,请尝试在表单后立即添加此脚本标签以查看是否有帮助:
{% if product.variants.size > 1 %}
<script>
function selectCallback(variant, selector){
// This is where you would put any code that you want to run when the variant changes.
}
var variantIdFieldIdentifier = 'variant-select';
new Shopify.OptionSelectors(variantIdFieldIdentifier, {
product: {{ product | json }}, // Product object required to know how options map to variants
onVariantSelected: selectCallback, // Function to do any interesting stuff (eg: update price field, image, etc) when selections change
enableHistoryState: true // When true, will update the URL to be a direct link to the currently-selected variant
})
</script>
{% endif %}