简体   繁体   English

将产品添加到购物车时,将为该产品添加默认选项,但不添加所选选项

[英]When adding product to cart default options are added for the product, but not selected ones

I've been struggling with this problem for 2 day. 我已经为这个问题苦苦挣扎了2天。 In my store each product has 2 options: size and colors (Tshirts). 在我的商店中,每种产品都有2种选择:尺寸和颜色(T恤)。 Any shopify experts are here? 有任何shopify专家在吗? Store: nosmallplan-dev.myshopify.com Pass: nsp I use ajaxify cart. 商店:nosmallplan-dev.myshopify.com密码:nsp我使用ajaxify购物车。 In Product liquid i have this code: 在产品液体中,我有以下代码:

<div style="display:none;""> 
      {% if product.variants.size > 1 %} 
        <select id="product-select" name="id">
        {% for variant in product.variants %}
          {% if variant.available %} 
            <option value="{{ variant.id }}">{{ variant.title | escape }} - {{ variant.price | money }} - {{ variant.sku }}</option>
          {% else %}
            <input type="hidden" name="id" value="{{ product.variants.first.id }}" /> 
          {% endif %}
        {% endfor %}
        </select>
        {% endif %}
      </div>

But product with default size and color is always added to cart, doesnt matter even if you choose another option. 但是,具有默认大小和颜色的产品始终添加到购物车,即使您选择其他选项也没关系。 In Cart.liquid i have this code: 在Cart.liquid我有这个代码:

<p class="cart__product--details">
      {% if item.product.variants.size > 1 %}
      {{ item.product.options[0] }}: {{item.variant.title}}
      {% endif %}

</p>

I believe this code is responsible for showing first option. 我相信这段代码负责显示第一个选项。 How can i modify it to show selected option and if none is selected then first option? 我如何修改它以显示选定的选项,如果没有选择则第一个选项?

Thanks!!! 谢谢!!!

You should have hidden drop-down with list of all variants and visible dropdowns or each option. 您应该具有包含所有变体和可见下拉列表或每个选项的列表的隐藏下拉列表。 For example: 例如:

Instead of your code with hidden select, please add this code: 请添加以下代码,而不是隐藏选择的代码:

{% unless product == empty %}
  <script type="application/json" id="ProductJson">
    {{ product | json }}
  </script>
{% endunless %}

{% unless product.options.size == 1 and product.variants[0].title == 'Default Title' %}
    {% for option in product.options_with_values %}
        <div class="selector-wrapper js product-form__item">
          <label {% if option.name == 'default' %}class="label--hidden" {% endif %}for="SingleOptionSelector-{{ forloop.index0 }}">
            {{ option.name }}
          </label>
          <select class="single-option-selector single-option-selector product-form__input" id="SingleOptionSelector-{{ forloop.index0 }}" data-index="option{{ forloop.index }}">
            {% for value in option.values %}
              <option value="{{ value | escape }}"{% if option.selected_value == value %} selected="selected"{% endif %}>{{ value }}</option>
            {% endfor %}
          </select>
        </div>
    {% endfor %}
{% endunless %}

<select name="id" id="ProductSelect" data-section="{{ section.id }}" class="product-form__variants no-js" style="display:none;">
  {% for variant in product.variants %}
    {% if variant.available %}
      <option {% if variant == product.selected_or_first_available_variant %} selected="selected" {% endif %} value="{{ variant.id }}">
        {{ variant.title }}
      </option>
    {% else %}
      <option disabled="disabled">{{ variant.title }} - {{ 'products.product.sold_out' | t }}</option>
    {% endif %}
  {% endfor %}
</select>

Also you need to add this JS, which will change the hidden select value, when you changing visible dropdowns for product options: 另外,当您更改产品选项的可见下拉菜单时,还需要添加此JS,它将更改隐藏的选择值:

 $(document).ready(function() {
   $('.single-option-selector').on(
       'change',
       function() {
           var selectedValues = $.map(
               $('.single-option-selector'),
               function(element) {
                   var $element = $(element);
                   var type = $element.attr('type');
                   var currentOption = {};

                   if (type === 'radio' || type === 'checkbox') {
                       if ($element[0].checked) {
                           currentOption.value = $element.val();
                           currentOption.index = $element.data('index');

                           return currentOption;
                       } else {
                           return false;
                       }
                   } else {
                       currentOption.value = $element.val();
                       currentOption.index = $element.data('index');

                       return currentOption;
                   }
               }
           );
           var product = JSON.parse(
               document.getElementById('ProductJson').innerHTML
           );
           var variant = product.variants.filter(function(v) {
               var condition = selectedValues.every(function(values) {
                   return v[values.index] == values.value;
               });
               return condition;
           });
           if (variant != null && variant.length == 1) {
               $('#ProductSelect').val(variant[0].id);
           }
           else {
            //disable add to cart button
           }
       }
   );
});

You have to add js in such a manner that when you click on the size and color then you have to change the option of select accordingly. 您必须以这样的方式添加js:单击大小和颜色时,必须相应地更改select选项。 In this way you add product to cart with selected option using ajax. 这样,您可以使用ajax将产品添加到具有选定选项的购物车中。

Thanks 谢谢

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM