Иногда при разработке сайта требуется реализовать функционал добавления элементов инфоблока простыми пользователям.Будет достаточно удобно если, после создания новости, модератор будет получать письмо о создании нового элемента. Сделать это можно через событие OnBeforeIBlockElementAdd
Например: на сайте создана "форма добавления элементов" и пользователи сайта могут предлагать новости для размещения на сайте. Однако, новость публикуется не сразу, а после проверки модератором
Будет достаточно удобно если, после создания новости, модератор будет получать письмо о создании нового элемента. Сделать это можно через событие 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 );
}
}
Обязательно, поле того как скопируете код события, удалите все переносы строк (да и комментарии). Оставил в примере, что бы было понятнее и нагляднее