Задать вопрос
lamo4ok
@lamo4ok
Программист

Как и куда встроить прослушивание событий в 1С-Битрикс для их обработки и дальнейшей передачи в удаленные сервисы?

Есть сайт на 1С-Битрикс, в нем необходимо каждую новую сделку при ее создании отправлять в ту или иную CRM. Я планирую использовать для этого прослушивание так называемых событий, но не слишком понятно, где именно их прослушивать. Как это обычно реализовывается, пишется некий миниплагин, правится некий файл движка, правится некий файл текущей темы (шаблона) сайта?
  • Вопрос задан
  • 1230 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
gromdron
@gromdron
Работаю с Bitrix24
Вообще, исчерпывающую информацию на этот вопрос дает официальная документация по файлу init.php.

Обработчики событий лучше группировать в одном файле и тщательно аннотировать где они используются и какая задача перед ними стоит.


Про способы организации кода это довольно узкая тематика.
Если Вы 100% уверены, что они еще пригодятся на других проектах (и у Вас уже есть подобные заказы), то предпочтительнее делать модуль.
Если это хардкорная интеграция только для существующего проекта, то init.php(*).

Мы, например, придерживаемся последнего варианта:
1) В директории /local/php_interface/ создаем следующие файлы:

- init.php (Содержит подключение других файлов + автолоадер)
- constants.php (Содержит только константы, актуальные для данного проекта)
- events.php (содержит подписки на события, но логика их обработки не находится в этом файле)

2) В директории /local/php_interface/classes/ по PSR размещаем класс для проекта.

Например:

init.php:
/**
 * - /local/classes/{Path|raw}/{*|raw}.php
 * - /local/classes/{Path|ucfirst,lowercase}/{*|ucfirst,lowercase}.php
 */
spl_autoload_register(function($sClassName)
{

	$sClassFile = __DIR__.'/classes';

	if ( file_exists($sClassFile.'/'.str_replace('\\', '/', $sClassName).'.php') )
	{
		require_once($sClassFile.'/'.str_replace('\\', '/', $sClassName).'.php');
	}

	$arClass = explode('\\', strtolower($sClassName));
	foreach($arClass as $sPath )
	{
	    $sClassFile .= '/'.ucfirst($sPath);
	}
	$sClassFile .= '.php';
	if (file_exists($sClassFile))
	{
		require_once($sClassFile);
	}
});

/**
 * File with event handlers
 */
require_once(__DIR__.'/events.php');


events.php:
$eventManager = \Bitrix\Main\EventManager::getInstance();

/**
 * For new core of bitrix use
 *     $eventManager->addEventHandler( #module#, #handler#, [#namespace#, #function#]);
 * 
 * For old core of bitrix use
 *     $eventManager->addEventHandlerCompatible( #module#, #handler#, [#namespace#, #function#]);
 */

$eventManager->addEventHandlerCompatible("module", "event", ['\\Project\\Module\\Event\\Handler', 'onEvent']);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы