Всем привет, хочу повесить обработчик, который при добавлении или изменении элементов инфоблока (торгового каталога), в зависимости от установленных единиц измерения, будет менять коэффициент.
Насколько я понял, делать это нужно через CCatalogMeasureRatioAll::update.
Создал вот такой код на отдельной странице сайта:[CODE]<?
$productId = '11521';
$arMeasure = \Bitrix\Catalog\ProductTable::getCurrentRatioWithMeasure($productId);
if($arMeasure[$productId]['MEASURE']['ID']=='6'){
$ratio = 0.001;
} else {
$ratio = 1;
}
$arOrder = array();
$arFilter = array("PRODUCT_ID" => $productId);
$arSelectFields = array();
$db_ratio = CCatalogMeasureRatio::getList ($arOrder, $arFilter, $arGroupBy = false, $arNavStartParams = false, $arSelectFields);
if($ar_ratio = $db_ratio->Fetch()) {
CCatalogMeasureRatio::update($ar_ratio['ID'],array('PRODUCT_ID'=>$productId, 'RATIO'=>$ratio));}
?>
[/CODE]
Он работает, как мне и нужно - смотрит единицы измерения у товара и если они не относятся к единицам с id=6, то коэффициент меняется.
Теперь остается вставить этот код в обработчик в init.php, получилось вот что:
[CODE]<?AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("ChangeMeasure", "OnAfterIBlockElementUpdateHandler"));class ChangeMeasure{ function OnAfterIBlockElementUpdateHandler(&$arFields) { if (CModule::IncludeModule("sale")) { if($arFields["RESULT"]) { $productId = $arFields["ID"]; $arMeasure = \Bitrix\Catalog\ProductTable::getCurrentRatioWithMeasure($productId); if($arMeasure[$productId]['MEASURE']['ID']=='6'){ $ratio = 0.001; } else { $ratio = 1; } $arOrder = array(); $arFilter = array("PRODUCT_ID" => $productId); $arSelectFields = array(); $db_ratio = CCatalogMeasureRatio::getList ($arOrder, $arFilter, $arGroupBy = false, $arNavStartParams = false, $arSelectFields); if($ar_ratio = $db_ratio->Fetch()) { CCatalogMeasureRatioAll::update(intval($ar_ratio['ID']),array('PRODUCT_ID'=>$productId, 'RATIO'=>intval($ratio))); } AddMessage2Log("Запись с кодом ".$arFields["ID"]." изменена."); } else AddMessage2Log("Ошибка изменения записи ".$arFields["ID"]." (".$arFields["RESULT_MESSAGE"].")."); } }}?>[/CODE]
Этот код почему-то не работает из init.php.
Помогите, пожалуйста, разобраться.