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

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

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

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

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

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

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


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

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

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

Задача: передать в тело письма не только строковые поля такие как Имя, Фамилия и Номер телефона, но и как минимум путь до загруженного файла с формы. Причём файл грузится в пользовательское свойство типа файл (не множественное).
Код
use Bitrix\Main\Loader;
Loader::includeModule("iblock");

AddEventHandler('iblock', 'OnAfterIBlockElementAdd', 'IBFeedForm');
function IBFeedForm(&$arFields) {
    $SITE_ID = 's1';
    $IBLOCK_ID = 22;
    $EVEN_TYPE = 'MODAL';
    $DOMAIN = ((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
    if ($arFields['IBLOCK_ID'] == $IBLOCK_ID) {

        $fileUrl = CIBlockElement::GetList(
            false,
            [
                'IBLOCK_ID' => $IBLOCK_ID,
                'ACTIVE' => 'Y',
                'ID' => $arFields['ID']
            ],
            false,
            false,
            [
                'PROPERTY_FORM_FILE'
            ]
        )->Fetch()['PROPERTY_FORM_FILE_VALUE'];

        $filePath = CFile::GetPath($fileUrl);

        $file = $DOMAIN . $filePath;

        $arFeedForm = array(
            "PHONE" => $arFields['NAME'],
            "NAME" => $arFields['PROPERTY_VALUES']['110'],
            "MAIL" => $arFields['PROPERTY_VALUES']['112'],
            "COMMENT" => $arFields['PROPERTY_VALUES']['113'],
            "FILE" => $file
        );

        CEvent::Send($EVEN_TYPE, $SITE_ID, $arFeedForm);
    }
}

Основной смысл в том, что Миша предлагает в своём решении обработчик который отлавливает событие ДО создания элемента в инфоблоке "OnBeforeIBlockElementAdd". Таким методом я не мог получить полный путь до файла в созданном элементе, поэтому использовал обработчик который отлавливает событие ПОСЛЕ создания элемента в инфоблоке "OnAfterIBlockElementAdd". Тогда в массиве $arFields я получаю ID элемента, по нему через CIBlockElement::GetList получил значение этого свойства, форматировал значение через CFile::GetPath и получил полный путь до файла.
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 
Поблагодарить и поддержать:
Или подписаться на boosty канал: Видео на Ютубе