Компонент добавления элемента в инфоблок, с отправкой письма о добавлении и AJAX.

RSS
Компонент добавления элемента в инфоблок, с отправкой письма о добавлении и AJAX., Битрикс компонент для реализации формы добавления элемента инфоблока
 
Сделан по быстрому, в качестве базовой заготовки для дальнейшего развития.
Развиваться будет, в полноценный компонент, в рамках видеокурса "Разработка доски объявлений на Битрикс" https://bxstore.ru/

Пока, можно использовать как форму обратной связи, с записью в инфоблок и отправкой письма.

Скачать: https://camouf.ru/upload/fo_all/feedback.form.element.zip

На данный момент умеет:
- Выводить, на заполнение,  свойства инфоблока. Только не множественные.
- Загружать файлы в свойство "Файл". Использует штатный компонент main.file.input (dragn_n_drop).
- Защита, от совсем простых ботов (проверка скрытого поля на заполнение)
- Поддерживает AJAX
- Отправляет письмо о добавлении элемента
- Все параметры управляемые (картинка 1)
- Шаблон маскимально простой (картинка 2)
- Легко дорабатывается, управляется и расширяется.

Письма отправляет обычной функцией php-mail, но в файле component.php есть закомментированый участок
(картинка 3):
Можно использовать штатный метод Битрикс Event::send - который передаст поля в штатное же почтовое событие FEEDBACK_FORM

PS: В рамках видеокурса будет превращен в полноценный компонент добавления объявления на доску. С гугло капчей, работой с любыми типами полей И так далее.
Изменено: Михаил Базаров - 26.03.2022 16:15:30
 
Что бы добавить в форму множественное свойство с типом файл.
Создаем массив со свойствами файлов, методом CFile::MakeFileArray и передаем в $PROP["MORE_PHOTO"] (в моем случае, свойство с доп картинками)
Код
$arMorePhoto["VALUE"];
$i = 0;    
foreach ($_POST["MORE_PHOTO"] as $morePhoto) {        
      $arMorePhoto['n'.$i] = array("VALUE"=>CFile::MakeFileArray($morePhoto));        
      $i++;
}
$PROP["MORE_PHOTO"] = $arMorePhoto;
Изменено: Михаил Базаров - 21.06.2021 14:32:04
 
Здравствуйте, подскажите, как подключить эти файлы? Куда нужно добавить их?
 
Цитата
Мария написал:
Здравствуйте, подскажите, как подключить эти файлы? Куда нужно добавить их?

Нужно закинуть файлы в свое пространство имен компонентов, например "/local/components/MY_SPASE/" и вызвать компонент в нужном месте сайта - ровно так же как вызываются штатные компоненты битрикс
 
Михаил, добрый день.
Релевантнее места чем тут спрсоить не нашел)
bitrix:main.file.input можно как-то подружить с element.add.form? У меня есть идеи как получать айди файлов и передовать их в элемент, но я не понимаю как при удалении элемента также удалять изображения, если сделать не учитывая этот нюанс - боюсь, рано или поздно сайт превратится в свалку неиспользованных изображений)
Так же мне интересно, возможно ли с помощью него получать изображения из свойства?
Условно опубликована запись, в галерее 3 изображения загруженные с помощью bitrix:main.file.input, человек решил отредактировать свою запись, удалить 1 изображение и добавить новое. Он это умеет?
Буду крайне признателен за ответ, компонент не то, чтобы популярен и думаю у вас достаточно опыта работы с ним, чтобы дать мне подсказки)
 
Да, main.file.input это тоже самое что и простой input type=file.
Просто выводите его в нужном месте шаблона компонента и передаете файлы в обработку.
Изменено: Михаил Базаров - 15.11.2022 11:22:59
 
Цитата
написал:
Да, main.file.input это тоже самое что и простой input type=file.
Просто выводите его в нужном месте шаблона компонента и передаете файлы в обработку.
Не могу сообразить, как в штатном element.add.form добавить изображение к элементу с помощью main.file.input :cry:
Помогите пожалуйста, Михаил.
Не хочу угрожать, но если вы мне не поможете - я заплачу, у меня уже все ссылки в гугле фиолетовые
Я получаю ID изображений, но я не понимаю где в компоненте обрабатываются файлы, как скормить эти ID форме при добавлении, чтобы изображения оказались в свойстве типа "файл".
Изменено: Михаил Базаров - 04.12.2022 17:53:20
 
