Телеграм: @camouf_ru Почта: mihail@bazarow.ru

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

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

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

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

Nikita Androsov14.08.2017
вопросик, как нам вытащить ссылку на созданный элемент инфоблока ?
допустим для отправки этой ссылки администратору сайта, который будет решать дальнейшую судьбу предложенной новости.  
Михаил Базаров14.08.2017
Цитата
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
Что бы сразу попадал в админку, на редактирование этой новости
Андрей Колчанов23.04.2018
Еще раз здравствуйте!
Сейчас пытаюсь "соединить"
https://camouf.ru/blog-note/2449/?sphrase_id=28078
и эту заметку.

С помощью формы создаутся данные в инфоблоке, письмо уходить но приходить так (кусок кода):
...
Размер кухни: "ADD_SIZE"
Стиль: "ADD_STYLE"
...

В обработчике формы код такой:

Код
$PROP = array();

$PROP['ATT_TYPEKITCHEN_CALC'] = $_POST['kitchen_form']; //Вид кухни

// Размеры: Длина/Ширина/Остров
$data = $_POST['size1_form11'] . 'x' . $_POST['size1_form12'] . 'x' . $_POST['size2_form12'] . 'x' . $_POST['size1_form13'] . 'x' . $_POST['size3_form13'] . 'x' . $_POST['size2_form13'] . 'x' . $_POST['size1_form14'] . 'x' . $_POST['size3_form14'] . 'x' . $_POST['size2_form14'];
$data = trim($data, 'x');
$PROP['ATT_SIZE_CALC'] = $data;

$PROP['ATT_STYLE_CALC'] = $_POST['kitchen_style']; // Стиль
$PROP['ATT_COLOR_CALC'] = $_POST['kitchen_color']; // Цвет
$PROP['ATT_FASAD_CALC'] = $_POST['kitchen_fasady']; // Фасад
$PROP['ATT_STOL_CALC'] = $_POST['kitchen_stol']; // Столешница
$PROP['ATT_MOYKA_CALC'] = $_POST['kitchen_moyka']; // Тип мойки
$PROP['ATT_FARTUK_CALC'] = $_POST['kitchen_fartuk']; // Фартук
$PROP['ATT_FURN_CALC'] = $_POST['kitchen_furn']; // Фурнитура

$PROP['ATT_NAME_CALC'] = $_POST['name']; // ФИО
$PROP['ATT_PHONE_CALC'] = $_POST['phone']; // Телефон
$PROP['ATT_EMAIL_CALC'] = $_POST['email']; // Почта
$PROP['ATT_REGION_CALC'] = $_POST['region']; // Город и область
$PROP['ATT_CALLTIME_CALC'] = $_POST['calltime']; // Время звонка
$PROP['ATT_COMENTS_CALC'] = $_POST['comment']; // Любые комментарии...
$PROP['ATT_FILE_POL_CALC'] = $_FILES['file_pol']; //Свойство файл


//Основные поля элемента
$fields = array(
 "DATE_CREATE" => date("d.m.Y H:i:s"), //Передаем дата создания
 "CREATED_BY" => $GLOBALS['USER']->GetID(), //Передаем ID пользователя кто добавляет
 "IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела
 "IBLOCK_ID" => 14,
 "PROPERTY_VALUES" => $PROP, // Передаем массив значении для свойств
 "NAME" => strip_tags($_REQUEST['name']),
 "ACTIVE" => "Y", //поумолчанию делаем активным или ставим N для отключении поумолчанию
); 


в intuit.php


Код
AddEventHandler('iblock', 'OnBeforeIBlockElementAdd', 'IBFeedForm');
function IBFeedForm(&$arFields) {
 $SITE_ID = 's1';
 $IBLOCK_ID = 14;
 $EVEN_TYPE = 'NEW_ELEMET_ADDED';
 if ($arFields['IBLOCK_ID'] == $IBLOCK_ID) {
 $arFeedForm = array(
 "ADD_NAME" => $arFields['NAME'],
 "ADD_PHONE" => $_POST['phone'],
 "ADD_EMAIL" => $_POST['email'],
 "ADD_REGION" => $arFields['PROPERTY_VALUES']["152"],
 "ADD_CALLTIME" => $arFields['PROPERTY_VALUES']['151'],
 "ADD_COMENTS" => $arFields['PROPERTY_VALUES']['149'],
 "ADD_FILE_POL" => $arFields["PROPERTY_VALUES"]["150"],
 "ADD_TYPEKITCHEN" => $arFields['PROPERTY_VALUES']['137'],
 "ADD_SIZE" => $arFields['PROPERTY_VALUES']['138'],
 "ADD_STYLE" => $arFields['PROPERTY_VALUES']['139'],
 "ADD_COLOR" => $arFields['PROPERTY_VALUES']['140'],
 "ADD_FASAD" => $arFields['PROPERTY_VALUES']['141'],
 "ADD_STOL" => $arFields['PROPERTY_VALUES']['142'],
 "ADD_MOYKA" => $arFields['PROPERTY_VALUES']['143'],
 "ADD_FARTUK" => $arFields['PROPERTY_VALUES']['144'],
 "ADD_FURN" => $arFields['PROPERTY_VALUES']['145'],
 );
 CEvent::Send($EVEN_TYPE, $SITE_ID, $arFeedForm);
 }
} 
Андрей Колчанов23.04.2018
Если в шаблоне делаю так (и отправляю через форму):

Размер кухни: #ADD_SIZE#
Стиль: #ADD_STYLE#

То в письме приходит:

Размер кухни:
Стиль:

Если создаю через админку то приходит:
Размер кухни: 400х400x100  
Стиль: 15                      


У свойства Размер кухни тип поля Строка
У свойства Стиль - Список

Случайные заметки

Глобальные фильтры на всякие случаи жизни

Просмотров: 38742 Комментариев: 2
Глобальный фильтр, нужен чаще всего, для вывода определенных элементов, из общего массива, инфорблока. Спектр применяемости очень широкий. Использует...