Для таких случаев у Битрикса есть так званые обработчики , с которыми более подробно можно познакомится в документации данного продукта. В данной статье я напишу ту ошибку которую делают много , в том числе и я сделал раньше .
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("OABEAClass", "OABEA")); // объявляем обработчики AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("OABEAClass", "OABEA")); class OABEAClass { public static $disableHandler = false; //что бы не было зацикливания , важно потому что если не сделать это, // наш скрипт будет работать то того момента пока не исчерпает время или память function OABEA(&$arFields) { if (self::$disableHandler) return; CModule::IncludeModule("iblock"); if( $arFields["ID"]> 0 && $arFields["IBLOCK_ID"] == "3") //оприделяем ид ИБ ! { //наши действия $el = new CIBlockElement; $arrFile = CFile::MakeFileArray($file); $arLoadProductArray = Array( "ACTIVE" => "Y", // активен "DETAIL_PICTURE" => $arrFile, "PREVIEW_PICTURE" => $arrFile, ); self::$disableHandler = true; //отключаем if($res = $el->Update($arFields["ID"], $arLoadProductArray)) { //echo"";print_r($arrFile);echo""; //echo"";print_r($arFields);echo""; //die(); } } } }
public static $disableHandler = false;
if (self::$disableHandler) return;
и
self::$disableHandler = true;
должны присутствовать в обработчике OnAfterIBlockElementUpdate если мы хотим использовать метод CIBlockElement::Update в середине данного обработчика.