всем привет!
Решаю задачу с раздачей подарков, т.е. за каждые 2 товара M дается 1 товар N как подарок (с нулевой ценой).
Проблема в том, что если в корзине уже есть товар N, я могу добавить еще строку с товаром N, но не могу установить ему нулевую цену.
Как делаю:
[CODE]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();[/CODE]
получается, что не срабатывает часть:[CODE]$itemG->setFields(array(
'QUANTITY' => $gift->count,
'CURRENCY' => Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'LID' => 's2',
'PRICE' => 0,
'CUSTOM_PRICE' => 'Y',
));[/CODE]
Кто-нибудь сталкивался уже с такой проблемой? Как еще можно ценник конкретной позиции задать?
Спасибо