Свойство записывается со второго раза

170
21 октября 2021, 00:20

Помогите разобраться! При обновлении элемента инфоблока Битрикс, по событию должно присваиваться значение. Если изначально поле значения пустое, то код не работает. Точнее срабатывает со второго раза. Нужно зайти в изменение элемента и нажать "сохранить" без изменения значения.

  <?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!';

                    }
                }
            }
        }
    }
    ?>
Answer 1

Попробуйте так:

<?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 (код вызова метода для свойства типа "Строка") т.е. это работает если свойство куда будет записываться значение имеет тип "Строка"

READ ALSO
как из базы mysql поле text построчно обернуть в li?

как из базы mysql поле text построчно обернуть в li?

в базе mysql поле Usloviya просто текст (это одно поле):

202
ООП возврат строки

ООП возврат строки

Имеется класс

156
запись объекта в массив

запись объекта в массив

на вход поступает объект, нужно записать в сsv файл, преобразовав объект в массив

95