Почтовое событие на создание нового элемента инфоблока, через API

Иногда при разработке сайта требуется реализовать функционал добавления элементов инфоблока простыми пользователям. Например: на сайте создана "форма добавления элементов" и пользователи сайта могут предлагать новости для размещения на сайте. Однако, новость публикуется не сразу, а после проверки модератором

Будет достаточно удобно если, после создания новости, модератор будет получать письмо о создании нового элемента. Сделать это можно через событие OnBeforeIBlockElementAdd- вызывается до вставки элемента информационного блока, и может быть использовано для отмены вставки или переопределения некоторых полей.

Почтовое уведомление о добавлении новости

Итак: мы создали инфоблок "Народные новости", ID которого 82, и есть несколько свойств:
Ссылка на источник - с ID 143
Адрес новости - c ID 153
Автор новости - с ID 154

Также создаем новый тип почтового события "NEW_ELEMET_ADDED"

И само письмо которое будет отправляться администратору (или по любому, другому адресу). В котором передаем следующие данные:

Уважаемый администратор, на сайте появилась новая новость)
Проверьте и опубликуйте ее
Название: "ADD_NAME"
Текст анонса:
"ADD_ANOUNCE"
Текст подробно:
"ADD_DETAIL"
Источник: "ADD_SOURCE"
Ссылка на новость: "ADD_LINK"
Автор новости: "ADD_AUTOR"

Создание почтового события методом CEvent::Send

И самое главное, это создать обработчик который будет при добавлении элемента, создавать почтовое событие со всеми данными, для этого воспользуемся методом CEvent::Send

Создаем файл init.php в директории /local/php_interface -и добавляем внего следующий код. Подсказки по коду прямо в нем:

//Регистрируем обработчик именем функции будет IBFeedForm
AddEventHandler('iblock', 'OnBeforeIBlockElementAdd', 'IBFeedForm');
//Описываем функцию
function IBFeedForm(&$arFields)
{
 //Создаем переменные, внутри которых прописываем:
 $SITE_ID = 's1'; //Индетификатор сайта
 $IBLOCK_ID = 82; //Индетификатор инфоблока с новостями
 $EVEN_TYPE = 'NEW_ELEMET_ADDED'; // Тип почтового события (создавали выше)
  if ($arFields['IBLOCK_ID'] == $IBLOCK_ID) {
   //Собираем в массив все данные, которые хотим передать в письмо
   //Перечисляем все поля как в почтовом событии
   $arFeedForm = array(
    //Стандартные поля инфоблока
    "ADD_NAME" => $arFields['NAME'], //Название новости
    "ADD_ANOUNCE" => $arFields['PREVIEW_TEXT'], //Анонс
    "ADD_DETAIL" => $arFields['DETAIL_TEXT'], //Детальное описание
    //Свойства инфоблока - просто перечисляем ID всех нужных свойств
    "ADD_SOURCE" => $arFields['PROPERTY_VALUES']['143'],
    "ADD_LINK" => $arFields['PROPERTY_VALUES']['153'],
    "ADD_AUTOR" => $arFields['PROPERTY_VALUES']['154'],
   );
   //И собственно, собираем все это в метод
   //Который создаст наше почтовое событие
   CEvent::Send($EVEN_TYPE, $SITE_ID, $arFeedForm );
  }
}

Обязательно, поле того как скопируете код события, удалите все переносы строк (да и комментарии). Оставил в примере, что бы было понятнее и нагляднее

В общем-то и все. Все вопросы в комментарии.

Все заметки
Уважаемый читатель! В связи с участившимся спамом в комментариях, возможность писать доступна только для зарегистрированных пользователей

Зарегистрироваться Войти
Напомнить пароль

Быстрая регистрация через соц.сеть:
Nikita Androsov
вопросик, как нам вытащить ссылку на созданный элемент инфоблока ?
допустим для отправки этой ссылки администратору сайта, который будет решать дальнейшую судьбу предложенной новости.  
Михаил Базаров
Цитата
Nikita Androsov пишет:
вопросик, как нам вытащить ссылку на созданный элемент инфоблока ?
допустим для отправки этой ссылки администратору сайта, который будет решать дальнейшую судьбу предложенной новости.
Можно передать в шаблон письма
Код
"ADD_LINK" => $arFields['ID'], 
А в письмо
Код
https://АДРЕС_САЙТА/bitrix/admin/iblock_element_edit.php?IBLOCK_ID=82&type=news&ID=#ADD_LINK#&lang=ru&WF=Y
Что бы сразу попадал в админку, на редактирование этой новости

© 2011—2017 Частный вебмастер: ИП Базаров, ОГРНИП: 315784700173692. Работает на 1С-Битрикс.

Копирование материалов запрещено: "ГК РФ, часть 4, раздел VII: Права на результаты интеллектуальной деятельности".

Информация размещенная на сайте, не является публичной офертой.
Политика конфеденциальности