Зная ID файла можно получить путь к нему

Код
$rsFile = CFile::GetByID('ID ФАЙЛА');
print_r($rsFile);

В $rsFile будут все данные о нем, включая путь, дату, название и так далее.
Сохранить можно через
Код
$arMorePhoto["VALUE"];
    $i = 0;
    foreach ($_POST["NAME ВАШЕГО  main.file.input"] as $morePhoto) {
        $arMorePhoto['n'.$i] = array("VALUE"=>CFile::MakeFileArray($morePhoto));
        $i++;
    }
$PROP["MORE_PHOTO"] = $arMorePhoto;
Изменено: Михаил Базаров - 04.12.2022 17:58:50
 
Не уходят изображения с помощью
Код
$arMorePhoto["VALUE"];    $i = 0;
    foreach ($_POST["TEST_NAME_INPUT"] as $morePhoto) {
        $arMorePhoto['n'.$i] = array("VALUE"=>CFile::MakeFileArray($morePhoto));
        $i++;
    }
$PROP["MORE_PHOTO"] = $arMorePhoto;
при сабмите формы :(
Код свойства - MORE_PHOTO
Вызов формы
Код
<?$APPLICATION->IncludeComponent("bitrix:main.file.input", "drag_n_drop",
    array(
        "INPUT_NAME"=>"TEST_NAME_INPUT",
        "MULTIPLE"=>"Y",
        "MODULE_ID"=>"iblock",
        "MAX_FILE_SIZE"=>"",
        "ALLOW_UPLOAD"=>"A",
        "ALLOW_UPLOAD_EXT"=>""
    ),
    false
);
?>
Ваш код - внутри темплейта, после формы.
 
Вот так

В template.php
Код
$APPLICATION->IncludeComponent("bitrix:main.file.input", "dragn_n_drop", Array(
   "INPUT_NAME" => 'MORE_PHOTO',
   "MULTIPLE" => "Y",
   "MODULE_ID" => "main",
   "MAX_FILE_SIZE" => "",
   "ALLOW_UPLOAD" => "A",
   "ALLOW_UPLOAD_EXT" => ""
),
false
); 

В component.php
Код
if ((!empty($_REQUEST['NAME'])) && (!empty($_REQUEST['sessid'])) && (empty($_REQUEST['USER']))) {

    $el = new CIBlockElement;
    $section_id = false;
    $sendFields = array();
    foreach ($arResult['PROPERTY_DATAS'] as $sendProps) {
        $sendFields[$sendProps['CODE']] = strip_tags($_POST[$sendProps['CODE']]);
    }


    $arMorePhoto["VALUE"];
    $i = 0;
    foreach ($_POST["MORE_PHOTO"] as $morePhoto) {
        $arMorePhoto['n'.$i] = array("VALUE"=>CFile::MakeFileArray($morePhoto));
        $i++;
    }
    $PROP["MORE_PHOTO"] = $arMorePhoto;

    $fields = array(
        "IBLOCK_ID" => $arParams['IBLOCK_ID'],
        "PROPERTY_VALUES" => $sendFields,
        "NAME" => strip_tags($_REQUEST['NAME']),
        "PROPERTY_VALUES" => $PROP, 
    );

    $ID = $el->Add($fields));
} 
Изменено: Михаил Базаров - 04.12.2022 18:28:03
 
Добрый вечер Михаил !
Как отправить множественное свойство ФАЙЛ на почту, после создания элемента инфоблока ?
Какой код необходим прописать в init.php ?
 
Сейчас под рукой ни чего похожего нет. Но достаточно передать массив всех файлов через CFile::GetFileArray
И лучше всего не создавать лишнее в init.php - достаточно вызвать CEvent::Send прямо в компоненте
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 
Поблагодарить и поддержать:
Или подписаться на boosty канал: Видео на Ютубе