Документация для разработчиков

AddEventHandler

AddEventHandler(
 string from_module_id,
 string MESSAGE_ID,
 mixed callback,
 int sort = 100,
 mixed full_path = false
);

Регистрирует произвольный обработчик callback события event_id модуля from_module_id. Если указан полный путь к файлу с обработчиком full_path, то он будет автоматически подключен перед вызовом обработчика. Вызывается на каждом хите и работает до момента окончания работы скрипта.

Аналоги функции в новом ядре D7: Bitrix\Main\EventManager::addEventHandler (новый формат) и Bitrix\Main\EventManager::addEventHandlerCompatible.

Параметры функции

ПараметрОписание
from_module_id Идентификатор модуля который будет инициировать событие.
MESSAGE_ID Идентификатор события.
callback Название функции обработчика. Если это метод класса, то массив вида Array(класс(объект), название метода).
sort Очередность (порядок), в котором выполняется данный обработчик (обработчиков данного события может быть больше одного).
Необязательный параметр, по умолчанию равен 100.
full_path Полный путь к файлу для подключения при возникновении события перед вызовом callback.

Примечание

Все зарегистрированные обработчики хранятся в глобальной переменной $MAIN_MODULE_EVENTS.

См. также

Примеры использования

<?
// скрипт в файле /bitrix/php_interface/init.php
AddEventHandler("main", "OnBeforeUserLogin", Array("MyClass", "BeforeLogin"));
class MyClass { function BeforeLogin(&$arFields) { if(strtolower($arFields["LOGIN"])=="guest") { global $APPLICATION; $APPLICATION->throwException("Пользователь с именем входа Guest не может быть авторизован."); return false; } } } ?>


Пользовательские комментарии

Пользовательские комментарии не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.
0
Роберт Басыров
Задача: Посчитать количество залогиненных пользователей на сайте на данный момент времени и вывести на экран это число.

Решение: В файле \bitrix\php_interface\init.php:

Код
AddEventHandler("main", "OnBeforeProlog", "MyUserOnline");
function MyUserOnline()
{
   if($GLOBALS["USER"]->IsAuthorized())
      CUser::SetLastActivityDate($GLOBALS["USER"]->GetID());
} 


В том месте, где нужно получить пользователей в онлайне:
Код
//online status
$db = CUser::GetList($by, $order, array("LAST_ACTIVITY"=>120));
while($dba = $db->Fetch())
   echo $dba['ID']."<br>"; 
1
Роберт Басыров
Задача: При авторизации сделать проверку наличия действующих сессий с данным логином, и при наличии сбросить их, что бы в один момент времени был авторизован только 1 клиент.

Решение:
1. В файл /bitrix/php_interface/init.php дописываем:

Код
AddEventHandler("main", "OnAfterUserLogin", "MyOnAfterUserLogin"); 
AddEventHandler("main", "OnBeforeProlog", "MyOnBeforeProlog"); 


function MyOnAfterUserLogin($arFields) 
{ 
   global $USER; 
   $USER->Update($USER->GetID(),array("UF_USERSESS"=>session_id())); 
} 

function MyOnBeforeProlog($arFields) 
{ 
   global $USER; 
   $arUser = $USER->GetByID($USER->GetID())->Fetch(); 
   if (session_id() != $arUser[UF_USERSESS]) 
      $USER->Logout(); 
} 


2. В Настройки -> Настройки продукта -> Пользовательские поля
создаем новый элемент следующего вида:

Тип данных: Строка
Объект: USER
Код поля: UF_USERSESS
Не показывать в списке: Y
Размер поля ввода для отображения: 32
© «Битрикс», 2001-2017, «1C-Битрикс», 2017