Здравствуйте! Объясните пожалуйста, что происходит? Задача, написать обработчик, который при изменении элемента будет записывать некоторые значения в торговый каталог, вот обработчик, с ним всё в порядке, срабатывает, нюанс в том,
Код |
---|
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "setProperty" );
function setProperty(&$arFields){
if($arFields['IBLOCK_ID'] == 15){
Cmodule::IncludeModule('catalog');
$PRODUCT_ID = $arFields['ID']; // id товара
$Fields = array('WIDTH' => 666, 'LENGTH' => 666, 'HEIGHT' => 666);
CCatalogProduct::Update($PRODUCT_ID, $Fields);
//$ar_res = CCatalogProduct::GetByID($arFields['ID']);
//print_r($ar_res);
//die;
}
}; |
Видите три закомментированные строчки? Если они закомментированные, то присвоение новых значений вроде как не выполняется этой строчкой
Код |
---|
CCatalogProduct::Update($PRODUCT_ID, $Fields); |
Зато если их раскомментировать, прервав этим сценарий обработки, то присвоение новых значений отлично срабатывает, новые значени остаются в торговом каталоге. Получается, после завершения обработчика отменяется операция
Код |
---|
CCatalogProduct::Update($PRODUCT_ID, $Fields); |
и указанным полям присваиваются прежние значения. Объясните пожалуйста, почему так происходит и как этого избежать? Надо чтобы вот это выполнялось в обработчике и оставалось конечным результатом после его завершения
Код |
---|
$PRODUCT_ID = $arFields['ID']; // id товара
$Fields = array('WIDTH' => 666, 'LENGTH' => 666, 'HEIGHT' => 666);
CCatalogProduct::Update($PRODUCT_ID, $Fields); |