[spoiler]
Подойдет событие добавления цены к товару OnBeforePriceAdd - к этому времени единица измерения уже существует и можно ее изменить при помощи функции CCatalogMeasureRatio::update
AddEventHandler("catalog", "OnBeforePriceAdd", Array("MsClass", "OnUpdateMeasureRatioAfterElementAdd"));
class MsClass
{
function OnUpdateMeasureRatioAfterElementAdd($arFields)
{
if(CModule::IncludeModule('catalog') && CModule::IncludeModule('iblock')){
$res = CIBlockElement::GetByID($arFields['PRODUCT_ID']);
if($ar_res = $res->GetNext())
{ $IBLOCK_ID = $ar_res['IBLOCK_ID'];} // получим ID инфоблока, так как нужно изменять коэффициент не для всех товаров
if($IBLOCK_ID==30 || $IBLOCK_ID==31) {
$ratio = 2;
if ($IBLOCK_ID == 30) {
$ratio = 2; // коэфф 2 для шин
} elseif ($IBLOCK_ID == 31) {
$ratio = 4; // коэфф 4 для дисков
}
$db_measure = CCatalogMeasureRatio::getList(array(), $arFilter = array('PRODUCT_ID' => $arFields['PRODUCT_ID']), false, false); // получим единицу измерения только что созданного товара
while ($ar_measure = $db_measure->Fetch()) {
$new_measure = CCatalogMeasureRatio::update($ar_measure['ID'], array("RATIO" => $ratio)); // измени ее коэффициент
}
}
}
}
}
|