mbhusty
@mbhusty

Как пересобрать корзину Bitrix в момент оформления заказа?

Битрикс по дефолту при добавлении одинаковых товаров в заказ, сохраняет их как одну позицию х N (количество).

Решил пересобирать корзину заказа на событии OnSaleOrderBeforeSaved но есть проблема с сохранение всех полей и свойств позиций, количество которых > 1.

Пока я себе такую логику выстроил: если у позиции в корзине количество > 1, то нам нужно удалить этот товар из корзины и создать каждый отдельно в количестве N штук. Товар создается, но без свойств.

if ($quantity > 1) {
                $item = $basket->getItemById($basketItem->getId());
                $item->delete();
                $basket->save();

                for ($i = 1; $i <= $quantity; $i++) {
                    $item = $basket->createItem('catalog', $basketItem->getProductId());
                    $item->setFields(array(
                        'QUANTITY' => 1,
                        'CURRENCY' => Bitrix\Currency\CurrencyManager::getBaseCurrency(),
                        'LID' => Bitrix\Main\Context::getCurrent()->getSite(),
                        'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
                    ));
                }
            }


Может кто подсказать, как достать из корзины товар со всеми свойствами и условно клонировать его?
  • Вопрос задан
  • 209 просмотров
Пригласить эксперта
Ответы на вопрос 2
@tgarl
вам придется заново получить нужные вам свойства и добавить их
из серии
$res = \CIBlockElement::GetList(null, Array('IBLOCK_ID' => '26', 'ID' => $productId), false , false,array('ID','XML_ID','IBLOCK_EXTERNAL_ID'));
...
$arParamsProp=[...];

...
$item->getPropertyCollection()->setProperty($arParamsProp);


и да такой момент если у вас есть обмен с 1С, то вам еще потребуются неучтенные вами параметры продукта

$item->setFields(array(
                        'QUANTITY' => 1,
                        'CURRENCY' => Bitrix\Currency\CurrencyManager::getBaseCurrency(),
                        'LID' => Bitrix\Main\Context::getCurrent()->getSite(),
                        'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
"CATALOG_XML_ID" => $arParamsProp['CATALOG_XML_ID'],
"PRODUCT_XML_ID" => $arParamsProp['PRODUCT_XML_ID'],	
                    ));


а просто клонировать, такого нет, каждый чих придется самому учитывать
Ответ написан
Комментировать
scottparker
@scottparker
посмотри на это
$item->getPropertyCollection();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы