BX.addCustomEvent
Описание
Функция BX.addCustomEvent
Функция подразумевает два варианта входных параметров.
void BX.addCustomEvent( Object eventObject, string eventName, Function eventHandler );
void BX.addCustomEvent( string eventName, Function eventHandler );
Функция назначает обработчик eventHandler кастомному событию с именем eventName, возникающем в объекте eventObject. Если eventObject не указан (короткий вызов), то обработчик будет вызываться при каждом вызове события с таким именем в любом объекте.
Получение списка всех событий в системе
При работе с кастомными событиями возникает резонный вопрос - как получить полный список событий, который присутствует в системе (актуально для готовых шаблонов, административной части, и Битрикс24-коробки) ?
Данную задачу можно решить следующим образом - в файле /bitrix/js/main/core/core.js
находим:
BX.onCustomEvent(eventObject, eventName, arEventParams, secureParams);
Вставим в его исполнение логирование:
console.log(eventName, arEventParams);
После этого при совершении различных действий на клиенте (клики, push-информации, открытии popup) в лог будут писаться коды событий. Вам останется подобрать нужное.
Примеры использования
Как добавить свои шрифты в визуальный редактор
На событии GetFontFamilyList добавить нужные шрифты в массив. Тогда они начнут выводиться в списке шрифтов в редакторе.
BX.addCustomEvent('GetFontFamilyList', BX.delegate(function (fontlist) { fontlist.push({value: 'RobotoThin', name: 'RobotoThin'}); fontlist.push({value: 'RobotoLight', name: 'RobotoLight'}); fontlist.push({value: 'RobotoRegular', name: 'RobotoRegular'}); fontlist.push({value: 'RobotoBlack', name: 'RobotoBlack'}); for(var key in userFonts) { fontList.push({value: userFonts[key], name: userFonts[key]}) } }));
Как зафиксировать обновление счетчика
Для этого нужно добавить обработчик события:
BX.addCustomEvent("onPullEvent-main", BX.delegate(function(command,params){ if (command == 'user_counter' && params[BX.message('SITE_ID')] && params[BX.message('SITE_ID')]['__НАЗВАНИЕ_ВАШЕГО_СЧЕТЧИКА__']) { // вызвать код для обновления счетчика // в params[BX.message('SITE_ID')]['__НАЗВАНИЕ_ВАШЕГО_СЧЕТЧИКА__'] будет новое значение счетчика } }, this));
Для мобильной версии:
BX.addCustomEvent("onPull-main", BX.delegate(function(data){ if (data.command == 'user_counter' && data.params[BX.message('SITE_ID')] && data.params[BX.message('SITE_ID')]['__НАЗВАНИЕ_ВАШЕГО_СЧЕТЧИКА__']) { // вызвать код для обновления счетчика // в data.params[BX.message('SITE_ID')]['__НАЗВАНИЕ_ВАШЕГО_СЧЕТЧИКА__'] будет новое значение счетчика } }, this));
Работа с модулем Push and Pull
Ловушка для страниц десктопной версии (все события кроме событий online):
BX.addCustomEvent("onPullEvent-moduleName", BX.delegate(function(command,params){ console.log('Events of moduleName', command, params); }, this));
Ловушка для страниц мобильной версии (все события кроме событий online):
BX.addCustomEvent("onPull-moduleName", BX.delegate(function(data){ console.log('Events of moduleName', data.command, data.params); }, this));
Пример кода для работы с PHP классами модуля (Pull, Pull Shared, Pull Watch):
BX.addCustomEvent("onPullEvent-main", function(module_id,command,params) { if (command == 'check') { console.log('Command from module MAIN - its work!'); } });
В примере иы подписываемся на событие получение команд (onPullEvent-moduleName), moduleName это название вашего модуля, например main, в функции получаем command, params которые мы указали при отправке команды из PHP, обрабатываем свои команды с учетом вашей логики.
Если ваша логика требует сбора всех событий, то формат немного отличается: (доступно на любой версии pull)
Ловушка для страниц десктопной версии (все события кроме событий online):
BX.addCustomEvent("onPullEvent", BX.delegate(function(module_id,command,params){ console.log(module_id, command, params); }, this));
Ловушка для страниц мобильной версии (все события кроме событий online):
BX.addCustomEvent("onPull", BX.delegate(function(data){ console.log(data.module_id, data.command, data.params); }, this));
Пример кода для работы с PHP классами модуля (Pull, Pull Shared, Pull Watch):
BX.addCustomEvent("onPullEvent", function(module_id,command,params) { if (module_id == "test" && command == 'check') { console.log('Work!'); } });
В примере мы подписываемся на событие получение команд (onPullEvent), в функции получаем module_id, command, params которые мы указали при отправке команды из PHP, обрабатываем свои команды с учетом вашей логики.
- Для получения данных об онлайне используйте событие [link=888232]onPullOnlineEvent[/link]
- Лучше использовать обработчики событий для конкретных модулей, вместо обработчика на все события. Такой формат будет более производителен.