Учусь по видеокурсам. Задания к 3-ему уроку "События". Задание №2.
"Реализовать проверку – при удалении товара из каталога, проверять: если количество
просмотров товара (поле SHOW_COUNTER) больше 1, то отменять удаление, деактивировать
товар и выводить в административный раздел соответствующее уведомление с указанием
количества просмотров."
Моя проблема в том, что чтобы не дать удалить элемент мы кидаем исключение (так сказано в API, эт не я придумал). Но если мы кидаем исключение, то редактировать элемент невозможно в тот же момент. Т.е. нельзя никак его деактивировать.
Так как же и отменить удаление элемента и деактивировать его из одного события? Вот, что я делал:
Удаление я отменить могу по необходимому условию, а вот деактивировать элемент никак не получается.
"Реализовать проверку – при удалении товара из каталога, проверять: если количество
просмотров товара (поле SHOW_COUNTER) больше 1, то отменять удаление, деактивировать
товар и выводить в административный раздел соответствующее уведомление с указанием
количества просмотров."
Моя проблема в том, что чтобы не дать удалить элемент мы кидаем исключение (так сказано в API, эт не я придумал). Но если мы кидаем исключение, то редактировать элемент невозможно в тот же момент. Т.е. нельзя никак его деактивировать.
Так как же и отменить удаление элемента и деактивировать его из одного события? Вот, что я делал:
Код |
---|
AddEventHandler("iblock", "OnBeforeIBlockElementDelete", Array("CIBlockBeforeDelete", "OnBeforeIBlockElementDeleteHandler")); class CIBlockBeforeDelete { function OnBeforeIBlockElementDeleteHandler($ID) { $get_el = CIBlockElement::GetByID($ID); if($el_res = $get_el->GetNext()){ $flag = false; if($el_res['IBLOCK_ID'] == CATALOG_IBLOCK_ID && $el_res["SHOW_COUNTER"] > 1) { global $APPLICATION; $APPLICATION->throwException("Элемент не будет удалён, а только деактивирован. Просмотрен: ".$el_res["SHOW_COUNTER"]." раз"); $el = new CIBlockElement; $arLoadProductArray = Array("ACTIVE" => "N"); $res = $el->Update($ID, $arLoadProductArray); return false; } } } } |
Удаление я отменить могу по необходимому условию, а вот деактивировать элемент никак не получается.