Меню

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

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

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

Задача: передать в тело письма не только строковые поля такие как Имя, Фамилия и Номер телефона, но и как минимум путь до загруженного файла с формы. Причём файл грузится в пользовательское свойство типа файл (не множественное).
Код
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 и получил полный путь до файла.
 
Здравствуйте!

Как правильно прописать в init.php, чтобы для свойства типа "список" в почтовом шаблоне выводилось не ID значения свойства, а его название?
 
Цитата
Светлана написал:
Как правильно прописать в init.php, чтобы для свойства типа "список" в почтовом шаблоне выводилось не ID значения свойства, а его название?

Как-то так, не проверял но должно работать
Код
$rsPropertyValues = CIBlockElement::getProperty(
                $arParams['IBLOCK_ID'], // Инфоблок
                $arElement['ID'], // ID элемента
                array(),
                array('ID' => $arProperty['ID']) // ID свойства
);
while ($arPropertyValue = $rsPropertyValues->fetch()) {
                if ($arProperty['MULTIPLE'] === 'Y') {
                   $arProps[] = $arPropertyValue['VALUE']; // Если множественное
                } else {
                   $arProps = $arPropertyValue['VALUE']; // Если одиночное
                }
            }
echo '<pre>';
print_r($arProps); // распечатка значений
echo '</pre>';
Изменено: Михаил Базаров - 02.11.2024 19:52:21
 
Михаил, помогите, уже голову сломал )) Откуда берется текст подсказки при заполнении формы - Заполните это поле ?
 
Цитата
Гость написал:
Михаил, помогите, уже голову сломал )) Откуда берется текст подсказки при заполнении формы - Заполните это поле ?

Плохо понял вопрос
 
Подсказка "Заполните это поле" генерируется браузером. В разных браузерах она разная.
Читают тему
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Блог-note: заметки разработчика

Моментальная фильтрация на AJAX в умном фильтре 1С-Битрикс

При штатной установке, интернет-магазина на 1С Битрикс, умный фильтр по товарам, показывает колличество найденных товаро...

Установить цену товара из свойства инфоблока

На одном из проектов, нужно было единоразово заполнить цены товаров из свойства инфоблока. Сделать это можно через API, ...

Получение списка Highload блоков с помощью API Битрикс

1С-Битрикс предоставляет мощный инструментарий для обеспечения эффективной работы ваших проектов. Одним из способов упра...

Заполнение габаритов товара, после обмена с 1С, из свойств элемента инфоблока.

Если Ваш интернет-магазин интегрирован с 1С, скорее всего столкнулись с такой проблемой: 1С не умеет выгружать параметры...

Вывести дату окончания скидки в карточке товара

Если нужно вывести информацию о скидке в карточке товара, можно воспользоваться методом CCatalogDiscount::GetList. Данны...

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

Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битриксе есть метод BX.SidePanel.In...

Умный фильтр только на последнем уровне разделов каталога.

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

Вывести множественное свойство типа файл с названием и весом файла в Битрикс

В этой заметке расскажу как красиво вывести множественное свойство типа файл в инфоблоке 1С-Битрикс. С показом оригиналь...

Отфильтровать элементы в Битрикс по свойству привязка к разделам

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