Установить/скопировать значение свойства элемента из другого свойства, при создании или редактирован...

Михаил Базаров

Дата последнего входа: 38 минут назад
Дата регистрации: 7 Февраля 2012 21:17
День рождения: 7 ноября
Пол: Мужской
Михаил Базаров -> Всем
28 ноября 11:17
Установить/скопировать значение свойства элемента из другого свойства, при создании или редактирования элемента инфоблока.

У нас есть свойство инфоблока с кодом ATT_PRICE
И есть свойство с кодом ATT_TEST

Задача: при редактировании элемента копировать значение из ATT_PRICE в ATT_TEST

Добавляем в init.php
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "OnAfterIBlockEl");
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "OnAfterIBlockEl");
function OnAfterIBlockEl(&$arFields) {
  if (CModule::IncludeModule("iblock")):
     $getProperty = CIBlockElement::GetList (
         Array("ID" => "ASC"),
         Array("IBLOCK_ID" => $arFields['IBLOCK_ID'], "ID" => $arFields['ID']),
        false,
        false,
        Array(
           'PROPERTY_ATT_PRICE'
         )
    );
    while($ar_fields = $getProperty->GetNext())
    {
         $setProperty= $ar_fields['PROPERTY_ATT_PRICE_VALUE'];
    }
   endif;
CIBlockElement::SetPropertyValuesEx (
      $arFields['ID'],$arFields['IBLOCK_ID'],array (
             'ATT_TEST' => $setProperty
          )
     );
}
Здесь: с помощью  CIBlockElement::GetList получили значение свойства ATT_PRICE для элемента с ID = $arFields['ID'] (текущий редактируемый/добавляемый элемент)
С помощью CIBlockElement::SetPropertyValuesEx установили значение ATT_PRICE в ATT_TEST
Михаил Базаров
Не большое улучшение. Так как работаем с одним, конкретным элементом- за раз. Можно заменить
CIBlockElement::GetList на CIBlockElement::GetByID - будет работать бодрее и так правильнее
<?
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "OnAfterIBlockEl");
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "OnAfterIBlockEl");
function OnAfterIBlockEl(&$arFields) {
if (CModule::IncludeModule("iblock")):
 $res = CIBlockElement::GetByID($arFields['ID']);
 if($obRes = $res->GetNextElement())
 {
     $ar_res = $obRes->GetProperty("ATT_PRICE");
     $setProperty = $ar_res['VALUE'];
 }
endif;

CIBlockElement::SetPropertyValuesEx (
  $arFields['ID'],$arFields['IBLOCK_ID'],array (
    'ATT_TEST' => $setProperty
   )
);
}
?>