Добавление нескольких товаров в корзину MiniShop

Добрый день, не подскажите, как возможно добавить в корзину сразу массив товаров за один клик по кнопке «добавить».

Например, есть поле input у каждого из списка товаров, где пользователь вбивает нужное ему количество. По клику «продолжить» попадает на страницу оформления заказа.

Вот как понять какого товара сколько он заказал?

Заранее спасибо.
Vladimir Grin
27 января 2013, 12:36
modx.pro
2
5 096
0

Комментарии: 14

Василий Наумкин
27 января 2013, 16:46
0
Нужно прислать параметр num с количеством товара.

bezumkin.ru/modx/minishop/manuals/add2cart.html
    Vladimir Grin
    27 января 2013, 19:12
    0
    Спасибо за ответ, я так понимаю должен сразу уже массив передавать при наличии нескольких позиций товара?
      Василий Наумкин
      28 января 2013, 04:03
      0
      Вот в этой функции нужно добавить получение и отправку num.

      Например:
      $('.addToCartLink').live('click', function(e) {
      	var gid = $(this).data('gid');
      	var num = $(this).data('num'); // Получение кол-ва из параметра data-num. Нужно заменить под твою ситуацию
      	var params = {};
      	$('.params').each(function(id, param) {
      		params[param.name] = param.value;			
      	});
      
      	$.post(url, {action: 'addToCart', gid: gid, num: num, data: params}, function(data) {
      		data = $.parseJSON(data);
      		showResponse(data);
      		cartStatus(data);
      	})
      
      	e.preventDefault()
      })
        Игорь Терентьев
        20 декабря 2018, 08:29
        1
        +1
        Сейчас функция добавления товара примерно вот так выглядит:
        $.post(document.location.href, {ms2_action: 'cart/add', id: 636, count: 1, options: {}})
          Константин Ильин
          06 декабря 2019, 11:25
          0
          Подскажите пожалуйста, прохожу each по товарам на странице, отправляю запросы
          ответы по каждому товару успешен
          joxi.ru/YmEvaJoiJbbWO2

          Но в корзину попадают, то один товар, то два. Когда как. а их как видно на скрине 5 штук
          Что-то с таймаутом?
            Константин Ильин
            06 декабря 2019, 11:58
            0
            Решил через setTimeout
            $(this).parents('.NaborBL').find('.itemSborka').each(function(i) {
                 i++;
                var p_id = $(this).data('idp'),
                    p_cnt = $(this).find('input[name="count'+p_id+'"]').val(),
                    p_name = $(this).find('.itemSborkaName').text();
                    
                setTimeout(function () {  
                    $.post(
                        document.location.href, 
                        {
                            ms2_action: 'cart/add', 
                            id: p_id, 
                            count: p_cnt, 
                            options: {}
                        },function( r ) {
                        
                            console.log(JSON.parse( r ));
                        }
                    );
                }, 100 * i); 
            });
              Игорь Терентьев
              06 декабря 2019, 15:02
              1
              +1
              Лучше вот так сделать, иначе могут быть проблемы при добавлении большого кол-ва товаров:
              gist.github.com/ig0r74/359ad8a5f231a8dc6e0dd7a1b17ec430
                Дмитрий Белов
                21 февраля 2021, 00:45
                0
                Решил оставить вариант через промисы:
                /**
                 * Добавить список товаров в корзину
                 * @param products список товаров в формате {id: 1, count: 2, options: []}
                 */
                function addToCartAll(products) {
                    var addToCartOne = function(id, count, options) {
                        return function() {
                            return new Promise(function(resolve, reject) {
                                $.post(document.location.href, {
                                    ms2_action: 'cart/add', 
                                    id: id, 
                                    count: count, 
                                    options: options
                                }, function(response) {
                                    console.log(JSON.parse(response));
                                    resolve();
                                });
                            });
                        }
                    }
                    var promise = Promise.resolve();
                    for (var product of products) {
                        promise = promise.then(addToCartOne(product.id, product.count, product.options));
                    }
                    promise.then(function() {
                        console.log("Все запросы выполнены последовательно");
                    });
                }
                  Viktor
                  28 июля 2021, 17:13
                  0
                  Добрый вечер!
                  Реализовал из вашего примера
                  gist.github.com/ig0r74/359ad8a5f231a8dc6e0dd7a1b17ec430

                  Только вот обновить мини-корзину после такого добавления не получается.
                  Подскажите пожалуйста?
                    Виктор
                    16 февраля 2022, 14:02
                    0
                    Игорь, приветствую! Поддерживаю вопрос на счет мини-корзины. Как её так подцепить, чтоб она обновлялась при добавлении?
                    Viktor
                    29 июля 2021, 15:07
                    0
                    Подскажите пожалуйста — как после этого обновить мини-корзину без перезагрузки
                      VelikiyKostylolog
                      09 декабря 2023, 02:25
                      0
                      если нужно обновить только количество товаров добавленных в миникорзину то можно такой костылек использовать.
                      После цикла в плагине вставляем
                      $cart = $miniShop2->cart->status();
                      print_r($cart['total_count']);
                      exit();
                      а в js дописываем следующее
                      $.ajax({
                       type: "POST",
                       url: document.location.href,
                       data: {
                          custom_ms2_action: 'cart/add',
                            products: products,
                             count: 1,
                             options: {}
                            },
                            success: function(count){
                                  $('.ms2_total_count').html(count);
                             }
                      });
          Евгений
          24 марта 2013, 10:13
          0
          Василий, очень прошу помогите. Делаем своими силами сайт, но необходимо что бы можно было добавить несколько товаров сразу из категории не заходя в товар. Карточка товара вообще не нужна. Оплатим. Прошу вас помогите. Мой скайп veneravan, или как лучше нам наладить с вами связь?
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          14