float функция-обработчик(  float $price, float $original_price );

Событие вызывается в конце функции  CAskaronRound::Apply после применения всех округлений и позволяет изменить конечный результат

Параметры:

$price - получившаяся после округления цена
$original_price - цена до всех округлений

Пример обработчика события, который для всех цен меньше 10 отменяет округление:

<?
// файл /bitrix/php_interface/init.php

AddEventHandler("askaron.round", "OnAfterApply", Array("CMyRound", "OnAfterApply"));

// возвращать цену без округления в случае, если исходная цена товара меньше 10
class CMyRound
{
  public static function OnAfterApply($price, $original_price)
  {
    $result = $price;

    if ( $original_price < 10 )
    {
      $result = $original_price;
    }

    return $result;
  }
}
?>



Пример округления цен с диапазонами


Вы можете с помощью элементарных арифметических операций самостоятельно рассчитать любую цену.

Допустим, обработчик работает по правилам:
  1. на товары с ценой после скидки до 1000 руб. – округление с точностью 10
  2. на товары с ценой после скидки более 1000 руб. – округление с точностью 100
  3. на товары с ценой после скидки более 10000 руб. – округление с точностью 1000
Разместить код обработчика удобнее всего в /bitrix/php_interface/init.php

Файл /bitrix/php_interface/init.php как раз предназначен для таких задач, при обновлении Битрикса не изменяется. Если такого файла нет, создайте его.

Внимание:
Настоятельно не рекомендуется редактировать файл через админку Битрикса.
Лучше всего редактировать файл через панель управления хостингом или по FTP.

<?
// Регистрируем обработчик события при округлении скидок.
AddEventHandler("askaron.round", "OnAfterApply", Array("CMyRound", "OnAfterApply"));

class CMyRound
{
    public static function OnAfterApply($price, $original_price)
    {
        $result = $original_price;

        // функция round округляет по арифметическим правилам.
        // можно округлять в меньшую сторону, если заменить round() на floor()
        // можно округлять в большую сторону, если заменить round() на ceil()

        // можно сделать психологически привлекательную цену, если после округления отнять 1
        // если цена уменьшилась сильно, можно добавить корректировку.

        if ( $original_price < 1000 )
        {
            $result = round( $original_price / 10 ) * 10;
            //$result = max(0, $result -1);

            // корректировка после округления имеет смысл только
            // после округления в меньшую сторону (floor) и психологического округления
            //if ( $original_price - $result > 10 )
            //{
            //     $result = $result + 10;
            //}
        }
        elseif ( $original_price >= 1000 && $original_price < 10000 )
        {
            $result = round( $original_price / 100 ) * 100;
            //$result = max(0, $result -1);
           
            // корректировка после округления имеет смысл только 
            // после округления в меньшую сторону (floor) и психологического округления
            //if ( $original_price - $result > 100 )
            //{
            //     $result = $result + 100;
            //}
        }
        else
        {
            $result = round( $original_price / 1000 ) * 1000;
            //$result = max(0, $result -1);


            // корректировка после округления имеет смысл только 
            // после округления в меньшую сторону (floor) и психологического округления
            //if ( $original_price - $result > 1000 )
            //{
            //     $result = $result + 1000;
            //}
        }
       
        return $result;
    }
}
?>

 


0  


 Cобытия | Описание курса | Онлайн-консультант Webconsult