@vcherepko

Как отловить событие изменения цены товара в Битриксе?

Добрый день.
Есть инфоблок "Каталог", "Является торговым каталогом".
Мне необходимо отловить событие изменения цены товара.
Я использую обработчик
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler("catalog", "\Bitrix\Catalog\Price::onBeforeUpdate", ["ActionPrice", "handlerOnPriceUpdate"]);
class ActionPrice {
  public function handlerOnPriceUpdate(Entity\Event $event) {   
    $result = new Entity\EventResult;
    $data = $event->getParameter("fields");
    AddMessage2Log(print_r($data, true)); 
  }
}

Проблема в том этот обработчик срабатывает при каждом сохранении товара, вне зависимости была изменена цена или нет. При нажатии на кнопку Сохранить он срабатывает.
Мне необходимо отловить фактическое изменение цены
  • Вопрос задан
  • 663 просмотра
Решения вопроса 1
@vcherepko Автор вопроса
Вроде разобрался!
Пример рабочего кода
$eventManager->addEventHandler( 'catalog', '\Bitrix\Catalog\Price::OnBeforeUpdate',
static function (\Bitrix\Main\Event $event) {          
  $data = $event->getParameter("fields");   
  $rsPrice = \Bitrix\Catalog\Model\Price::getList(array('filter'=>array('PRODUCT_ID'=>$data['PRODUCT_ID'])))->fetch();
} 
);

Как я понял событие Price::OnBeforeUpdate срабатывает всегда, вне зависимости от изменения цены.
Поэтому, для того чтобы отследить изменение цены необходимо сначала отдельным запросом получить текущую цену, а затем сравнить ее с той что пришла в $data.

Может я что-то не так понял, поправьте если что...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
используйте 2 обработчика - до изменения цены и после.
И сравнивайте значения
Ответ написан
Ваш ответ на вопрос

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

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