@Snatch87
Битриксоид по принуждению

Как описать события изменения цены (в свежем битриксе)?

Всем привет!

Возникла следующая потребность: при изменении цены элемента, записывать значение цены в свойство данного элемента инфоблока.
Версия Битрикс 18.0.9

Раньше можно было воспользоваться событием OnPriceUpdate(Add), либо OnBeforePriceUpdate(Add)
Но, описывая обработчики данных событий, ничего не происходит. В обработчиках делал просто дамп полей в файл, чтобы убедиться в их работоспособности.
Полазив в документации обнаружил, что метод CPrice::Update и Add объявлены, как deprecated и рекомендуется использовать \Bitrix\Catalog\Model\Price::update
В старом ядре CPrice::Update вызывал события, в новом он вызывает, указанный ранее \Bitrix\Catalog\Model\Price::update, который в свою очередь НЕ вызывает события.

Отсюда вытекает вопрос, как отследить изменение / добавление цены ?

Пробовал делать в обход, через события инфоблоков, после сохранения элемента (OnAfterIBlockElementUpdate) получать цену из таблицы цен (\Bitrix\Catalog\PriceTable) и записывать в свойств, но проблема в том, что сначала выполняются все события для элемента, а потом записывается цена, и при сохранении мы можем получить только старую цену!
  • Вопрос задан
  • 6112 просмотров
Решения вопроса 1
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
1й вариант:
зайти в Настройки > Настройки продукта > Настройки модулей > Торговый каталог и там включить "Включить поддержку устаревших событий"

2й вариант:
Переписать событие на D7. Вешайте обработчик на событие \Bitrix\Catalog\Price::OnAfterUpdate:
$bxEventManager->addEventHandler(
    'catalog',
    '\Bitrix\Catalog\Price::OnAfterUpdate',
    [
        \Yout\Namesspace\ClassName::class,
        "onAfterUpdatePriceHandler"
    ]
);


А в обработчике \Yout\Namesspace\ClassName::onAfterUpdatePriceHandler уже описывайте свою логику.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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