ГлавнаяБлогОтключение обработчиков событий [1С-Битрикс]

Отключение обработчиков событий [1С-Битрикс]

Рамиль Юналиев
Рамиль Юналиев
E-Commerce Lead
10 марта 2014 г.
1 мин чтения

Иногда требуется временно отключить обработчик события — например, чтобы при программном добавлении элемента не срабатывала побочная логика. Удобный способ — использовать статический флаг в классе обработчика.

Создаём класс с флагом $b_HandlerRun и проверяем его внутри обработчика:

class HandlerTest
{
    static $b_HandlerRun = true;
 
    function OnAfterIBlockElementAddHandler(&$arFields)
    {
        AddMessage2Log(var_export( self::$b_HandlerRun , true), "my_module_id");
    }
}
 
/******* В init.php *****/
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("HandlerTest", "OnAfterIBlockElementAddHandler"));
 
/************************************************************/
HandlerTest::$b_HandlerRun = false;
 
$oElement = new CIBlockElement();
$oElement->Add(array("IBLOCK_ID" => 43, "NAME" => "Название элемента"));

Перед добавлением элемента устанавливаем флаг в false. Обработчик при этом срабатывает, но видит false в логе — то есть он знает, что должен пропустить выполнение своей основной логики (при условии, что внутри обработчика добавлена проверка флага перед выполнением действий).

Такой подход позволяет гибко управлять активностью обработчиков без их полного удаления через RemoveEventHandler.