Перейти к содержанию
Официальный форум поддержки Simpla

Массово положить товар в корзину


Перейти к решению Решено phukortsin,

Рекомендуемые сообщения

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

 

Например на странице одного товара мы имеем 3 (связанных товара)

У этих связанных товаров убираем изображение ( оставляя только имя и чекбокс с вариантом или вариантами)

 

Далее в товаре при нажатии на кнопку в корзину чтоб выделенные чекбоксы отправлялись как товары в корзину. 

 

Получается мне править два файла?

ajax/cart.php

и ajax_cart.js?

 

Как собрать все товары?

Ссылка на сообщение
Поделиться на другие сайты

+ product.tpl, к примеру:

<input type="checkbox" name="variants[{$v->id}]" value="{$v->id}">
потом в js
var data = $(this).serialize();
и передать аяксом этот массив на обработку PHP.

P.S. А вообще ты сам вряд ли что сможешь сделать, от тебя толку никакого как и денег 0.

Ссылка на сообщение
Поделиться на другие сайты

Получается мне править два файла?

ajax/cart.php

и ajax_cart.js?

 

Как собрать все товары?

Есть разные возможности.

Если постараться, то можно даже не особо большими изменениями в одном шаблоне product.tpl обойтись...

Ссылка на сообщение
Поделиться на другие сайты

 

+ product.tpl, к примеру:

<input type="checkbox" name="variants[{$v->id}]" value="{$v->id}">
потом в js
var data = $(this).serialize();
и передать аяксом этот массив на обработку PHP.

P.S. А вообще ты сам вряд ли что сможешь сделать, от тебя толку никакого как и денег 0.

 

:)  эх, последнее дело чужие деньги считать. Тут форум вроде помощи или биржа? В вашем сообщении прям требование заплатить.

Напоминает бомбил у нас в Шереметьево. (Тоже на жизнь обиженные)

Ссылка на сообщение
Поделиться на другие сайты

Есть разные возможности.

Если постараться, то можно даже не особо большими изменениями в одном шаблоне product.tpl обойтись...

 

Получается сделал так в связанных товарах вывел чекбокс 

 

в product.tpl (обернул все в form class"variants")

 

{if $related_products}

<div class="checkbox_products">
	{foreach $related_products as $related_product}
	<!-- Товар-->
	<div class="product_checkbox">
		
		<!-- Название товара -->
		<div>{$related_product->name|escape}</div>
		<!-- Название товара (The End) -->

		{if $related_product->variants|count > 0}
		<!-- Выбор варианта товара -->
     {foreach $related_product->variants as $v}
        <div class="variant">
                <input id="variants_{$v->id}" name="variants[{$v->id}]" value="1" type="checkbox" />
                {if $v->name}<label class="variant_name" for="variants_{$v->id}">{$v->name}</label>{/if}
                <span>{$v->price|convert} <span class="currency">{$currency->sign|escape}</span></span>
        </div>
        {/foreach}

		<!-- Выбор варианта товара (The End) -->
		{else}
			Нет в наличии
		{/if}


	</div>
	<!-- Товар (The End)-->
	{/foreach}
</div>
{/if}

 

Далее в ajax_cart.js

 

добавил функцию

 

$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

в data

 

data: $(this).serializeObject(),

Далее в ajax/ cart.php

 

foreach для вариантов

    if(is_array($simpla->request->get('variants'))) {
        $variants = $simpla->request->get('variants');
        foreach($variants as $s => $v) 
            $simpla->cart->add_item($s, $v);     
    }
    else	 
$simpla->cart->add_item($simpla->request->get('variant', 'integer'), $simpla->request->get('amount', 'integer'));

 

Теперь 2 товара в связанных отправляются все отлично, основной товар не отправляется.

Прошу помощи, не понял как организовать работу ajax_cart.js ( думаю там причина)

Ссылка на сообщение
Поделиться на другие сайты

Если кто поможет разобраться , 

 

Основной товар у меня идет radiobutton , а связанные через чекбокс, добавляются либо один товар который основной , а если выбираю чекбоксы то товары добавляются корректно, но без основного товара.

Ссылка на сообщение
Поделиться на другие сайты
  • 3 месяца спустя...

Пробуйте в "foreach для вариантов" убрать одно слово "else".

 

Интересно а можно данное решение реализовать только с выпадающими select.

 

Аналогично сделал, только вместо radiobuttons у меня select. Не работает

Ссылка на сообщение
Поделиться на другие сайты

Интересно а можно данное решение реализовать только с выпадающими select.

 

Аналогично сделал, только вместо radiobuttons у меня select. Не работает

 

 

Все можно    но нужно чуть переделать  если у вас несколько селектов то собирать с них   а вот если селект multiple то там наверно почти так же

 

Ссылка на сообщение
Поделиться на другие сайты

Все можно    но нужно чуть переделать  если у вас несколько селектов то собирать с них   а вот если селект multiple то там наверно почти так же

 

 

Получается что связанные товары идут выпадающим списком. А что именно переделать? ajax_cart.js по сути идет такой же.

в ajax/cart.php мы тоже foreach оставляем. где копать?

Ссылка на сообщение
Поделиться на другие сайты

Все можно    но нужно чуть переделать  если у вас несколько селектов то собирать с них   а вот если селект multiple то там наверно почти так же

 

нет, обычный селект с возможностью одного выбора.

 

ajax_cart.js

$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

// Аяксовая корзина
$('form.variants').on('submit', function(e) {
  e.preventDefault();
button = $(this).find('button[type="submit"]');
  var o1 = $(this).offset(),
      o2 = $('.cart__count').offset(),
      dx = o1.left - o2.left,
      dy = o1.top - o2.top,
      distance = Math.sqrt(dx * dx + dy * dy);
      cart = $(this).find('svg.item__button--cart'),
      check = $(this).find('svg.item__button--check'),
      count = Number($('.cart__count').html());

  $(this).closest('.product').find('.item__image > img').effect("transfer", { to: $(".cart__count"), className: "transfer_class" }, distance);
  $('.transfer_class').html($(this).closest('.product').find('.item__image').html());
  $('.transfer_class').find('img').css('height', '100%');

  if ($(this).find('input[name=variant]:checked').size() > 0) {
    variant = $(this).find('input[name=variant]:checked').val();
  }

  if ($(this).find('select[name=variant]').size() > 0) {
    variant = $(this).find('select').val();
  }

  $.ajax({
    url: "../ajax/cart.php",
    data: $(this).serializeObject(),
    dataType: 'json',
    success: function(data) {
      count++;
      $('.cart__count').html(count);
      cart.css('display', 'none');
      check.css('display', 'inline-block');
    }
  });

  return false;
});

ну а в ajax/cart.php сделал по аналогии выше с решением.

Изменено пользователем Kami
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...