SlideShare a Scribd company logo
1С-Битрикс: События
Общие понятия и применение
Что такое события?
Иногда бывает необходимо повлиять на ход
выполнения какой-нибудь API функции. Но если ее
изменить, то эти изменения будут утеряны при
очередном обновлении. Для таких случаев и
разработана система событий. В ходе выполнения
некоторых API функций, в определённых точках
установлены вызовы определённых функций, так
называемых обработчиков события.
Как работает?
foreach (GetModuleEvents("iblock", "OnIBlockElementAdd", true) as $arEvent) {
ExecuteModuleEventEx($arEvent, array($arFields));
}
foreach(GetModuleEvents("search", "BeforeIndex", true) as $arEvent){
$arEventResult = ExecuteModuleEventEx($arEvent, array($arFields));
if (is_array($arEventResult))
$arFields = $arEventResult;
}
Как найти событие в документации?
http://dev.1c-bitrix.ru/api_help/:module:/events/
где :module: - название модуля, может быть:
"sale", "iblock", "search", "catalog", "main"...
Например: http://dev.1c-bitrix.ru/api_help/iblock/events/
Применение
Добавляем код в init.php
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("MyClass", "OnBeforeIBlockElementAddHandler"));
class MyClass {
function OnBeforeIBlockElementAddHandler(&$arFields) {
...
}
}
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "OnBeforeIBlockElementAddHandler");
function OnBeforeIBlockElementAddHandler(&$arFields) {
...
}
Дебажим
...
function OnBeforeIBlockElementAddHandler(&$arFields) {
file_put_contents($_SERVER["DOCUMENT_ROOT"].'/element_add.txt',
print_r(array($arFields),true),FILE_APPEND);
}
Дебаг событий проводится выводом массива
в файл, например, следующим образом:
Пример 1 (рабочий)
...
function OnBeforeIBlockElementAddHandler(&$arFields)
{
$code = Cutil::translit($arFields['NAME'], "ru", array());
$arFields['CODE'] = preg_replace('/d/', '', $code);
}
Событие на отслеживание Добавление/изменение элемента. В данном примере отслеживаем поле
"NAME" элемента, делаем его транслитерацию, убираем цифры и добавляем в "CODE"
Пример 2 (рабочий + полезный)
AddEventHandler("main", "OnEpilog", "Generate404");
function Generate404() {
if (defined('ERROR_404') && ERROR_404=='Y' || CHTTP::GetLastStatus() == "404 Not Found"){
GLOBAL $APPLICATION;
$APPLICATION->RestartBuffer();
require ($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
require $_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/header.php';
require $_SERVER['DOCUMENT_ROOT'].'/404.php';
require $_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/footer.php';
}
}
Событие срабатывает после того, как битрикс соберет html и компоненты. В данном случае, мы
отслеживаем был ли ранее задан статус 404 и если он задан изменяем контентную область на
информацию из файла 404.php. Этот код используется на боевом сайте.

More Related Content

Similar to SUP 006. 1C-Битрикс. события

Aspect Oriented Approach
Aspect Oriented ApproachAspect Oriented Approach
Aspect Oriented Approach
Dmytro Chyzhykov
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в MagentoMagecom Ukraine
 
Yii development
Yii developmentYii development
Yii developmentMageCloud
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
Igor Khrol
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
 
Luxoft async.net
Luxoft async.netLuxoft async.net
Luxoft async.net
Sergey Teplyakov
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
GeeksLab Odessa
 
AndroidMVPHelper
AndroidMVPHelperAndroidMVPHelper
AndroidMVPHelper
DataArt
 
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
Pavlo Iuriichuk
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS development
Ivan Trifonov
 
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиямSECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
Конференция разработчиков программного обеспечения SECON'2014
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
Alexander Makarov
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureVadim Novitskiy
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
Vasya Petrov
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2
Alex Tumanoff
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
Yandex
 
Кэширование данных с помощью Service Worker
Кэширование данных с помощью Service WorkerКэширование данных с помощью Service Worker
Кэширование данных с помощью Service Worker
Andrew Smirnov
 

Similar to SUP 006. 1C-Битрикс. события (20)

Aspect Oriented Approach
Aspect Oriented ApproachAspect Oriented Approach
Aspect Oriented Approach
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в Magento
 
Yii development
Yii developmentYii development
Yii development
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
course js day 4
course js day 4course js day 4
course js day 4
 
Async
AsyncAsync
Async
 
Luxoft async.net
Luxoft async.netLuxoft async.net
Luxoft async.net
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
 
AndroidMVPHelper
AndroidMVPHelperAndroidMVPHelper
AndroidMVPHelper
 
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS development
 
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиямSECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows Azure
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
Кэширование данных с помощью Service Worker
Кэширование данных с помощью Service WorkerКэширование данных с помощью Service Worker
Кэширование данных с помощью Service Worker
 

SUP 006. 1C-Битрикс. события

  • 2. Что такое события? Иногда бывает необходимо повлиять на ход выполнения какой-нибудь API функции. Но если ее изменить, то эти изменения будут утеряны при очередном обновлении. Для таких случаев и разработана система событий. В ходе выполнения некоторых API функций, в определённых точках установлены вызовы определённых функций, так называемых обработчиков события.
  • 3. Как работает? foreach (GetModuleEvents("iblock", "OnIBlockElementAdd", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($arFields)); } foreach(GetModuleEvents("search", "BeforeIndex", true) as $arEvent){ $arEventResult = ExecuteModuleEventEx($arEvent, array($arFields)); if (is_array($arEventResult)) $arFields = $arEventResult; }
  • 4. Как найти событие в документации? http://dev.1c-bitrix.ru/api_help/:module:/events/ где :module: - название модуля, может быть: "sale", "iblock", "search", "catalog", "main"... Например: http://dev.1c-bitrix.ru/api_help/iblock/events/
  • 5. Применение Добавляем код в init.php AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("MyClass", "OnBeforeIBlockElementAddHandler")); class MyClass { function OnBeforeIBlockElementAddHandler(&$arFields) { ... } } AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "OnBeforeIBlockElementAddHandler"); function OnBeforeIBlockElementAddHandler(&$arFields) { ... }
  • 6. Дебажим ... function OnBeforeIBlockElementAddHandler(&$arFields) { file_put_contents($_SERVER["DOCUMENT_ROOT"].'/element_add.txt', print_r(array($arFields),true),FILE_APPEND); } Дебаг событий проводится выводом массива в файл, например, следующим образом:
  • 7. Пример 1 (рабочий) ... function OnBeforeIBlockElementAddHandler(&$arFields) { $code = Cutil::translit($arFields['NAME'], "ru", array()); $arFields['CODE'] = preg_replace('/d/', '', $code); } Событие на отслеживание Добавление/изменение элемента. В данном примере отслеживаем поле "NAME" элемента, делаем его транслитерацию, убираем цифры и добавляем в "CODE"
  • 8. Пример 2 (рабочий + полезный) AddEventHandler("main", "OnEpilog", "Generate404"); function Generate404() { if (defined('ERROR_404') && ERROR_404=='Y' || CHTTP::GetLastStatus() == "404 Not Found"){ GLOBAL $APPLICATION; $APPLICATION->RestartBuffer(); require ($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); require $_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/header.php'; require $_SERVER['DOCUMENT_ROOT'].'/404.php'; require $_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/footer.php'; } } Событие срабатывает после того, как битрикс соберет html и компоненты. В данном случае, мы отслеживаем был ли ранее задан статус 404 и если он задан изменяем контентную область на информацию из файла 404.php. Этот код используется на боевом сайте.