Shopify: неправильный вариант в корзине после модификации - PullRequest
0 голосов
/ 09 февраля 2019

Я недавно добавил модифицированную версию кода, найденную в руководстве:

https://help.shopify.com/en/themes/customization/products/variants/hide-variants-that-are-sold-out

Я изменил это, чтобы показывать только варианты со сравнением по цене (в продаже) воформление коллекции.Иногда у нас есть товар, у которого есть только определенные варианты в продаже, и мы хотим показывать только эти варианты продукта при просмотре коллекции.У меня это почти работает.Единственная проблема заключается в том, что при просмотре товара из раздела оформления (/ collection /arance / itemonsale) и последующем добавлении в корзину, первый вариант добавляется в корзину, а не выбранный в выпадающем списке.Это происходит только при первом добавлении товара в корзину.Если кто-то вернется к продукту и снова добавит его, он будет работать нормально.При доступе к продукту через коллекцию категорий (/ collection / category / itemonsale) или напрямую (/ products / itemonsale) все работает нормально, поэтому сценарий, по крайней мере, запускается, когда должен.Буду признателен за любые идеи о том, что мне нужно изменить здесь, чтобы сделать эту работу.Пример: https://evans -daily-grindb.myshopify.com / collection / просвет

В product.liquid (вероятно, не требуется второй экземпляр collection.handle = .....):

{% if collection.handle == 'clearance' and product.options.size == 1 %}
  <script>
    var product_variants_removed = [
      {%- for variant in product.variants -%}
        {%- unless collection.handle == 'clearance' and variant.compare_at_price > 1 -%}
          '{{ variant.title }}',
        {%- endunless -%}
      {%- endfor -%}
    ];
  </script>
{% endif %}

В theme.js:

$(theme.init);
$( document ).ready(function() {
  if( typeof product_variants_removed != undefined ) {  // was there items to be removed?
    var $addToCartForm = $('form[action="/cart/add"]');
    if (window.MutationObserver && $addToCartForm.length) {
      if (typeof observer === 'object' && typeof observer.disconnect === 'function') {
        observer.disconnect();
      }
      var config = { childList: true, subtree: true };
      var observer = new MutationObserver(function() {
        product_variants_removed.forEach(function(item){
          $('.single-option-selector option').filter(function() { return $(this).text() === item; }).remove();
        });
        observer.disconnect();
      });  
      observer.observe($addToCartForm[0], config);
      $('.single-option-selector').trigger('change');
    }
  }
});
...