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

AddEventHandler - указание пути

00 голосов
2
Всем доброго времени суток.
Проблема банальна: нужно создать обработчик событий.

При занесении AddEventHandler, а так же функции обработчика в init.php все прекрасно работает и обрабатывается. Появилась логичная идея не захламлять init.php лишними функциями, а вынести их в отдельный файл, с чем и возникла проблема: никаких признаков работы не наблюдается.

Пример исходного рабочего кода, полностью занесенного в init.php:
Код
function 4test()
      {
         $h = fopen("test.txt","a");
         $text = "isItWorking?";
         fwrite($h,$text);
         fclose($h);
      }

AddEventHandler("iblock","OnIBlockPropertyBuildList","4test");
Итогом выполнения кода является добавление строки $text в какой-то файл на сервере при событии "OnIBlockPropertyBuildList".

Код с вынесением:
Код
/*файл init.php*/
AddEventHandler("iblock","OnIBlockPropertyBuildList","4test",100,"\bitrix\php_interface\test_property\prop_type.php");

/*файл prop_type.php, расположение: имя_сайта\bitrix\php_interface\test_property\prop_type.php*/
function 4test()
      {
         $h = fopen("test.txt","a");
         $text = "isItWorking?";
         fwrite($h,$text);
         fclose($h);
      }
Итогом выполнения кода является... ничего. Файл не дописывается, при удалении - не создается.
Вопрос банален - в чем ошибка разнесения кода?..
C RegisterModuleDependences, кстати, та же история.

BTW в чем смысл оформления функций обработчиков через классы в примерах документации? Упорядоченность и красивый вид?
спросил 27 Окт, 13 от JoVani (120 баллов)

2 Ответы

00 голосов
Еще одно интересное наблюдение... собственно, обработчик делается для создания собственного типа свойств, а запись в файл - просто проверка.
В процессе создания этого обработчика через init.php свойство замечательно добавляется, а через вынесение - сопровождается всякими паранормальными явлениями... так, например, вместо его названия идет просто пустая строка.
Код добавления свойства (он идентичен для задание в init.php и через вынесение):
Код
function GetUserTypeDescription()
      {
         return array(
            'PROPERTY_TYPE'   => 'S',
            'USER_TYPE'       => 'Test_IntReadOnly',
            'DESCRIPTION'         => 'Test_Prop',
            'GetPropertyFieldHtml'  => 'GetPropertyFieldHtml', //эти функции объявлены ниже, не привожу, чтобы не захламлять код
            'ConvertToDB'       => 'ConvertToDB',
            'ConvertFromDB'   => 'ConvertFromDB'
         );
      }

 /*строка только в init.php:*/
 AddEventHandler("iblock",'OnIBlockPropertyBuildList','GetUserTypeDescription',100,"\bitrix\php_interface\test_property\prop_type.php");
Как это безобразие выглядит:
Рисунок
ответил 26 Ноя, 13 от JoVani (120 баллов)
00 голосов
Документация говорит, нужен полный путь. Т.е., видимо, надо добавить в начало пути
Код
$_SERVER["DOCUMENT_ROOT"]
ответил 08 Март, 14 от Fenozipam (420 баллов)

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

0 голосов
2 ответов
спросил 07 Апр, 14 от Hax (1,100 баллов)
0 голосов
2 ответов
спросил 14 Окт, 13 от XpoHo3aBp (860 баллов)