Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

OnAfterIBlockElementAddHandler - не срабатывает событие при добавлении элемента

00 голосов
4
Пользователям дана возможность публикации материалов. Для предотвращения бардака на сайте предусмотрена премодерация всех публикаций. Добавление элемента осуществляется с отключением его активности. Модератор должен просмотреть публикацию, исправить ее при необходимости, и включить активность, чтобы публикация появилась на сайте.

Думаю, это всем знакомая ситуация. Для удобства работы заказчик попросил, чтобы ему приходили на почту уведомления о новых публикациях, что и было реализовано.

Проблема в следующем: если материал публикуется без премодерации (с включенной активностью), то оповещение успешно производится, если с модерацией (с выключенной активностью) - нет.

За отправку сообщения отвечает следующий код (init.php):

AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("MyClass", "OnAfterIBlockElementAddHandler"));

Код
class MyClass
{
function OnAfterIBlockElementAddHandler(&$arFields)
    {
        if ($arFields["IBLOCK_ID"] == 6)
        {
                $arIBlockElement = GetIBlockElement($arFields["ID"]); 
         
      $arSend = array('USER_NAME' => $arIBlockElement['PROPERTIES']['CODE_USER']['VALUE'],'ID' => $arFields["ID"]);
         
      CEvent::Send('COMMENT_ADDED',SITE_ID,$arSend);
   }
    }
} 


Подскажите, пожалуйста, если кто уже сталкивался с подобной проблемой, как грамотно найти выход из сложившейся ситуации. Не хотелось бы отказаться или от премодерации, или от оповещений.
спросил 04 Сен, 13 от Agena (180 баллов)

4 Ответы

00 голосов
На сколько помню, GetIBlockElement возвращает только активные элементы. Воспользуйтесь CIBlockElement::GetList для получения элемента.
ответил 04 Сен, 13 от sickmind (4,660 баллов)
00 голосов
или CIBlockElement::GetByID() - он любой элемент возвращает по ID.

А GetIBlockElement действительно фильтрует элемент по полям "ACTIVE" и "ACTIVE_DATE".
ответил 27 Ноя, 13 от Poleolog (1,240 баллов)
00 голосов
Цитата
Сергей Васюков пишет:
..
За отправку сообщения отвечает следующий код (init.php):

AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("MyClass", "OnAfterIBlockElementAddHandler"));

Код
class MyClass
{
function OnAfterIBlockElementAddHandler(&amp;amp;$arFields)
    {
...
    CEvent::Send('COMMENT_ADDED',SITE_ID,$arSend);
..
    }
} 


Подскажите, пожалуйста, если кто уже сталкивался с подобной проблемой, как грамотно найти выход из сложившейся ситуации. Не хотелось бы отказаться или от премодерации, или от оповещений.


У меня ощущение что параметров в функции CEvent::Send должно быть явно больше.
Может в вашем случаи собака зарыта именно тут?
ответил 09 Март, 14 от Grimmi (2,560 баллов)
00 голосов
чет сообщение 2 раза отправилось
ответил 29 Июнь, 14 от Grimmi (2,560 баллов)

Похожие вопросы

0 голосов
0 ответов
спросил 19 Июнь, 13 от Titan91 (1,120 баллов)
0 голосов
7 ответов
0 голосов
2 ответов
0 голосов
1 ответ