Пример #1
0
 /**
  * Функция возвращает минимальную цену с учетом скидки по купону, объемной и накопительно скидок
  * или если находит пользовательскую функцию обработки цены, возвращает её результат.
  * 
  * @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);
 }