Добрый день!
В интернет-магазине необходимо рассчитывать цену при добавлении в корзину по своим правилам.
Добавлены обрабочики:
Метод ChangeProduct заменяет в массиве $arResult поля PRICE, DISCOUNT_PRICE и DISCOUNT_VALUE по нужной логике.
При добавлении товара к заказу все работает корректно. А вот при дальнейшем увеличении/уменьшении количества товара на странице корзины (компонент sale.basket.basket), размер скидки обновляется корректно, а цена не меняется — остается такой, какая была рассчитана при добавлении. Эта же начальная цена уходит в заказ.
Записываю в txt файл массив $arResult в методе ChangeProduct, там поля PRICE и DISCOUNT_PRICE верные.
Подскажите, пожалуйста, в каком направлении копать.
В интернет-магазине необходимо рассчитывать цену при добавлении в корзину по своим правилам.
Добавлены обрабочики:
Код |
---|
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'; } |
Класс CCatalogProductProviderCustom расширяет CCatalogProductProvider, в нем переопределена функция GetProductData.
Код |
---|
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); } ... } |
При добавлении товара к заказу все работает корректно. А вот при дальнейшем увеличении/уменьшении количества товара на странице корзины (компонент sale.basket.basket), размер скидки обновляется корректно, а цена не меняется — остается такой, какая была рассчитана при добавлении. Эта же начальная цена уходит в заказ.
Записываю в txt файл массив $arResult в методе ChangeProduct, там поля PRICE и DISCOUNT_PRICE верные.
Подскажите, пожалуйста, в каком направлении копать.