Помогите разобраться! При обновлении элемента инфоблока Битрикс, по событию должно присваиваться значение. Если изначально поле значения пустое, то код не работает. Точнее срабатывает со второго раза. Нужно зайти в изменение элемента и нажать "сохранить" без изменения значения.
<?php
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("StartRatingUpdate", "Update"));
class StartRatingUpdate
{
function Update(&$arFields)
{
if ($arFields['IBLOCK_ID'] == BOXER_IBLOCK_ID) {
$db_props = CIBlockElement::GetProperty(
$arFields['IBLOCK_ID'],
$arFields['ID'],
['sort' => 'asc'],
['CODE' => 'ATT_BXREC_RT']
);
if ($ar_props = $db_props->Fetch()) {
$bxrecRatingVal = $arFields['PROPERTY_VALUES'][$ar_props["ID"]][$ar_props["PROPERTY_VALUE_ID"]]['VALUE'];
if (!empty($bxrecRatingVal)) {
$arFields['PROPERTY_VALUES'][$ar_props["ID"]][$ar_props["PROPERTY_VALUE_ID"]]['VALUE'] = 'HELLO!';
}
}
}
}
}
?>
Попробуйте так:
<?php
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("StartRatingUpdate", "Update"));
class StartRatingUpdate
{
function Update(&$arFields)
{
if ($arFields['IBLOCK_ID'] == BOXER_IBLOCK_ID) {
$db_props = CIBlockElement::GetProperty(
$arFields['IBLOCK_ID'],
$arFields['ID'],
['sort' => 'asc'],
['CODE' => 'ATT_BXREC_RT']
);
if ($ar_props = $db_props->Fetch()) {
CIBlockElement::SetPropertyValueCode($arFields['ID'], "ATT_BXREC_RT", 'HELLO!');
}
}
}
}
?>
Обратите внимание! Вот ссылка на мануал метода SetPropertyValues
В вашем случае использован кусок кода из Пример 2 (код вызова метода для свойства типа "Строка") т.е. это работает если свойство куда будет записываться значение имеет тип "Строка"
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости