Bitrix регистрация своего события

Система событий в Битрикс широко развита, что позволяет добавлять свою бизнес логику в проект, не затрагивая ядра продукта. В этой статье мы разберем как добавить своё событие в систему, а так же создадим обработчик для него.

$event = new \Bitrix\Main\Event("mymodule", "OnCustomBeforeSave", array($value));
$event->send();
if ($event->getResults()) {
	foreach ($event->getResults() as $evenResult) {
		if ($evenResult->getResultType() == \Bitrix\Main\EventResult::SUCCESS) {
			//Необязательно. Код для случая когда обработчик вернул успешных результат
		}
		else {
			//Необязательно. Код для случая когда обработчик вернул неуспешный результат
		}
	}
}

mymodule - код модуля в котором происходит событие.
OnCustomBeforeSave - код события.
array($value) - массив параметров передоваемых в обработчик события.

Пример: обработчик внутри компонента

На одной из страниц сайта подключается компонент test:event:

<?php $APPLICATION->IncludeComponent("test:event", "", array()); ?>

Код компонента test:event:

<?php

class EventExample extends \CBitrixComponent {
	
	public function executeComponent() {
		if(!empty($_REQUEST["DATA"])) {
			if($this->beforeSaveData()) {
				/** code save data */
				
				$this->afterSaveData();
			}
		}
		$this->IncludeComponentTemplate();
	}
	
	protected function beforeSaveData() {
		$event = new \Bitrix\Main\Event("mymodule", "OnEventExampleBeforeSave", array('arData' => $_REQUEST["DATA"]));
		$event->send();
		if ($event->getResults()) {
			foreach ($event->getResults() as $evenResult) {
				if ($evenResult->getResultType() == \Bitrix\Main\EventResult::SUCCESS) {
					return true;
				}
				else {
					$arParameters = $evenResult->getParameters();
					var_dump($arParameters['errorText']);
					return false;
				}
			}
		}
	}
	
	protected function afterSaveData() {
		$event = new \Bitrix\Main\Event("mymodule", "OnEventExampleAfterSave", array($value));
		$event->send();
		if ($event->getResults()) {
			foreach ($event->getResults() as $evenResult) {
				if ($evenResult->getResultType() == \Bitrix\Main\EventResult::SUCCESS) {
					//Необязательно. Код для случая когда обработчик вернул успешных результат
				}
				else {
					//Необязательно. Код для случая когда обработчик вернул неуспешный результат
				}
			}
		}
	}
} 

При получении запроса с массивом DATA компонент производит сохранение полученных данных. Непосредственно перед сохранением и после сохранения данных вызываются методы beforeSave() и afterSave(). В обоих этих методах регистрируется событие, на которые можно добавить свои обработчики. Обработчики могут быть разными, например после сохранения полученных данных нужно так же обновить еще какие-то данные, которые с ними связаны или отправить письмо об успешном сохранении и т.д.

Важно, что если метод beforeSave() вернет false, то сохранение данных не произайдет, то есть с помощью своего обработчика события OnEventExampleBeforeSave можно влиять на то будут сохранены данные или нет.

Обработчик:

<?php 
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler("mymodule", "OnEventExampleBeforeSave", "CustomOnEventExampleBeforeSave");

function CustomOnEventExampleBeforeSave($event) {
	$arData = $event->getParameter('arData');
	if(empty($arData["name"])) {
		$result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR, array("errorText" => "Empty name field"));
	}
	else {
		$result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, ["VALUE" => 'Y']);
	}
	return $result;	
}

Внутри обработчика происходит проверка был ли передан в массиве DATA параметр name, если параметр name не был передан, то обработчик вернет ошибку.

Константы:

\Bitrix\Main\EventResult::ERROR - обработчик вернул ошибку

\Bitrix\Main\EventResult::SUCCESS - обработчик отработал успешно

Рубрики: PHP Bitrix

Если есть вопросы, что-то в статье не понятно или нашли ошибку, напишите об этом в комментариях, все комментарии читаются и по возможности материал будет доработан.
Популярные статьи

Как добавить свою вкладку в карточку элемента СРМ?

Вкладки в карточках элементов CRM очень удобное решение. В этой статье разберем как добавить свою вкладку в карточку элемента CRM с помощью создания обработчика на событие.

Подключить bitrix без подключения шаблона сайта

В статье приводится пример кода подключения bitrix без подключения шаблона сайта. Так же описано когда это может пригодится.

Bitrix сбросить буфер вывода

Функция RestartBuffer() в Bitrix используется для сброса буфера вывода. Она позволяет прервать вывод страницы на определенном этапе выполнения скрипта и начать вывод заново. В статье рассмотрим основные сценарии использования данной функции, рассмотрим пример кода.

Bitrix подключить модуль

Так как bitrix состоит из большого количества различных модулей, знать как их правильно подключать просто необходимо.

Bitrix регистрация своего события

В статье приводится пример регистрации собственного события в bitrix и добавления на него обработчика.

Как в bitrix получить параметры запроса

Из этой статьи вы узнаете, какие классы и методы в bitrix помогут получить данные запроса без использования глобальных переменных. Это важный навык, который обязательно пригодится в вашей работе.

Комментарии

Гость [15.09.2022]
Спасибо, получилось разобраться
Данный сайт использует файлы cookies. Продолжая просмотр сайта, вы соглашаетесь с использованием файлов cookies.
ОК