Только максимальная скидка (не суммируем скидки в битрикс)

На событии применение скидок, вешаем функцию, которая отбирает максимальную скиду. Если максимальных скидок на товар более 1, то выбираем ту, что выше по ID

AddEventHandler("catalog", "OnGetDiscountResult", "getDiscountResultEvent");

static public function getDiscountResultEvent(&$arResult): array
    {
        if ($arResult) {
            $values = array_column($arResult, 'VALUE');
            $maxValue = max($values);

            $maxValueElements = [];
            foreach ($arResult as $key => $item) {
                if ($item['VALUE'] == $maxValue) {
                    $maxValueElements[$key] = $item;
                }
            }

            if (count($maxValueElements) > 1) {
                $maxValueElementIds = array_keys($maxValueElements);
                $lastMaxValueElementId = end($maxValueElementIds);
                $arResult = [$lastMaxValueElementId => $maxValueElements[$lastMaxValueElementId]];
            }
            else{
                $arResult = $maxValueElements;
            }

        }
        return $arResult;
    }
Оцените документ
Обновлено 03.02.2025

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *