Shopify - 更改我的selectorOption产品下拉列表

时间:2016-04-08 02:30:07

标签: javascript jquery select shopify liquid

我整天都在工作,不可能弄清楚,所以我需要一些帮助:)

我尝试在我的"尺寸"的每个变体行上添加一些文字。我的产品页面上的下拉列表:

如果产品数量> 0:尺寸+快速交货 其他:尺寸+ 2-3周交货 只是想在点击之前将它显示给客户,所以我不希望它只在selectedVariant上。

我尝试通过我的script.js更改它,我想:

复制每个变体数量(我没有找到方法)

根据变体数量复制我的下拉列表值/键+添加文本(快速/ 2-3周) var optionsSizes = {};



var optionsSizes = {};

$('#mySizes option').each(function(){
    optionsSizes[$(this).val()] = $(this).text() + variant.inventory_quantity;
});

//console.log(optionsSizes);    
    
var $el = $("#mySizes");
$el.empty(); // remove old options
$.each(optionsSizes, function(value,key) {
  $el.append($("<option></option>")
     .attr("value", value).text(key));
}); 
&#13;
&#13;
&#13;

下拉列表的复制/粘贴工作,但全部。 在variantSelected上很容易做到,但这不是我想要的。

如果您有任何疑问,请随时询问。

干杯,

bkseen

2 个答案:

答案 0 :(得分:1)

默认情况下,

('#product-select-5916642311-option-0')$('#mySizes')这些select元素不在您的主题中。 Shopify或主题脚本根据Shopify提供的产品JSON信息添加这两个元素。因此,没有直接的方法来获得理想的结果。

这是可以达到你想要的技巧。

  1. 将所有变体及其所需属性加载到JSON对象中。为此,请在液体文件的顶部添加<script>variantsJSON = {}</script>
  2. 现在加载以下结构中的变体:

    variantsJSON = { "variant_option1" : { "variant_option2_1_title" : "variant_option2_1_quantity", "variant_option2_2_title" : "variant_option2_2_quantity", } .... }

  3. 要获得上述结构,您需要在{% for variant in product.variants %}内添加以下脚本或在液体文件中添加类似的循环。

  4. <script> if (!variantsJSON['{{ variant.option1 }}']){ variantsJSON['{{ variant.option1 }}'] = {} } {% assign availability = 'QUICK DELIVERY' %} {% if variant.inventory_quantity == 0 %}{% assign availability = '2-3 WEEKS DELIVERY' %}{% endif %} if (!variantsJSON['{{ variant.option1 }}']['{{ variant.option2 }}']){ variantsJSON['{{ variant.option1 }}']['{{ variant.option2 }}'] = '{{ availability }}' } </script>

    1. 上述代码段(需要进行细化)会将所有变体及其可用性加载到JSON对象中

    2. 现在您需要做的是触发更改$('#product-select-{{ product.id }}-option-0')的函数,该函数将清除<li>中的所有$('#mySizes'),然后使用<存储在<}中的值填充它们strong> variantsJSON 的 variant_option2 &amp;所选 variant_option1 variant_availability

      P.S。随意格式化我的答案。我在某种程度上无法获得正确的格式。

答案 1 :(得分:0)

回答Hymnz

  

这很棘手,但我想我可以提供帮助。你如何改变产品类型___inventory-count product__form-message - 成功? - HymnZ 10小时前   块引用

if (variant) {
  {% if settings.product_show_shipping %}
    var myCount = variant['inventory_quantity'];
    var myPath = this.element.find('.product__inventory-count');
        if (myCount < 1){
            myPath.removeClass('product__form-message--success');
            myPath.addClass('product__form-message--error');
            myPath.text("2-3 weeks delivery");
        }else{
            //myPath.toggleClass('product__form-message--success').siblings().removeClass('checked');
            myPath.removeClass('product__form-message--error');
            myPath.addClass('product__form-message--success');
            myPath.text("Quick delivery");
        }
  {% endif %}

问题是,变体是选择的变体,而不是通过所有产品的变体。