Javascript 我怎样才能创造“我的生活”;“更聪明”;shopify主题的样例

Javascript 我怎样才能创造“我的生活”;“更聪明”;shopify主题的样例,javascript,shopify,Javascript,Shopify,我通过本教程将样例添加到我的shopify网站,我认为它们很棒,但我希望它们更“聪明” 如果我有一顶有4个变体的帽子——sm/red、md/red、sm/blue、md/blue——产品页面上会显示4个按钮。2个在上面,1个写着“sm”,1个写着“md” 在这两个按钮下面是两个颜色按钮,一个是红色,一个是蓝色 比如说,除了sm/红色外,我所有的东西都有存货。客户单击按钮“sm”,然后看到下面有两种颜色选项。不幸的是,他们点击红色,发现“添加到购物车”按钮变为“售罄”时,它已售罄 如果用户单击“

我通过本教程将样例添加到我的shopify网站,我认为它们很棒,但我希望它们更“聪明”

如果我有一顶有4个变体的帽子——sm/red、md/red、sm/blue、md/blue——产品页面上会显示4个按钮。2个在上面,1个写着“sm”,1个写着“md” 在这两个按钮下面是两个颜色按钮,一个是红色,一个是蓝色

比如说,除了sm/红色外,我所有的东西都有存货。客户单击按钮“sm”,然后看到下面有两种颜色选项。不幸的是,他们点击红色,发现“添加到购物车”按钮变为“售罄”时,它已售罄

如果用户单击“sm”按钮,我更希望红色样本变灰或得到X,以便用户立即收到可用性反馈


要做到这一点有多难?

一点也不难。如果您已经按照问题中提到的实现了色样,那么您只需要向
selectCallback
函数添加一些额外的代码

添加到产品中。液体

...

var selectCallback = function(variant, selector) {

  ...

  var selectedSize = jQuery('.size.options li.selected span').text();

  if (selectedSize.length > 0) {
    var variants = selector.product.variants;
    var variantTitles = [];
    var i;

    for (i = 0; i < variants.length; i++) {
      variantTitles.push(variants[i].title);
    }

    jQuery('.color.options li').each( function() {
      var variantTitle = selectedSize + " / " + jQuery('div', this).text();

      // if variantTitle is a valid variant & not sold out, remove unavailable class
      var variantIndex = jQuery.inArray(variantTitle, variantTitles);
      if (variantIndex != -1 && variants[variantIndex].available == true) {
        jQuery('span', this).removeClass('unavailable');
      }
      // if not a valid variant or sold out, add unavailable class
      else {
        jQuery('span', this).addClass('unavailable');
      }
    });
  }
};

...
然后,如果您有两种尺寸(SM、MD)和两种颜色(红色、蓝色),并且“SM/红色”已售罄,您将获得以下信息:


我还将此代码放入了一个。

中,这一点都不难。如果您已经按照问题中提到的实现了色样,那么您只需要向
selectCallback
函数添加一些额外的代码

添加到产品中。液体

...

var selectCallback = function(variant, selector) {

  ...

  var selectedSize = jQuery('.size.options li.selected span').text();

  if (selectedSize.length > 0) {
    var variants = selector.product.variants;
    var variantTitles = [];
    var i;

    for (i = 0; i < variants.length; i++) {
      variantTitles.push(variants[i].title);
    }

    jQuery('.color.options li').each( function() {
      var variantTitle = selectedSize + " / " + jQuery('div', this).text();

      // if variantTitle is a valid variant & not sold out, remove unavailable class
      var variantIndex = jQuery.inArray(variantTitle, variantTitles);
      if (variantIndex != -1 && variants[variantIndex].available == true) {
        jQuery('span', this).removeClass('unavailable');
      }
      // if not a valid variant or sold out, add unavailable class
      else {
        jQuery('span', this).addClass('unavailable');
      }
    });
  }
};

...
然后,如果您有两种尺寸(SM、MD)和两种颜色(红色、蓝色),并且“SM/红色”已售罄,您将获得以下信息:


我还将此代码放入了一个。

中,这一点都不难。如果您已经按照问题中提到的实现了色样,那么您只需要向
selectCallback
函数添加一些额外的代码

添加到产品中。液体

...

var selectCallback = function(variant, selector) {

  ...

  var selectedSize = jQuery('.size.options li.selected span').text();

  if (selectedSize.length > 0) {
    var variants = selector.product.variants;
    var variantTitles = [];
    var i;

    for (i = 0; i < variants.length; i++) {
      variantTitles.push(variants[i].title);
    }

    jQuery('.color.options li').each( function() {
      var variantTitle = selectedSize + " / " + jQuery('div', this).text();

      // if variantTitle is a valid variant & not sold out, remove unavailable class
      var variantIndex = jQuery.inArray(variantTitle, variantTitles);
      if (variantIndex != -1 && variants[variantIndex].available == true) {
        jQuery('span', this).removeClass('unavailable');
      }
      // if not a valid variant or sold out, add unavailable class
      else {
        jQuery('span', this).addClass('unavailable');
      }
    });
  }
};

...
然后,如果您有两种尺寸(SM、MD)和两种颜色(红色、蓝色),并且“SM/红色”已售罄,您将获得以下信息:


我还将此代码放入了一个。

中,这一点都不难。如果您已经按照问题中提到的实现了色样,那么您只需要向
selectCallback
函数添加一些额外的代码

添加到产品中。液体

...

var selectCallback = function(variant, selector) {

  ...

  var selectedSize = jQuery('.size.options li.selected span').text();

  if (selectedSize.length > 0) {
    var variants = selector.product.variants;
    var variantTitles = [];
    var i;

    for (i = 0; i < variants.length; i++) {
      variantTitles.push(variants[i].title);
    }

    jQuery('.color.options li').each( function() {
      var variantTitle = selectedSize + " / " + jQuery('div', this).text();

      // if variantTitle is a valid variant & not sold out, remove unavailable class
      var variantIndex = jQuery.inArray(variantTitle, variantTitles);
      if (variantIndex != -1 && variants[variantIndex].available == true) {
        jQuery('span', this).removeClass('unavailable');
      }
      // if not a valid variant or sold out, add unavailable class
      else {
        jQuery('span', this).addClass('unavailable');
      }
    });
  }
};

...
然后,如果您有两种尺寸(SM、MD)和两种颜色(红色、蓝色),并且“SM/红色”已售罄,您将获得以下信息:

我还把这个代码放在一个文件夹中