@alexsteadfast
PHP Developer

Почему не срабатывает обработчик при перехвате события?

Есть обработчик события при создании инфоблока в init.php
<?php
// регистрация обработчика в /bitrix/php_interface/init.php
AddEventHandler(12, "OnAfterIBlockElementAdd", "admissionToReferal");
$result = admissionToReferal($arFields);
if($result){echo 'Функция сработала';}
else echo 'Функция не сработала';

function admissionToReferal($arFieldsParam)
{
     if($arFieldsParam["ID"]>0){
	 //событие при добавлении блока Платёж
	 $payId = $arFieldsParam["ID"];
	 
	 
	 $arSelect = Array("ID", "SEND");
         $arFilter = Array("IBLOCK_ID"=>12, "ID"=>$payId);
	 $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);
	 
	  while($ob = $res->GetNextElement()){ 
         $arFields = $ob->GetFields(); 
	 $arProps = $ob->GetProperties(); 
          print_r($arFields);
	  print_r($arProps);
          }     
        }
}
?>

после создания инфоблока по идее функция должна отрабатывать, но мне возвращается строка "Функция не отработала". Где я ошибся?
  • Вопрос задан
  • 34 просмотра
Решения вопроса 1
xzdshr
@xzdshr
У вас вообще неправильно инициализируется обработчик. Плюс у вас зачем-то еще и прямой вызов функции сделан.
Посмотрите примеры в документации.

<?
// файл /bitrix/php_interface/init.php
// регистрируем обработчик
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("MyClass", "OnAfterIBlockElementAddHandler"));

class MyClass
{
    // создаем обработчик события "OnAfterIBlockElementAdd"
    function OnAfterIBlockElementAddHandler(&$arFields)
    {
        if ($arFields["ID"] > 0) {
            AddMessage2Log("Запись с кодом ".$arFields["ID"]." добавлена.");
        } else {
             AddMessage2Log("Ошибка добавления записи (".$arFields["RESULT_MESSAGE"].").");
        }
    }
}
?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@kacheleff
fullstack developer
у Вас функция admissionToReferal не возвращает никакого результата (т.е. возвращает NULL), из-за этого выводится строка "Функция не отработала".
Однако, это не означает, что функция не выполнилась.
Вызовите die() в теле функции и увидите, отработала ли она
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы