Рассмотрим методику проверки обработчиков bitrix на на работоспособность.
1. В битриксе обработчики заносяться в файл init.php
Допустим , мы нашли в документации вот такой обработчик
1 2 3 4 5 6 7 8 9 10 |
AddEventHandler("main", "OnBeforeUserLogin_addname", Array("CUserEx", "OnBeforeUserLogin")); class CUserEx { function OnBeforeUserLogin($arFields) { /* какой то код */ } } |
Но он у нас не срабатывает! Как быть? Надо проверить, а работает ли вызов обработчика в api?
Пишем такой код где нибудь на тестовой скрытой странице(не забудьте добавить свой логин пароль):
1 2 3 |
global $USER; if (!is_object($USER)) $USER = new CUser; $arAuthResult = $USER->Login("login", "pass", "Y"); |
Находим такой файл, в нем хранятся api методы для юзера.
/bitrix/modules/main/classes/general/user.php
ищем
1 |
public function Login( |
Далее рассматриваем код функции . В глаза бросается такие участки кода
1 2 3 4 5 6 7 |
GetModuleEvents("main", "OnBeforeUserLogin", true) ... GetModuleEvents("main", "OnUserLoginExternal", true) .... GetModuleEvents("main", "OnFindExternalUser", true) .... GetModuleEvents("main", "OnAfterUserLogin", true) |
После этого кода уже можно потестировать, а правильно ли работает api. И где произошел сбой в данных.
Делаем вывод, что мы обработчик огласили OnBeforeUserLogin_addname , а написан OnBeforeUserLogin, т.е. _addname — было лишней частью.
Очень часто бывает, что слово main надо заменить на какое-то еще. Это надо смотреть в конкретном методе api.
Теперь мы можем вставить в обработчик OnBeforeUserLogin($arFields) команду die() b print_r() и наконец то начать тестировать;
например лично у меня пользователь не логинился, и покопавшись по данной методике в коде- я определил, после вызова обработчика в апи- произошло изменение логина пользователя. Затем заглянул в обработчик и ужаснулся- там был левый код, который поганил вход пользователя.