Shopify SKU не обновляется при выборе варианта

Я звоню по номеру артикула продукта, который должен измениться при выборе варианта на основе это руководство по Shopify.

В соответствии с инструкциями я помещаю следующий фрагмент в то место, где я хочу отображать SKU:

{% assign current_variant = product.selected_or_first_available_variant %}
<span class="variant-sku">{{ current_variant.sku }}</span>

Однако при изменении варианта SKU никогда не обновляется, как в гифке их учебника.

Вот пример его на веб-сайте, где он не работает.

введите здесь описание изображения

Кроме того, вот скриншот, показывающий, что эта опция действительно является вариантом Shopify, а не чем-то еще (просто так, что все мои базы покрыты).

Я только предполагаю, что Shopify, возможно, изменился, и теперь это делается по-другому, или что я каким-то образом настроил что-то неправильно, хотя я следовал инструкциям учебника (помещенным в product-template.liquid, на который есть ссылка в продукте .liquid (тема разбита на разделы).

введите здесь описание изображения


person jhawes    schedule 27.01.2017    source источник
comment
Можете ли вы поделиться URL-адресом вашего магазина? какую тему вы используете? Я могу помочь тебе исправить это ...   -  person Yuvraj Jain    schedule 30.01.2017
comment
Да, определенно, URL-адрес находится выше того места, где написано «пример» (mostergo.com/products/ эргоцентрический-воздухоцентрический-стул). Я тоже использую тему Debut (как мне кажется, самая последняя версия).   -  person jhawes    schedule 30.01.2017
comment
См. Здесь Я добавил код для изменения артикула channelpilot .myshopify.com / collections / frontpage / products / пароль: - rtublu Дайте мне знать, подходит ли вам это или нет ..   -  person Yuvraj Jain    schedule 17.02.2017
comment
ты это проверил?   -  person Yuvraj Jain    schedule 22.02.2017
comment
Извините, @YuvrajJain, у меня нет - он запрашивает адрес электронной почты - какой адрес электронной почты я должен ввести?   -  person jhawes    schedule 24.02.2017
comment
в левом верхнем углу есть кнопка Enter Using Password, когда вы нажмете ее, вы можете ввести rtublu в качестве пароля и увидеть его ....   -  person Yuvraj Jain    schedule 24.02.2017
comment
Это дебютная тема? Он не использует выбор параметров, но будет что-то похожее на функцию selectCallback, которую вам нужно будет изменить, чтобы она работала.   -  person Buts    schedule 28.02.2017
comment
@ButsAndCats Да, это дебютная тема. Похоже, есть другой способ сделать это для этой темы - есть ссылки или образцы кода?   -  person jhawes    schedule 01.03.2017
comment
@jhawes Да. Взгляните на функцию slate.Variants в theme.js. В частности _onChangeSelect, который запускается при изменении варианта и this._updatePrice(variant);   -  person Buts    schedule 14.03.2017
comment
@ButsAndCats Я нахожу раздел slate.Variants, о котором вы говорили, но, к сожалению, не нахожу «_onChangeSelect». Мне любопытно, может ли моя проблема быть вызвана плагином - установлен один, который управляет дополнительными вариантами, хотя эти варианты добавляются плагином, поэтому я сначала отклонил это как возможность.   -  person jhawes    schedule 21.03.2017
comment
@jhawes Что за плагин? Или вы имеете в виду приложение? попробуйте проверить строку 523 файла theme.js   -  person Buts    schedule 22.03.2017
comment
@ButsAndCats, извините, приложение правильное (приложение выделено жирным шрифтом). В файле theme.js я попытался добавить this._updateSku(variant);, но, похоже, ничего не делает. Размещается прямо под линией this._updatePrice(variant);.   -  person jhawes    schedule 23.03.2017
comment
Ах да, жирные приложения - мусор.   -  person Buts    schedule 24.03.2017
comment
Облом, значит, вы думаете, что приложение тоже может вызвать конфликт? В любом случае я связался с ними и подтвердил здесь, действительно ли это была проблема.   -  person jhawes    schedule 24.03.2017


Ответы (3)


Я никогда не редактировал файл Assets / theme.js для этого веб-сайта, и я почти уверен, что никто не трогал ни один из файлов, кроме меня.

Несмотря на это, в файле theme.js осталась очень важная функция, которая необходима для изменения номера SKU.

Это были строки, которые, похоже, не были установлены в моем файле theme.js:

_updateSKU: function(variant) {
  if (variant.sku === this.currentVariant.sku) {
    return;
  }

  this.$container.trigger({
    type: 'variantSKUChange',
    variant: variant
  });
},

Кроме того, для функции _initVarients отсутствовало следующее (место с другими строками с таким же типом кода):

this.$container.on('variantSKUChange' + this.settings.namespace, this._updateSKU.bind(this));

Они не отсутствовали в моем файле theme.js, но их стоит проверить, поскольку они необходимы для обновления SKU:

Находится внутри функции _onSelectChange (поместите вместе с другими строками, имеющими тот же тип кода):

this._updateSKU(variant);

Находится после функции _updatePrice:

_updateSKU: function(evt) {
      var variant = evt.variant;

      // Update the sku
      $('.variant-sku').html(variant.sku);
    },
person jhawes    schedule 03.04.2017
comment
Рад, что ты нашел :) - person Buts; 09.04.2017

