Возникла задача в интернет-магазине - необходимо фильтровать товары по размеру скидки. Например, выбрать все товары со скидкой 3% (до 3% или от 3% и более, не суть важно). Обычный API не позволяет фильтровать товары по размеру скидки, поэтому пришлось костыли воротить. В качестве первой версии решил использовать сохранение размера скидки для товара в свойстве товара. Завел 2 свойства: размер скидки в процентах для гостя и для авторизованного пользователя. Очевидно, что для каждого товара эти поля должны считаться в момент сохранения товара и сохранения скидки. И вот тут начались проблемы. Скидки в базе есть, товары есть. Просто на странице если сделать вывод скидки для товара - всё ок, получаем скидку, а если запихнуть в /bitrix/php_interface/init.php по событию OnAfterIBlockElementUpdate, то уже не работает. Пробовал все возможные варианты получения скидок для товара, результат один и тот же. Вот пример просто для страницы:
Результат будет, при этом будет подсчитана цена со скидкой + будет информация о скидке. Также нормально будет работать и CCatalogDiscount::GetDiscountByProduct() и CCatalogDiscount::GetDiscount() и все остальные. Но если я размещаю аналогичный код в init.php на событие OnAfterIBlockElementUpdate, то результат получается без скидки, CCatalogDiscount::* возвращают пустой массив, CCatalogProduct::GetOptimalPrice() возвращает цену без скидки. При этом просто CCatalogDiscount::GetList(); вполне нормально работает.
Может быть я что-то перестал понимать и так и должно работать? Может быть есть другие варианты фильтрации товара по размеру скидки?
Код |
---|
CModule::IncludeModule("catalog"); $arDiscounts = CCatalogProduct::GetOptimalPrice(5986, 1, array(2)); var_dump($arDiscounts); |
Может быть я что-то перестал понимать и так и должно работать? Может быть есть другие варианты фильтрации товара по размеру скидки?