Также попробовал CSaleBasket::ADDВ документации написано: Функция добавляет товар в корзину, если его ещё нет, и обновляет параметры товара с увеличением количества, если он уже находится в корзине.
Код
<?
AddEventHandler("sale", "OnBasketAdd", "AddPresentToBasket";
function AddPresentToBasket($ID,&$arFields)
{
$arFields = array(
"PRODUCT_ID" => 121,
PRODUCT_PRICE_ID => 0;
"PRICE" => 6000,
"CURRENCY "=> 'RUB',
"WEIGHT "=> 0,
"QUANTITY" => 2,
"LID" => SITE_ID,
"DELAY" => "N",
"CAN_BUY" => "Y",
"NAME" => "тест",
"CALLBACK_FUNC" => "MyBasketCallback",
"MODULE" => "catalog",
"NOTES" => "Товар в подарок",
"ORDER_CALLBACK_FUNC" => "MyBasketOrderCallback"
//DETAIL_PAGE_URL => ссылка на страницу детального просмотра товара;
//PROPS => массив свойств товара, который сохраняется в корзине. Каждый элемент этого массива является массивом следующего формата:
);
CSaleBasket::ADD(121, $arFields);
}
?>
Функция отрабатывает, но добавляет товар... По докам теоретически должна изменять количество уже имеющегося товар в корзине... Товар с ID - 121 уже есть в корзине
нет он меняет, но в корзине стоит метод callback и он возвращает старые данные если ты просто обновлял вкладку, зайди на нее по новому, по крайней мере у меня было такое
Если нужно сразу после добавления обновлять запись в корзине, нужно использовать OnBeforeBasketAdd. Не будет лишних операций с базой. И посмотрите, что возвращает CSaleBasket::Update, раз уж необходимо делать так, как вы делаете.
в корзине можно и в script.js postData['QUANTITY_' + items.rows[i].id] = BX('QUANTITY_' + items.rows[i].id).value; в php, сморите $arFilds['Name'] отмечено как обязательное. У меня тоже кол-во не обновляет, но в заказ падает уже обновленный.