Установить/скопировать значение свойства элемента из другого свойства, при создании или редактирования элемента инфоблока.
У нас есть свойство инфоблока с кодом 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 - будет работать бодрее и так правильнее
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
)
);
}
?>
Автор : Михаил Базаров