Не работает ивент удаления товара
Срочно нужна помощь. Пытаюсь вызвать метод класса при удалении товара из каталога bitrix.
AddEventHandler("iblock", "OnAfterIBlockElementDelete", "\Seo\OnDeleteRedirect::insertRedirect301($ID)");
Но ивент не срабатывает. Поддержка старых событий включена. То ли ивент не тот, то ли вызываю криво(пытался сделать как в документации, через массив [класс, метод]. Ничего не вышло). Спасибо.
Ответы (1 шт):
Вот док. 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() можно тестовый метод в котором пишете файл, так поймёте что ваш метод отрабатывает (из того места где указано событие)