@mamkaror
Программист

Как правильно подключить обработчик событий в своем модуле?

Добрый день, подскажите пожалуйста.

Я пишу свой модуль и сейчас на момента подключения своего обработчика событий.
Что мне нужно : Зарегистрировать обработчик событий на изменения статуса заказа в системе, и прописать функцию для него в отдельном файле.
Как я делаю сейчас : регистрирую вот так :
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->registerEventHandler('sale', 'OnSaleStatusOrder', $this->MODULE_ID, 'YoloEvents', 'My_OnSaleStatusOrder');


Далее в файле include.php в корне папки модуля я создаю класс и метод :
class YoloEvents
{
	public static function My_OnSaleStatusOrder($order_id, $status_val){
		if($status_val == 'F'){
			$order = Sale\Order::load($order_id);
			$order->setField("STATUS_ID", "qq");
			$order->save();
		}
	}
}

Только я не знаю почему в этом файле)

Пожалуйста обьясните, а то на форумах я ничего не понял из этого. Я понимаю как подвязываться к обработчикам через init.php, я знаю как подключаться через безымянную функцию и тд, но вот как подключить функцию которая в отдельном файле - я не знаю.

Не кидайтесь камнями, просто помогите, пожалуйста.
Спасибо.
  • Вопрос задан
  • 2865 просмотров
Решения вопроса 1
udjin123
@udjin123
PHP, Golang, React
В install/index.php модуля надо зарегистрировать зависимость с помощью вот этой функции
https://dev.1c-bitrix.ru/api_help/main/functions/m...

А файл класть в lib/ чтобы работала автозагрузка классов битрикса

Пример:

В install/index.php
function InstallEvents()
{
        RegisterModuleDependences('search', 'BeforeIndex', 'mymodule.smartsearch', '\\MyModule\\SmartSearch\\EventHandler', 'BeforeIndex');
}

function UnInstallEvents()
{
        UnRegisterModuleDependences('search', 'BeforeIndex', 'mymodule.smartsearch', '\\MyModule\\SmartSearch\\EventHandler', 'BeforeIndex');
}


В libs/ файл eventhandler.php с содержимым
namespace MyModule\SmartSearch;

class EventHandler
{
    function BeforeIndex($arFields)
    {
        \CModule::IncludeModule("iblock");

        if ($arFields["MODULE_ID"] == "iblock") {
            $result = \CIBlockElement::GetByID($arFields["ITEM_ID"]);
            if ($element = $result->Fetch()) {

                $arFields['PARAM1'] = $element['IBLOCK_SECTION_ID'];
            }
        }

        return $arFields;
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы