Для таких случаев у Битрикса есть так званые обработчики , с которыми более подробно можно познакомится в документации данного продукта. В данной статье я напишу ту ошибку которую делают много , в том числе и я сделал раньше .
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 в середине данного обработчика.