всем привет!
Решаю задачу с раздачей подарков, т.е. за каждые 2 товара M дается 1 товар N как подарок (с нулевой ценой).
Проблема в том, что если в корзине уже есть товар N, я могу добавить еще строку с товаром N, но не могу установить ему нулевую цену.
Как делаю:
Код |
---|
basketd = Sale\Basket::loadItemsForFUser($fuser, 's2'); #выкосим все подарки $arResult['ITEMS'] = []; foreach ($basketd as $basketItem) { if ($basketItem->getField('PRICE') == 0 ) { $basketItem->delete(); } else { $arr = ['PRODUCT_ID' => $basketItem->getProductId(), 'QUANTITY' => $basketItem->getQuantity() ]; $arResult['ITEMS'][] = $arr; } } if ($item = $basketd->getExistsItem('catalog', $offer_id)) { if ($count == 0) { $item->delete(); } else $item->setField('QUANTITY', $count); } else { $item = $basketd->createItem('catalog', $offer_id); /// Если вы хотите добавить товар с произвольной ценой, нужно сделать так: $offer = new UOffer(); $PriceObject = $offer->get_offer($offer_id); if ($region==1) { $customPrice = $PriceObject['PRICE_PILULI']['PROPERTY_PRICE_VALUE']; } else { $customPrice = $PriceObject['PRICE_1C']['PROPERTY_PRICE_VALUE']; } $item->setFields(array( 'QUANTITY' => $count, 'CURRENCY' => Bitrix\Currency\CurrencyManager::getBaseCurrency(), 'LID' => 's2', 'PRICE' => $customPrice, 'CUSTOM_PRICE' => 'Y', )); } $basketd->save(); #добавим подарки снова if ($region != 2896 && $region != 1) { $gp = new appGifts(); $giftArr = $gp->checkGifts($arResult); if ($giftArr) { foreach ($giftArr as $gift ) { $itemG = $basketd->createItem('catalog', $gift->offer_id); $itemG->setFields(array( 'QUANTITY' => $gift->count, 'CURRENCY' => Bitrix\Currency\CurrencyManager::getBaseCurrency(), 'LID' => 's2', 'PRICE' => 0, 'CUSTOM_PRICE' => 'Y', )); } } } $basketd->save(); |
Код |
---|
$itemG->setFields(array( 'QUANTITY' => $gift->count, 'CURRENCY' => Bitrix\Currency\CurrencyManager::getBaseCurrency(), 'LID' => 's2', 'PRICE' => 0, 'CUSTOM_PRICE' => 'Y', )); |
Кто-нибудь сталкивался уже с такой проблемой? Как еще можно ценник конкретной позиции задать?
Спасибо