Не работает ивент удаления товара

Срочно нужна помощь. Пытаюсь вызвать метод класса при удалении товара из каталога bitrix.

AddEventHandler("iblock", "OnAfterIBlockElementDelete", "\Seo\OnDeleteRedirect::insertRedirect301($ID)");

Но ивент не срабатывает. Поддержка старых событий включена. То ли ивент не тот, то ли вызываю криво(пытался сделать как в документации, через массив [класс, метод]. Ничего не вышло). Спасибо.


Ответы (1 шт):

Автор решения: ssv32

Вот док. https://dev.1c-bitrix.ru/api_help/iblock/events/onafteriblockelementdelete.php и там пример есть AddEventHandler("iblock", "OnAfterIBlockElementDelete", Array("MyClass", "OnAfterIBlockElementDeleteHandler")); вместо класса можете указать, сразу функцыю и код который выполнить.

У вас тут что то не так "\Seo\OnDeleteRedirect::insertRedirect301($ID)")- во первых из за двойных кавычек $ID это пытается подставить значения и с пространством имён может не работать \Seo\OnDeleteRedirect.

можно сделать так (из дока + ваше)

AddEventHandler("iblock", "OnAfterIBlockElementDelete", Array("MyClass", 
"OnAfterIBlockElementDeleteHandler"));
class MyClass  // можно без класса функцыю наверно сразу но как у вас написно
{
    function OnAfterIBlockElementDeleteHandler($arFields)
    {
        // в массиве $arFields будут данные скорее всего типа id и прочее, 
        //если вам нужен id удаляемого элемента то так будет (можите 
        //записать в файл и посмотреть что там есть точно)

        \Seo\OnDeleteRedirect::insertRedirect301($arFields['id'])
    }
}
  • тут в OnAfterIBlockElementDeleteHandler (insertRedirect301) не надо указывать параметры, ожидаются определённые, должно быть как в доке

или можно так

AddEventHandler("iblock", "OnAfterIBlockElementDelete", Array("OnDeleteRedirect", "insertRedirect301"));

тогда insertRedirect301 должен принимать параметр один типа

function insertRedirect301($arFields){ ...

а OnDeleteRedirect должен быть доступен там где вы задаёте событие (если без хитростей то это в init.php)

можете потестить если не сработает, вместо класса и метода в событие сделайте функцыию записывайте в файл что то, так поймёте отрабатывает или нет. Затем если не работает и дело в другом то попробуйте вызвать OnDeleteRedirect::insertRedirect301() можно тестовый метод в котором пишете файл, так поймёте что ваш метод отрабатывает (из того места где указано событие)

→ Ссылка