@Cyber-Pavel

Как сделать, чтобы во время добавления товара в корзину -у него менялась цена в битрикс 1с?

Добрый день. Как сделать, чтобы во время добавления товара в корзину -у него менялась цена в битрикс 1с? На данный момент у меня меняется цена, после добавления второго товара. При этом у первого цена меняется. А как сделать, чтобы при нажатие на кнопку в корзину- цена менялась у всех товаров?
<?if(CModule::IncludeModule("catalog"))
			{ 
                
                class CCatalogProductProviderCustom extends CCatalogProductProvider {

                    public static function GetProductData($arParams) {
        
        
                        $arResult = parent::GetProductData($arParams);
        
                        include_once "result.php";
                        $arResult = [
                            'BASE_PRICE' => $price, // МЕНЯЕТСЯ ДЛЯ ВСЕХ ТОВАРОВ В КОРЗИНЕ
                        ] + $arResult;
        
        
                        return $arResult;
                    }
                }
        
        
                addEventHandler(
                    'sale',
                    'OnSaleBasketItemRefreshData',
                    'BeforeBasketAddHandler'
                );
        
        
                function BeforeBasketAddHandler($BasketItem) {
        
                    $BasketItem->setField(
                        "PRODUCT_PROVIDER_CLASS",
                        "CCatalogProductProviderCustom"
                    );
                }

			}
            ?>
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
Видимо вы хотите изменить цену добавляемого в корзину item.
При этом рассуждаете так - цена item'a корзины предоставляется провайдером товара, следовательно если я заменю провайдер на свой, и буду менять в нем цену, то товар попадет корзину по нужной мне цене.
С виду логично.

Посмотрим что происходит когда реально item добавляется в корзину:
Битрикс создает item, вычисляя его цену провайдером по умолчанию, далее перед добавлением item'a в корзину, битрикс вызывает ваш обработчик, который заменяет класс провайдера, после чего добавляет товар в корзину )))

Какая у него цена? Ну логично же что она осталась той же что была на этапе создания item, то что вы потом поменяли класс провайдера, никак на цене уже созданного itema не скжажетися вплоть до нового пересчет корзины.

Пересчитайте принудительно после замены провайдера. Кажется есть или метод специальный, или save для item надо вызвать.

И да - цена тут меняется НЕ У ТОВАРА, а у пункта корзины.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы