/** * Функция возвращает минимальную цену с учетом скидки по купону, объемной и накопительно скидок * или если находит пользовательскую функцию обработки цены, возвращает её результат. * * @param $arFields массив данных, которые можно использовать для формирования своей цены: * product - информация о продукте, включающая оригинальную цену * priceWithCoupon - цена с примененной скидкой по купону * priceWithDiscount - цена с примененной накопительной или объемной скидкой */ public function customPrice($arFields) { $result = $arFields['priceWithCoupon'] < $arFields['priceWithDiscount'] ? $arFields['priceWithCoupon'] : $arFields['priceWithDiscount']; $product = $arFields['product']; $priceArgs = array('priceWithCoupon' => $arFields['priceWithCoupon'], 'priceWithDiscount' => $arFields['priceWithDiscount']); $priceCustomFunctionsList = MG::getInstance()->getPriceCustomFunctions(); usort($priceCustomFunctionsList, 'sortFunctionByPriority'); foreach ($priceCustomFunctionsList as $function) { $priceArgs['product'] = $product; $args[0] = $priceArgs; if (function_exists($function['function_name']) && empty($function['class'])) { $product['price'] = call_user_func_array($function['function_name'], $args); } elseif ($function['class'] && class_exists($function['class'])) { $product['price'] = call_user_func_array(array($function['class'], $function['function_name']), $args); } $result = $product['price']; } $args = func_get_args(); return MG::createHook(__CLASS__ . "_" . __FUNCTION__, $result, $args); }