Здравствуйте! В init.php сделал такую штуку:
Т.е. при создании элемента в инфоблоке "Объекты" я проверяю и создаю (если нет) новый раздел в инфоблоке "Квартиры" с таким же именем как и текущий элемент, а после создания раздела привязываю его к текущему элементу через свойство типа "Привязка к разделу" - "OBJECT_DATA" . И создание и привязка происходит корректно, вот только все остальные свойства элемента обнуляются. Как сделать так чтобы не обнулялось и при этом не произошло рекурсии (т.е. вызова обновлния из обновления или типа того)? Заранее спасибо!
| Код |
|---|
//Объекты
define("IBLOCK_OBJECTS",8);
//Квартиры
define("IBLOCK_APARTMENTS",9);
//Создаём и привязываем категории другого инфоблока к текущему элементу
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("ObjectProcess", "createNewObjectInApartments"));
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", Array("ObjectProcess", "createNewObjectInApartments"));
//Операции с объектами и квартирвми
class ObjectProcess
{
//создание нового объекта (раздела инфоблока 1-го уровня) (если такового нет) в инфоблоке "Квартиры"
public function createNewObjectInApartments($arFields)
{
$CreateNewSection = true;
$arFilter = Array(
"IBLOCK_ID"=>IBLOCK_APARTMENTS,
"NAME"=>$arFields["NAME"]
);
$SectionCount = CIBlockSection::GetCount($arFilter);
if($SectionCount>0)
{
$CreateNewSection = false;
}
else {
//Если совпадений не найдено и значение флага осталось true, создаём новую секцию и привязываем её в объекту
$bitrixSection = new CIBlockSection;
$arFields = Array(
"ACTIVE" => "Y",
"IBLOCK_ID" => IBLOCK_APARTMENTS,
"NAME" => $arFields["NAME"],
"SORT" => 500,
);
//Создаём категорию объекта в инфоблоке "Квартиры"
$idNewSection = $bitrixSection->Add($arFields);
//Привязываем созданную категорию к текущему элементу
$arFields["PROPERTY_VALUES"]["OBJECT_DATA"] = $idNewSection;
}
}
} |
Всё сбудется, стоит только расхотеть...