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

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

Просмотров: 14340

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


У свойства Размер кухни тип поля Строка
У свойства Стиль - Список
Надежда 17.07.2022
Добрый день воспользовался вашим примером, но после каждой отправки данных из формы возникает надпись «int(14865)» но при этом после каждой отправки цифра увеличивается на 1

как думаете из-за чего эта нумерация вылезла?
Михаил Базаров 17.07.2022
Цитата
Надежда написал:
Добрый день воспользовался вашим примером, но после каждой отправки данных из формы возникает надпись «int(14865)» но при этом после каждой отправки цифра увеличивается на 1
как думаете из-за чего эта нумерация вылезла?

Первое, что приходит в голову, в качестве результат выводится количество элементов в этом инфоблоке. Надо смотреть в шаблоне, что отвечает за этот вывод.

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Моментальная фильтрация на AJAX в умном фильтре 1С-Битрикс Просмотров: 24666 При штатной установке, интернет-магазина на 1С Битрикс, умный фильтр по товарам, показывае... Перенос Битрикс сайта с хостинга на хостинг, инструкция Просмотров: 26023 Достаточно часто спрашивают как перенести сайт работающий на 1С Битрикс с одного хостинга ... Установка Битрикс24 "Интернет-Магазин + CRM" на один домен и настройк... Просмотров: 894 Задача: установить лицензию "Интернет-Магазин + CRM" на один домен. Что бы crm была доступ... Картинка торгового предложения вместо иконки цвета, в выборе SKU Просмотров: 270 Задача: вместо не информативных иконок цветов нужно вывести детальную картинку торгового п... Если предложение SKU в корзине, поменять кнопку добавления на "В корз... Просмотров: 3121 Данная заметка является дополнением к ранее опубликованной: Есл... Модифицировать состав заказа #ORDER_LIST# в почтовом событии "Новый з... Просмотров: 28482 Если вы хотите как-то по особенному сверстать состав заказа в почтовом уведомлении 1С-Битр... Автоматически отгрузить заказ и сменить статус отгрузки, при выполнен... Просмотров: 337 Проблема: Заказы, на сайте, обрабатываются только в 1С. При этом 1С не работает с отгрузка... Заполнение габаритов товара, после обмена с 1С, из свойств элемента и... Просмотров: 10422 Если Ваш интернет-магазин интегрирован с 1С, скорее всего столкнулись с такой проблемой: 1... Свойство: привязка к Яндекс:Картам - вывести из нескольких элементов ... Просмотров: 17735 Предположим, что у вас есть инфоблок со свойством "Привязка к яндекс картам". В этом инфоб... Звездочки в рейтинге Битрикс статей и новостей Просмотров: 18072 Стандартный вид рейтинга в новостях Битрикс, ну скажем так- не очень красив. Давайте его п... Если товар в корзине, поменять значение input на "В корзине" Просмотров: 10240 Если Вам нужно поменять текст на кнопке, добавляющей товар в корзину, достаточно воспользо... Прятать или показывать описание раздела каталога Просмотров: 598 В новых компонентах и шаблонах catalog.section есть не документированный и не выводимый па... Запретить изменения описаний товаров при выгрузке из 1С УТ на сайт Просмотров: 16864 При разработке сайтов на Битрикс, с интеграцией с 1С Управление Тороговлей, нужно запретит... Добавить свойство в административную форму заказа Просмотров: 2809 Задача, кастомизировать административную форму заказа: добавить свойство заказа в шапку фо... Заполнить свойство инфоблока ценой из торгового каталога Просмотров: 4584 Если вам по какой-то причине нужно скопировать цену товара в свойство этого же инфоблока. ... AJAX корзина с отправкой количества из раздела каталога Просмотров: 19124 Столкнулся с задачкой: нужно было на одном сайте реализовать интерактивный прайс лист. При... Адаптивное гамбургер меню для битрикс Просмотров: 14441 Заметка коротенькая, но решил оставить ее - так как самому часто нужно нечто подобное. В а... Как вывести свойства инфоблока по отдельности и немного плюшек не в т... Просмотров: 105492 Если у инфоблока несколько свойств- то при выводе их всех, скажем в детальном описании нов... Сниппеты типографики bootstrap, для Битрикс Просмотров: 7600 Если вы подключили bootstrap к своему сайту, или сверстали весь шаблон, подключив bootstra... Если папка то применяем...в Битрикс Просмотров: 29222 Бывает, стоит задача применить какой-либо стиль или вывести конкретный кусочек кода для ди...