Я только недавно начал использовать Shopify, но постараюсь помочь. Я заметил, что вы используете current_variant.sku, но в справочных материалах по объектам Shopify сказано использовать variant.sku. Вот где я это нашел:

https://help.shopify.com/themes/liquid/objects/variant#variant-sku

Надеюсь, это поможет.

person Jenny Holder    schedule 31.01.2017
comment
Я предполагаю, что часть учебника может быть устаревшей или рассчитана на несекционированные темы (более новые разбиты на разделы). Я все равно попробовал вариант.sku, но безуспешно. Вот руководство, над которым я работал, на случай, если это поможет: help.shopify .com / themes / customization / products / show-sku-numbers. - person jhawes; 01.02.2017
comment
Я попробовал это в своем коде, и он отлично работает. Я просмотрел столько вашего кода, сколько смог увидеть в devtools, и похоже, что код для sku не находится внутри формы. Вы должны увидеть что-то под кодом SKU, в котором говорится: <form action="/cart/add" method="post" ...> Stuff is here. div classes and things like that. Sku code should be here, wherever it looks good to you. </form> Вам необходимо поместить код SKU в эти теги формы. - person Jenny Holder; 02.02.2017
comment
Когда я впервые прочитал ваш комментарий, я подумал, черт возьми, это должно быть так ... имело бы смысл быть внутри ‹form›, но все равно не повезло. Я обновил страницу, указав номер SKU внутри ‹form›. mostergo.com/collections/office-chairs/products/ - person jhawes; 03.02.2017

  // Variant is sold out, disable the submit button
            // $addToCart.addClass('disabled').prop('disabled', true);
            $addToCart.hide();
            $variantQuantity.removeClass('is-visible');
            if (variant.incoming) {
              $variantQuantity.html({{ 'products.product.will_be_in_stock_after' | t: date: '[date]' | json }}.replace('[date]', variant.next_incoming_date)).addClass('is-visible');
            }
            else {
              $variantQuantity.removeClass('is-visible');
            }
            $quantityElements.hide();
            $outofstock.show();
          }
          //console.log(variant.sku);
          $('.variant-sku').html("");
          $('.variant-sku').text(variant.sku);
           // Update price display.
          var customPrice = Shopify.formatMoney(variant.price, theme.moneyFormat);
          if (variant.compare_at_price > variant.price) {
            var comparePrice = Shopify.formatMoney(variant.compare_at_price, theme.moneyFormat);
            var customPriceFormat = ' <del id="old-product-price">' + comparePrice + '</del>';
                customPriceFormat += ' <ins id="product-price">' + customPrice + '</ins>';
            $productPrice.html(customPriceFormat);
            var save = ((variant.compare_at_price - variant.price)*100)/variant.compare_at_price;
            $('#product-{{product.id}} .product-image-summary .onsale').html({{ 'products.product.save_js' | t: saved_amount: '[sale]' | json }}.replace('[sale]', Math.ceil(save))).show();
          }else{
             $productPrice.html(customPrice);
            $('#product-{{product.id}} .product-image-summary .onsale').hide();
          }
          jQuery('.currency .active').trigger('click');
          //Update sku
          if(variant.sku){
             $productsku.text(variant.sku);
            
          }else{
              $productsku.text(theme.strings.na);
            
           }

Я обнаружил, что необходимо обновить фрагмент produc_js.liquid.

введите здесь описание изображения

person PBraden88    schedule 17.05.2019