Shopify добавить в корзину функция работает только по одному, а не в цикле - PullRequest
1 голос
/ 20 апреля 2020

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

У меня есть скрипт JavaScript, который определяет, какой уровень набора выбран, и проходит через каждый продукт в коллекции. Несколько продуктов в комплекте мы хотим добавить более одного раза, и они контролируются тегом basicbundleqty: x. Таким образом, код перебирает теги для каждого продукта, проверяет этот тег, и если он есть, то для qty устанавливается суффикс тега.

<script> 

var selected = "not selected";

function kitSelect(){
  selected = document.getElementById('select').value;
  /*if(selected == "not selected"){
    alert('Please select a kit level');
  }
  if(selected == "basic"){
    alert('basic');
  }
  if(selected == "standard"){
    alert('standard');
  }
  if(selected == "pro"){
    alert('pro');
  }*/
} 

function addBundle(){
  var qty = 0;
  if(selected == "basic"){
    {% for kitproduct in collections['Basic-Fixture-Plate-Starter-Kit'].products %}
        qty = 1;
        {% for t in kitproduct.tags %}
            {% if t contains 'basicqty:' %}
                {% assign qty = t | remove: 'basicqty:'%}
                {% assign qty = qty | plus: 0 %}
                qty = {{ qty | json }};
            {% endif %}
        {% endfor %}
        jQuery.post('/cart/add.js', {
          quantity: qty,
         id: {{ kitproduct.variants[0].id }},
        properties: {
        }
      });
    alert(qty);
    {% endfor %}
  } else {
    alert("Please select a kit level first");
  }
  window.location.reload(false);
}
</script>

Этот метод делает работа, с одной причудой. без строки alert(qty); в конце для l oop код не работает. Если этого предупреждения нет, код, по-видимому, случайным образом добавляет только один или два продукта сбора.

Почему это работает только с функцией alert(), и есть ли исправление, которое позволит этому добавить их все в корзину одним кликом и не требовать, чтобы пользователь просматривал каждое окно предупреждения?

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Проблема заключается в асинхронных отправляемых вами запросах.

l oop с предупреждением работает, потому что сценарий останавливается каждый раз, когда предупреждение появляется. Тем временем асинхронный запрос обрабатывается.

Shopify явно советует не использовать шаблон параллельного добавления продуктов, так как вы можете прочитать здесь .

Если вы хотите добавить несколько Продукты можно сразу добавить, используя один запрос, как описано в документации магазина:

jQuery.post('/cart/add.js', {
  items: [
    {
      quantity: 1,
      id: 794864229,
      properties: {
        'First name': 'Caroline'
      }
    },
    {
      quantity: 2,
      id: 826203268,
      properties: {
        'First name': 'Mike'
      }
    }
  ]
});
0 голосов
/ 20 апреля 2020

Вот решение. Как указал Frieder , вместо создания запроса для каждого продукта в коллекции мне нужно было создать один запрос и l oop через каждый продукт внутри запроса. Вот рабочая функция (за исключением проверки количества, которую мне нужно добавить обратно):

  function addBundle2(){
    jQuery.post('/cart/add.js', {
      items: [
        {% for kitproduct in collections['Pallets'].products %}
        {
          quantity: 1,
          id: {{ kitproduct.variants[0].id }},
          properties: {
          }
        },
        {% endfor %}
      ]
    });
    window.location.reload(false);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...