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);
	}
	return $result;	
}

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

Константы:

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

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

Рубрики: PHP Bitrix

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

Bitrix запись своих настроек в settings.php

Статья о том как разместить свои настройки не создавая велосипеды и костыли, а используя возможности системы.

Bitrix получить путь до зарегистрированного файла

В статье приводится пример того как можно получить путь до зарегистрированного файла по его ID с помощью метода CFile::getPath($fileId). Так же показано где можно получить ID зарегистрированного файла.

PHP Удалить лишние нули после запятой

Когда в проекте диапазон чисел от 0,0001 до 1 000 000, удобно автоматически удалять лишнии нули после запятой.

CSS простой горизонтальный слайдер

В статье приводится пример кода для создания простого горизонтального слайдера с использованием CSS и небольшим количеством JS кода. Для реализации потребуется всего около 60 строк стилей и js кода.

Bitrix выполнить произвольный sql запрос

В статье приведен пример как выполнить произвольный sql запрос используя стандартные средства Bitrix

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

grep - удобная и быстрая команда, здесь приведены примеры как произвести рекурсивный поиск в каталоге, поиск среди запущенных процессов и другие.

Комментарии

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