Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

OnBeforeIBlockElementAdd

00 голосов
4
Добрый день, господа! с праздником!
помогите плиз решить проблему.
init.php прописал код для автоматического заполения свойства, у которого ID==146

Код
//привязка тура к каталогу

AddEventHandler("iblock", "OnBeforeIBlockElementAdd",   array("СatalogAdd", "OnBeforeIBlockElementAdd")); 

class СatalogAdd
{ 
   function OnBeforeIBlockElementAdd (&$arFields) 
     { 
     if ($arFields['PROPERTY_VALUES'][94] > 0)
     { 
     $author_id = $arFields['PROPERTY_VALUES'][94];
     $arSelect = Array("ID");
     $arFilter = Array("IBLOCK_ID"=>25, "ACTIVE"=>"Y", "PROPERTY_129_VALUE"=>$author_id);
     $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
$res_arr = $res->Fetch();
$arFields['PROPERTY_VALUES'][146] = $res_arr;  

} 
}
}


при добавлении элемента из публичной части поле заполнятся. но когда добавленный элемент редактируются из админки (изменяю статус в документообороте) заполенное поле обнуляется. условие для OnBeforeIBlockElementUpdate тоже задано.
спросил 16 Ноя, 13 от Exet (380 баллов)

4 Ответы

00 голосов
1. Для документооборота другие события.
2. Попробуйте в арСелект добавить IBLOCK_ID.
3. Почему в фильтре "PROPERTY_129_VALUE", а не "PROPERTY_129"?
ответил 01 Янв, 14 от Almarea (3,760 баллов)
00 голосов
спасибо! исправил

Код
AddEventHandler("iblock", "OnBeforeIBlockElementAdd",   array("СatalogAdd", "OnBeforeIBlockElementAdd")); 

class СatalogAdd
{ 
   function OnBeforeIBlockElementAdd (&$arFields) 
     { 
     if ($arFields['PROPERTY_VALUES'][94] > 0)
 { 
     $author_id = $arFields['PROPERTY_VALUES'][94];
     $arSelect = Array("ID",  "IBLOCK_ID");
     $arFilter = Array("IBLOCK_ID"=>25, "ACTIVE"=>"Y", "PROPERTY_129"=>$author_id);
     $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
$res_arr = $res->Fetch();
$arFields['PROPERTY_VALUES'][146] = $res_arr["ID"];  

} 
}
}

OnBeforeIBlockElementUpdate
class СatalogUpdate
содержание аналогично.

при просмотре элемента из админки также все ок, если нажать "Отменить" - поле остается заполненным, но если "Применить" или "Сохранить" значение поля очищается.
причем, если елемент изменить из публичной части через iblock.element.add, то значение снова в силе. как только админка,- хоть плачь :)
ответил 17 Апр, 14 от Exet (380 баллов)
00 голосов
Код
$res_arr = $res->Fetch();
$arFields['PROPERTY_VALUES'][146] = $res_arr["ID"];   

1. Исправьте для начала
Код
if ($res_arr = $res->Fetch())
         $arFields['PROPERTY_VALUES'][146] = $res_arr["ID"];

2. Переименуйте метод, а то он у вас с названием события совпадает - хотя это тут не при чем.
3. $arFields['PROPERTY_VALUES'][94] - тут точно нужный вам идентификатор?
ответил 10 Авг, 14 от Almarea (3,760 баллов)
00 голосов
if ($res_arr = $res->Fetch())- помогло это.
большое спасибо!
ответил 15 Дек, 14 от Exet (380 баллов)

Похожие вопросы

0 голосов
7 ответов
спросил 24 Авг, 13 от Snezhka (2,240 баллов)