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

Как добавить товар в корзину без увеличения его количества если таковой уже имеется?

00 голосов
7
Как это сделать?
спросил 20 Июль, 13 от cartmen (460 баллов)

7 Ответы

00 голосов
При добавлении, выбрать все товары из корзины, посмотреть есть ли такой уже в корзине или нет, если есть то просто не добавлять).
CSaleBasket::GetList - эта функция выбирает товары из корзины.
ответил 20 Июль, 13 от ioannes (540 баллов)
00 голосов
Да нет, я наверно не совсем точно выразился.
Добавлять нужно обязательно, у товаров с одним и тем же ID в корзине будут разные свойства.
ответил 12 Сен, 13 от cartmen (460 баллов)
00 голосов
Тогда лучше смотреть не в сторону добавления в корзину с помощью стандартный функций добавлнения типа
Add2Basket или Add2BasketByProductID. Эти функции просто обертки класса для работы с корзиной. Нужно работать непостредственно с классом CSaleBasket, конкретно CSaleBasket::Add. Модуль интернет магазина - очень универсальная вешь, он не зависит ни от одного модуля и в корзину можно добавлять не только инфоблоки, но и другие элементы, хоть темы форума

примерно так
Код
$arFields = array(
         "PRODUCT_ID" => $arParams['PRODUCT_ID'].PREDSTAV_ID,
         "PRODUCT_PRICE_ID" => PREDSTAV_ID,
         "PRICE" => $ar_res["PRICE"],
         "CURRENCY" => $ar_res["CURRENCY"],
         "QUANTITY" => 1,
         "LID" => LANG,
         "DELAY" => "N",
         "CAN_BUY" => "Y",
         "NAME" => $tovar["NAME"]." (".PREDSTAV_NAME.")",
         "NOTES" => $arParams['PRODUCT_ID'],
      );
      
      $arProps = array();      
      $arProps[] = array(
         "NAME" => "Представитель",
         "CODE" => "PREDSTAVIT",
         "VALUE" => (PREDSTAV_NAME != "")?PREDSTAV_NAME:"Москва", 
      );
      $arFields["PROPS"] = $arProps;

      CSaleBasket::Add($arFields);
ответил 10 Дек, 13 от ioannes (540 баллов)
00 голосов
Я смотрю я поднял давно заежжаную тему, и как я понял нормального решения НЕТ.
Судя по форуму эту тему начали обсуждать еще в 2005 году, вот топик - http://dev.1c-bitrix.ru/community/forums/messages/forum6/topic1702/message76703/?phrase_id=1647192
И до сих пор все осталось без изменений???

Николай Гросу
Подставлять к ID товара еще какие-то цифры - вариант извращенный (в моем случае). У меня 2 свойства которые товар может иметь в корзине и каждого свойства может быть по 30 значений, придется писать кучу некрасивого "кустарного" кода.
ответил 24 Март, 14 от cartmen (460 баллов)
00 голосов
Ну это уж кому как удобно, но я не думаю что было оч много мороки.
"PRODUCT_ID" => $arParams['PRODUCT_ID'].Свойство1.Свойство2 хотя это чисто мои голые догадки, на самом деле обычно все гораздо сложнее :). Вы правы стандартного решения нет, но мне способ, описанный выше даже очень помог, это хоть какой, но выход ;), лучшего пока не видел)).
ответил 16 Июль, 14 от ioannes (540 баллов)
00 голосов
Что есть, то есть. Способа лучше я тоже не обнаружил.

Попутный вопрос... Добавляю в корзину с помощью CSaleBasket::Add и товар попадает в массив $arResult["ITEMS"]["nAnCanBuy"] - "Отсутствуют в продаже", все бы ничего в result_modifier.php засовываем этот массив в $arResult["ITEMS"]["AnDelCanBuy"] и отображается в корзине все как надо, НО при добавлении этого же товара его количество не увеличивается.
Почему товар попадает в массив "Отсутствуют в продаже"?? Как его положить в нужный массив ($arResult["ITEMS"]["AnDelCanBuy"])???
ответил 17 Ноя, 14 от cartmen (460 баллов)
00 голосов
если не ошибаюсь "CAN_BUY" => "Y", обязательно должно присутствовать в массиве добавляемого в корзину товара.
ответил 13 Март, 15 от ioannes (540 баллов)

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

0 голосов
3 ответов
спросил 15 Фев, 14 от asagava (680 баллов)
0 голосов
2 ответов
спросил 08 Апр, 14 от WelMax (430 баллов)
0 голосов
4 ответов