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

Не работает стандартный обработчик

00 голосов
8
Регистрирую обработчик события OnAfterIBlockPropertyUpdate как в документации.
Код
<?
// файл /bitrix/php_interface/init.php
// регистрируем обработчик
AddEventHandler("iblock", "OnAfterIBlockPropertyUpdate", Array("MyClass", "OnAfterIBlockPropertyUpdateHandler"));
class MyClass
{
    // создаем обработчик события "OnAfterIBlockPropertyUpdate"
    function OnAfterIBlockPropertyUpdateHandler(&$arFields)
    {
        if($arFields["RESULT"])
            AddMessage2Log("Запись с кодом ".$arFields["ID"]." изменена.");
        else
            AddMessage2Log("Ошибка изменения записи ".$arFields["ID"]." (".$arFields["RESULT_MESSAGE"].").");
    }
}
?>

Изменяю свойство любого элемента, а в логи ничего не пишет. Почему?
P.S. То же самое для события OnAfterIBlockElementUpdate работает.
спросил 15 Июнь, 13 от Asteria (1,840 баллов)

8 Ответы

00 голосов
Это событие срабатывает при изменении параметров свойства инфоблока, а не его значений у элементов.
ответил 15 Июнь, 13 от smileplz (8,020 баллов)
00 голосов
Max Pryazhevsky, да-да, понял.
А события которое реагирует на изменение свойств конкретного элемента нет?
Поискал в документации не нашел.

Дело в том, что нужно делать обработку по изменению свойства/свойств элемента, а не по изменению любого из полей элемента, а значит OnAfterIBlockElementUpdate не подходит.

Подскажите как это можно сделать, если знаете.
ответил 29 Июнь, 13 от Asteria (1,840 баллов)
00 голосов
Почему OnAfterIBlockElementUpdate не подходит?
По этому событию можно проверять изменение как полей, так свойств элементов.
ответил 02 Окт, 13 от smileplz (8,020 баллов)
00 голосов
Max Pryazhevsky, единственное что приходит на ум, это сравнивать значение, которое было до изменения со значением после изменения элемента и запускать обработчик.

Со стандартным полями arFields понятно. А есть ли в arFields обработчика значение нужного мне свойства. Наверное есть, но как его достать?
ответил 03 Янв, 14 от Asteria (1,840 баллов)
00 голосов
Сделайте полный вывод $arFields, в нем должны быть свойства в виде $arFields["PROPERTY_VALUES"]["PROPERTY_ID"].

Также поищите примеры на форуме, вот например похожая тема (в клиентский форуме).
ответил 19 Апр, 14 от smileplz (8,020 баллов)
00 голосов
Max Pryazhevsky, а как вывести на экран массив? :?:
Код
<?// файл /bitrix/php_interface/init.php
// регистрируем обработчик
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("MyClass", "OnAfterIBlockElementUpdateHandler"));
class MyClass
{
    // создаем обработчик события "OnAfterIBlockElementUpdate"
    function OnAfterIBlockElementUpdateHandler(&$arFields)    {
        print_r($arFields);
    }
}
?>

Такой вариант то ведь не пойдет…
ответил 13 Авг, 14 от Asteria (1,840 баллов)
00 голосов
Код
echo '<pre>'; print_r($arFields); echo '<pre>'; die();
ответил 18 Дек, 14 от smileplz (8,020 баллов)
00 голосов
Max Pryazhevsky, спасибо получилось.
Но свойство типа «Файл» (id свойства - 30) не выводится. А точнее выводится не полностью…
Код
[30] => Array
                (
                    [28498] => Array
                        (
                            [name] => 
                            [type] => 
                            [tmp_name] => 
                            [error] => 4
                            [size] => 0
                        )

                )

Как получить хотя бы размер или имя файла, записанного в это свойство?
ответил 08 Апр, 15 от Asteria (1,840 баллов)

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

0 голосов
1 ответ
0 голосов
2 ответов
спросил 03 Дек, 13 от XIDAN (620 баллов)
0 голосов
7 ответов
0 голосов
4 ответов
спросил 15 Июль, 13 от Storitell (340 баллов)
0 голосов
1 ответ