Не зарегистрирован
Вход
Забыли пароль?
Регистрация
Подписаться
Сэкономьте время — перед вопросом на форуме узнайте, как найти ответ быстрее
По техническим проблемам необходимо обращаться в Консультационный центр

Поиск по форуму: 

Приглашаем в блог Amiro.CMS. Регулярные обзоры, опыт, решения, практикумы.

Форум  ->   Интернет Магазин  ->  Добавление множества товаров в корзину на одной странице

Вопросы по настройке магазина, каталога.

Добавлено: 14.05.13 06:43:44 #1



Регистрация: 17.11.09
Сообщений: 109


Обратиться по имени

Всем здравствуйте!

нужно реализовать возможность:
Добавления множества товаров в корзину на одной странице

Пример (вкладка "Цена":
http://www.techelectro.ru/prod/lugs/tml

Есть 20-30 однотипных товаров (различающихся диаметрами, размерами и пр.)
Хотелось чтобы выбирали необходимое количество товаров и добавляли в корзину все эти товары на одной странице.
1. Все товары были списком, в таблице.
2. Напротив каждого товара была кнопка "В корзину" и окошко для ввода количества.
3. Не выходило бы всплывающее окно - "Продолжить покупки - перейти в корзину" каждый раз, когда добавил какой-то тип товара

Выбрал:
Товар 1 - 10 шт.
Товар 2 - 25 шт.
Они ушли в корзину - а покупател при желании перешёл на другую страницу и там выбрал еще какие-то товары из другой таблицы...




Добавлено: 20.05.13 14:07:01 #2



Регистрация: 02.08.12
Сообщений: 338


Обратиться по имени

Вроде на форуме такое обсуждалось, но как-то я не нашёл.

Суть - необходимо сделать JS функцию, которая будет отправлять ряд запросов на добавление определённых товаров.

Вероятно, у кого-то из партнёров есть решение.




Флужу на форуме. Набиваю репу. Даю глупые советы.
Добавлено: 20.05.13 17:37:19 #3



Регистрация: 26.05.08
Сообщений: 984


Обратиться по имени

Задача решается достаточно легко. Вместо ключевых параметров:

itemId
qty
num
propId
price


нам нужно передавать аналогичные переменные, содержащие массивы:

itemId[i]
qty[i]
num[i]
propId[i]
price[i]
где i=[1,N]


Соответственно, задача сводится к формированию урла вида:

http://имядомена.ru/katalog/internet-magazin/dlja-umenija/tvorchestvo/rukodelie/bolshoj-nabor-dlja-rukodelija?itemId[0]=203&itemId[1]=204&num=0&offset=0&catoffset=0&action=add&qty[0]=11&qty[1]=3

Важно! Количество для каждого из товаров указывать обязательно.



Добавлено: 14.10.13 14:34:29 #4




Регистрация: 08.10.13
Сообщений: 102


Обратиться по имени

Добавлю от себя мысль, кому может пригодится.

Есть готовая стоковая функция amiCart.add, которая получает данные, отправляет их через AJAX и возвращает результат в виде обновленного спецблока корзины. Достаточно вклиниться напрямую во второй этап - отправку через AJAX. Это будет:

amiCart.sendRequest(url, path, args), где

url - адрес сайта ('http://business.amiro.ru' ; );
path - полный путь до страницы добавления товара ('http://business.amiro.ru/katalog/internet-magazin/dlja-razvlechenija/igrushki/optika' ; );
args - хэш данные, о которых писал Евгений Лапин ('?&itemId[0]=204&itemId[1]=206&qty[0]=1&qty[1]=2&action=add' ; ).

amiCart.sendRequest('http://business.amiro.ru', 'http://business.amiro.ru/katalog/internet-magazin/dlja-razvlechenija/igrushki/optika', '?&itemId[0]=204&itemId[1]=206&qty[0]=1&qty[1]=2&action=add')

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



Добавлено: 14.10.13 20:30:18 #5




Регистрация: 08.10.13
Сообщений: 102


Обратиться по имени

Не, сделаем круче - сразу кнопку, по нажатию которой в корзину полетят все товары, количество которых стоит больше нуля )

addItems = function() {
	hashLink = '';
	url = location.origin;
	urlCat = url+location.pathname;
	itemsCount = $('.eshop-item-list__container:eq(0) .eshop-item-small').length;
	$('.eshop-item-list__container .eshop-item-small').each(function(i) {
		var idItem = Number(($(this).find('.eshop-item-small__cart-form').eq(0).attr('name')).replace(/\D+/g,"")/10); // получаем ID товара
		var qtyValue = $(this).find('.eshop-item-small__quantity:eq(0)').attr('value'); // получаем количество товара

		if(qtyValue > 0) { // если количество одного товара из набора больше нуля, то добавляем его в корзину
			if(hashLink == '') {
				hashLink = '?&itemId['+i+']='+idItem+'&qty['+i+']='+qtyValue;
			} else {
				hashLink += '&itemId['+i+']='+idItem+'&qty['+i+']='+qtyValue;
			}
		}
	});
	hashLink += '&action=add';
	amiCart.sendRequest(url, urlCat, hashLink);
}

$('#index_html').find('div:eq(0)').after('<input value="Добавить все товары с количеством > 0" type="button" onclick="addItems();" />');

Целиком код запустить можно на главной http://business.amiro.ru/ в JS-консоли. Разумеется это хардкод, сделанный конкретно под верстку демо-сайта ) Но кому понадобится - переделать под свой лад труда не составит.

Кнопка "Добавить все товары с количеством > 0" появится сразу после анонса описания ИМ.



Добавлено: 14.10.13 21:30:27 #6




Регистрация: 08.10.13
Сообщений: 102


Обратиться по имени

Правда строка:

var idItem = Number(($(this).find('.eshop-item-small__cart-form').eq(0).attr('name')).replace(/\D+/g,"")/10);

Получилась в итоге не совсем верной.. Т.е. из атрибута name="spec_eshop_special_00100011020000qty_203_0" нужно вытащить айдишник товара 203, а получается все число, вместе с префиксом спецблока. Тут лучше в шаблоне поставить какой-нибудь data-item-id="##itemid##" и брать значение уже из него:

$(this).attr('data-item-id');

В общем, хардкод, что тут скажешь



Добавлено: 13.11.13 15:01:11 #7



Регистрация: 15.01.13
Сообщений: 9


Обратиться по имени

Еще вариант (для чайников, как я). Добавляем товары в каталог товаров.На вкладке Параметры и SEO ставим птичку "не отображать в списках". При этом в прайс-листе этот товар все равно будет отображаться. Не забываем в настройках прайс-листа установить опцию, разрешающую добавлять товары в корзину прямо из прайс листа. Создаем табличку со списком товаров, на "Добавить в корзину" (или любой другой текст) делаем гиперссылку. Тип ссылки - активный сценарий. Текст ссылки копируем из прайс-листа со своего сайта. Вот только при этом нельзя указать количество товара, но его можно изменить позже, при просмотре своей корзины.



Алексей


Создать новую тему

Всего тем: 6661
Всего сообщений: 27851
Всего зарегистрированных пользователей: 26741
Последний зарегистрированный пользователь: user6353089940