Меню

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

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

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

Скачать: https://bazarow.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

Спустя какое-то время после написании заметки, сделан видеокурс по созданию доски объявлений. В течении трех серий видеокурса, рассматриваю как сделать компонент на базе способов и методов описанных в заметке.

Кроме того, рассмотрен вариант использования D7 методов. Сам компонент используется и для добавления элемента инфоблока и для редактирования.
https://bazarow.ru/video/video_new/seazon_2_2024/add_edit_form_2/
Что бы добавить в форму множественное свойство с типом файл.
Создаем массив со свойствами файлов, методом 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;
Здравствуйте, подскажите, как подключить эти файлы? Куда нужно добавить их?
Цитата
Мария написал:
Здравствуйте, подскажите, как подключить эти файлы? Куда нужно добавить их?

Нужно закинуть файлы в свое пространство имен компонентов, например "/local/components/MY_SPASE/" и вызвать компонент в нужном месте сайта - ровно так же как вызываются штатные компоненты битрикс
Михаил, добрый день.
Релевантнее места чем тут спрсоить не нашел)
bitrix:main.file.input можно как-то подружить с element.add.form? У меня есть идеи как получать айди файлов и передовать их в элемент, но я не понимаю как при удалении элемента также удалять изображения, если сделать не учитывая этот нюанс - боюсь, рано или поздно сайт превратится в свалку неиспользованных изображений)
Так же мне интересно, возможно ли с помощью него получать изображения из свойства?
Условно опубликована запись, в галерее 3 изображения загруженные с помощью bitrix:main.file.input, человек решил отредактировать свою запись, удалить 1 изображение и добавить новое. Он это умеет?
Буду крайне признателен за ответ, компонент не то, чтобы популярен и думаю у вас достаточно опыта работы с ним, чтобы дать мне подсказки)
Да, main.file.input это тоже самое что и простой input type=file.
Просто выводите его в нужном месте шаблона компонента и передаете файлы в обработку.
Цитата
написал:
Да, main.file.input это тоже самое что и простой input type=file.
Просто выводите его в нужном месте шаблона компонента и передаете файлы в обработку.
Не могу сообразить, как в штатном element.add.form добавить изображение к элементу с помощью main.file.input :cry:
Помогите пожалуйста, Михаил.
Не хочу угрожать, но если вы мне не поможете - я заплачу, у меня уже все ссылки в гугле фиолетовые
Я получаю ID изображений, но я не понимаю где в компоненте обрабатываются файлы, как скормить эти ID форме при добавлении, чтобы изображения оказались в свойстве типа "файл".
Зная 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;
Не уходят изображения с помощью
Код
$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));
} 
Добрый вечер Михаил !
Как отправить множественное свойство ФАЙЛ на почту, после создания элемента инфоблока ?
Какой код необходим прописать в init.php ?
Сейчас под рукой ни чего похожего нет. Но достаточно передать массив всех файлов через CFile::GetFileArray
И лучше всего не создавать лишнее в init.php - достаточно вызвать CEvent::Send прямо в компоненте
Видеоуроки по
1С-Битрикс
на моем Boosty канале Видео
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

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

Ускорение работы сайта на 1С-Битрикс

Данная статья написана специально под видеоролик (приложен в конце статьи), опубликованный на моем ВКVideo канал...

Показать доступный остаток каждого товара в корзине 1С-Битрикс

Задача: показать остаток каждого товара в корзине 1С-Битрикс, что бы покупатель сразу знал предельное колличество товара...

Автоматически отгрузить и оплатить заказ, при смене статуса на "Выполнен".

Проблема: Заказы, на сайте, обрабатываются только в 1С. При этом 1С не работает с отгрузками и обменивается только стату...

Не дать пользователю купить больше одного товара, в Битрикс

Иногда нужно и такое: Например: на одном из разрабатываемых сайтов, мне нужно было создать всего 4 товара. при этом поку...

Вывести общее количество товаров в шаблоне корзины 1С-Битрикс

Задача: вывести общее количество товаров в корзине (именно количество единиц товара, а не позиций). При этом да...

Композитный сайт на 1С-Битрикс

Для новых клиентов: Все новые проекты будут включать в себя применение технологии "Композитный сайт" - данная услуга уже...

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

Задача: В магазине реализован внутренний счет (бонусный счет) для покупателей. Необходимо, чтобы при оплате зака...

Создание мобильного приложения на cordova, для любого сайта.

Если стоит задача разработки мобильного приложения для сайта, можете воспользоваться данной заметкой. Постарался сделать...

Привязка к разделам в компоненте "Добавления элементов пользователем"

В системе управления 1С Битрикс есть компонент "Форма добавления / редактирования" - который позволяет пользователям доб...