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

EventManager

EventManager - класс кратко- и долгосрочной регистрации обработчиков событий. Класс реализует паттерн Singleton (Одиночка), обращаться к нему нужно через getInstance().

В обработчики, зарегистрированные с помощью \Bitrix\Main\EventManager::AddEventHandler, в качестве аргумента будет передан объект события (Bitrix\Main\Event). Если хотите, чтобы передавались старые аргументы, нужно использовать \Bitrix\Main\EventManager::addEventHandlerCompatible. Аналогично с \Bitrix\Main\EventManager::registerEventHandler и \Bitrix\Main\EventManager::registerEventHandlerCompatible.

Аналогами класса в старом ядре являются функции:
RegisterModuleDependences,
UnRegisterModuleDependences,
AddEventHandler,
RemoveEventHandler,
GetModuleEvents.

Примеры

//версия 1 
$eventManager = \Bitrix\Main\EventManager::getInstance(); 
$eventManager->registerEventHandlerCompatible("module","event","module2","class","function");
//версия 2 для событий в DataManager например
$eventManager = \Bitrix\Main\EventManager::getInstance(); 
$eventManager->registerEventHandler("module","event","module2","class","function");

Свои обработчики в своих модулях

$arMacros["PRODUCTS"]  = "";  
$basketId = "10";
$event = new \Bitrix\Main\Event("mymodule", "OnMacrosProductCreate",array($basketId));
	$event->send();
	if ($event->getResults()){
		foreach($event->getResults() as $evenResult){
			if($evenResult->getResultType() == \Bitrix\Main\EventResult::SUCCESS){
			$arMacros["PRODUCTS"] = $evenResult->getParameters();
			}
		}
}
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler("mymodule", "OnMacrosProductCreate", "OnMacrosProductCreate");

function OnMacrosProductCreate(\Bitrix\Main\Event $event){
	$arParam = $event->getParameters();
	$basketId = $arParam[0];
	$result = new \Bitrix\Main\EventResult(1,$basketId);
	return $result;
}
use Bitrix\Main\EventManager;

$handler = EventManager::getInstance()->addEventHandler(
	"main",
	"OnUserLoginExternal",
	array(
		"Intervolga\\Test\\EventHandlers\\Main",
		"onUserLoginExternal"
	)
);
EventManager::getInstance()->removeEventHandler(
	"main",
	"OnUserLoginExternal",
	$handler
);
EventManager::getInstance()->registerEventHandler(
	"main",
	"OnProlog",
	$this->MODULE_ID,
	"Intervolga\\Test\\EventHandlers",
	"onProlog"
);
EventManager::getInstance()->unRegisterEventHandler(
	"main",
	"OnProlog",
	$this->MODULE_ID,
	"Intervolga\\Test\\EventHandlers",
	"onProlog"
);
$handlers = EventManager::getInstance()->findEventHandlers("main", "OnProlog"); 


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

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

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

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
1
Екатерина Федоткина
Сообщение не промодерировано, возможны ошибки и неточности.
Для подписки в свое модуле на события обновления, добавления и т.д самих highloadblock (не их элементы, а сами сущности) нужно использовать instance \Bitrix\Main\Orm\EventManager

[COLOR=#a9b7c6][FONT=JetBrains Mono, monospace]
Код
$eventManager = \Bitrix\Main\Orm\EventManager::getInstance();
$eventManager->registerEventHandler(
    \Bitrix\Highloadblock\HighloadBlockTable::class,
    \Bitrix\Main\Entity\DataManager::EVENT_ON_AFTER_UPDATE,
    "yourmodule",
    'yourmoduleclass',
    'yourmoduleclassmethod'
);
[/FONT][/COLOR]
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх