|
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;
}
}
?>
Пример округления цен с диапазонами
Вы можете с помощью элементарных арифметических операций самостоятельно рассчитать любую цену.
Допустим, обработчик работает по правилам:
- на товары с ценой после скидки до 1000 руб. – округление с точностью 10
- на товары с ценой после скидки более 1000 руб. – округление с точностью 100
- на товары с ценой после скидки более 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;
}
}
?>
Cобытия |
Описание курса
| Онлайн-консультант Webconsult
|