Добавление формы в свой компонент

запись и обработка полей

#1 17 июля 2024 в 10:31

Доброго времени суток.

Для расширения функционала в самописанном компоненте решил вывести поля из «конструктора форм»

Подключаю форму:

  1. $forms = cmsCore::getController('forms');
  2. $_form_data = $forms->getFormData('id формы');
  3.  
  4. list($form, $form_data) = $_form_data;
  5. $form_data['params']['form_tpl_file'] = 'order-form'; // подгружаю свой шаблон
  6. $form_data['params']['only_fields'] = 1; // оставляю только поля
  7.  

т.к. это не тип контента и для каждого поля нет возможности создавать свое поле в таблице БД, принял решение в шаблоне полей формы добавить:

  1. if(isset($name_parts)){
  2. $field->element_name = "order_fields['{$name_parts[1]}']";
  3. }

т.е. при сохранении к изначальным полям формы теперь добавляется массив «order_fields» который заливается в БД в виде ямл

И все бы отлично, но только текстовые поля, кроме Изображение, набор изображений и файл нормально добавляются.

Файлы в полях: Изображение, набор изображений, загружаются по аяксу без проблем и сохраняются пути в БД, НО если шаблон включен модерн то после отправки формы на сохранение, изображения удаляются с хостинга. Запрос по аяксу отправляет: 

templates\modern\controllers\images\upload_single.tpl.php и templates\modern\controllers\images\upload_multi.tpl.php

  1. icms.images.delete_url = "<?php html($delete_url); ?>";

а поле «файл» записывается в БД пустым и на хостинг не загружает файл.

Может кто уже курил подобную тему и может подсказать?

#3 17 июля 2024 в 12:15

Грабли, вероятно, в использовании формы конструктора форм вместо формы компонента. Что мешает сделать свою форму компонента на примере этой? github.com/instantsoft/icms2/blob/master/system/controllers/auth/forms/form_login.php

 
Loadырь

Так форма уже есть. Чисто визуально если это представить то как на первой ветке страница оформления заказа в магазине.

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

Помимо данного момента, этот же функционал нужен для еще одной задумки, для сбора данных всех заполненных форм на сайте. Что то вроде заявок. Сейчас они только отправляются на почту или в ЛС, но с типом поля «файл» там та же история, он не сохраняется на хостинге и не передается с формой на сколько помню.

#4 17 июля 2024 в 12:44

Так форма уже есть.

AtlantisWeb

Всё верно. Форма есть и выглядит красиво, но обрабатывает ее не ваш компонент, а «Конструктор форм». И конструктор форм понятия не имеет о вашем компоненте и его требованиях.

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.