Добрый день!
В интернет-магазине необходимо рассчитывать цену при добавлении в корзину по своим правилам.
Добавлены обрабочики:
[CODE]AddEventHandler('sale', 'OnBeforeBasketAdd', 'BeforeBasketAddHandler');
function BeforeBasketAddHandler(&$arFields)
{
$arFields['PRODUCT_PROVIDER_CLASS'] = '\Artmix\Classes\Providers\CCatalogProductProviderCustom';
$arFields['CUSTOM_PRICE'] = 'Y';
}
AddEventHandler('sale', 'OnBeforeBasketUpdate', 'OnBeforeBasketUpdateHandler');
function OnBeforeBasketUpdateHandler($ID, &$arFields)
{
$arFields['PRODUCT_PROVIDER_CLASS'] = '\Artmix\Classes\Providers\CCatalogProductProviderCustom';
$arFields['CUSTOM_PRICE'] = 'Y';
}
[/CODE]
Класс CCatalogProductProviderCustom расширяет CCatalogProductProvider, в нем переопределена функция GetProductData.
[CODE]class CCatalogProductProviderCustom extends \CCatalogProductProvider {
public static function GetProductData($arParams) {
$arResult = parent::GetProductData($arParams);
return self::ChangeProduct($arParams, $arResult);
}
public static function OrderProduct($arParams) {
$arResult = parent::OrderProduct($arParams);
return self::ChangeProduct($arParams, $arResult);
}
...
}[/CODE]
Метод ChangeProduct заменяет в массиве $arResult поля PRICE, DISCOUNT_PRICE и DISCOUNT_VALUE по нужной логике.
При добавлении товара к заказу все работает корректно. А вот при дальнейшем увеличении/уменьшении количества товара на странице корзины (компонент sale.basket.basket), размер скидки обновляется корректно, а цена не меняется — остается такой, какая была рассчитана при добавлении. Эта же начальная цена уходит в заказ.
Записываю в txt файл массив $arResult в методе ChangeProduct, там поля PRICE и DISCOUNT_PRICE верные.
Подскажите, пожалуйста, в каком направлении копать.