Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Множественное добавление товаров в корзину

00 голосов
1
Здравствуйте!

Редакция мылый бизнес, как можно реализовать в детальной карточки товара множественное добавление в корзину, т.е не по одному торговому предложению, а допустим указал у каждого торгового предложение колличество жмешь на кнопку добавить и добавляются все те размеры у которых указывал колличество?

Или хотябы как называется такой функцонал? мб на маркет плэйсе кто натыкался на такое?
спросил 15 Апр, 16 от loony (540 баллов)

1 Ответ

00 голосов

Добрый день.

Это совсем не сложно, так что в маркетплейсе решения не будет.

Суть примерно такая - в карточке вам надо что-то типа списка чекбоксов с ID товаров для добавления в корзину - 
<input type='checkbox' name='product[]' value='1'>

А на странице, обрабатывающий SUBMIT кнопки покупки, пройти по $_REQUEST['product'] и сделать Add2BasketByProductID.

int Add2BasketByProductID( $PRODUCT_ID, $QUANTITY = 1, $arRewriteFields = array(), $arProductParams = false);

Функция добавляет в корзину товар с кодом PRODUCT_ID в количестве QUANTITY единиц (по умолчанию одну штуку) и возвращает код позиции товара в корзине. Функция является оберткой надCSaleBasket::Add, но при этом размещена в модуле Торгового каталога.

ответил 16 Апр, 16 от root (25,590 баллов)
Вот в таком виде передается:
id=152&quantity=5&id=153&id=154&action=BUY&Add2BasketByProductID=%D0%9A%D0%A3%D0%9F%D0%98%D0%A2%D0%AC

Но передается опять только первый элемент.
Попробовал изменить name="id[152]" name="id[153]" в таком случает вообще ниче не падает в корзину, я что то не так делаю?
Да. Одинаковые id=152&id=154 приводят к тому, что в $_GET остаётся только последний id=154. А если будет id[]=152&id[]=154 - в $_GET['id'] будет массив из 152 и 154.
все верно в массиве $_GET вот такие данные:
Array
(
    [id] => Array
        (
            [0] => 152
            [1] => 153
            [2] => 154
        )

    [action] => BUY
    [Add2BasketByProductID] => КУПИТЬ
)

вот фрагмент кода который я разместил на странице:
        <form action="<?=$_REQUEST['id']?>" method="">
                <input type='checkbox' name="id[]" value='152'>
                <input type='checkbox' name="id[]" value='153'>
                <input type='checkbox' name="id[]" value='154'>
             
                <input type="hidden" name="action" value="BUY">
                <input type="submit" value="КУПИТЬ" name="Add2BasketByProductID">
        </form>
        <?foreach($_REQUEST['id']  as $PRODUCT_ID){
        Add2BasketByProductID( (int)$PRODUCT_ID, (int)$_REQUEST['quantity']);}?>


Все равно не падают товары в корзину, мб из за того что в ключе  [Add2BasketByProductID]  не то значение?
Тут вот такой момент - по идее вы вызов Add2BasketByProductID должны из шаблона компонента убрать. template.php может просто не выполняться, если компонент кеширует вывод. По идее Add2BasketByProductID логично расположить в component_epilog.php, который 100% не кешируется.
И submit делать через POST (защитит от двойных добавлений товара в корзину при обновлении страницы), и при успешной обработке добавления в корзину делать LocalRedirect($APPLICATION->GetCurPage());
у меня почему то в корзину падают все торговые предложения, хотя я количество ввел только у одного, это можно как то исправить?

Похожие вопросы

0 голосов
7 ответов
спросил 05 Июль, 13 от dQ (180 баллов)
0 голосов
0 ответов
0 голосов
2 ответов
0 голосов
3 ответов
0 голосов
1 ответ
спросил 14 Июль, 13 от vlastelin (120 баллов)