[FormDataSave] Сохранение данных в админке с любых форм на сайте

Компонент позволяет сохранять данные с любых форм на сайте и отображает эти данные в админке. Сохраняются только данные отправленных полей, файлы не логируются! Подключение компонента к формам производится вручную. 
 
Возможности:
  • легкое подключение через хук (FormIt) или PHP код
  • поддержка большого кол-ва разных форм
  • кастомизация для каждой формы прямо в админке (для вывода информации)
  • 2 события для плагина, на создание записи и смены статуса
  • работа с абсолютно любым набором полей каждой формы
  • разделение или группировка форм для вывода в разных меню
  • объединение 2 и более полей для записи в одно (например 2 отдельных поля firstname и lastname можно записать в одно поле name при сохранении данных)
  • при объединении полей можно настраивать последовательность чтения полей и разделитель
Полная информация для настройки форм находится внутри компонента и доступна по кнопке “Помощь” в меню самого компонента.
Инструкция о том как подключать формы и использовать события плагина, находится во внутренней документации компонента, в меню “детали компонента” в списке установленных компонентов.

Подключение
Для автоматической интеграции с формой через FormIt, достаточно добавить хук с названием «fds_hook» и добавить скрытое поле с названием «form_id» и значением будет являться ID формы в которую необходимо сохранять данные, пример:
<input type="hidden" value="ID_ФОРМЫ" name="form_id">
ID формы можно определить на странице самого компонента (в админке), вкладка «формы».
Если подключаете в своих PHP скриптах, необходимо вызвать следующий код в обязательном порядке для подключения самого компонента:
$modx->getService('formdatasave','formdatasave',$modx->getOption('core_path').'components/formdatasave/model/formdatasave/');
Затем вызываем специальный метод для сохранения данных:
$modx->formdatasave->addData($fields);
Массив $fields должен быть в формате (это могут быть и чистые данные с $_POST, $_GET, $_REQUEST, главное соблюдать формат):
array(
    'form_id'=>'ID_ФОРМЫ',
    'имя_поля'=>'значение_поля',
    'имя_поля'=>'значение_поля',
    .....
)

Интерфейс компонента:
Компонент имеет 3 таба на которые присутствуют свои права доступа, в «шаблонах политики доступа» (ключи с префиксом «fds_» в политике доступа с ID 1).
Табы на странице компонента:
1 таб — сохраняемые данные при отправке форм.
2 таб — список форм
3 таб — настройка статусов под каждую форму (если требуется)

События для плагинов
существует 2 события:
fdsCreate — при добавлении новой записи, доступны переменные:
1) $form_id — ID формы
2) $data — добавляемые данные, обычный обьект через getObject

fdsStatusChange — при изменении статуса:
1) $form_id — ID формы
2) $data — данные, обычный обьект через getObject
3) $old_status — старый статус
4) $status — статус

Собственные наборы форм (группировка нескольких форм для вывода в админке через новое меню)
Например в компоненте созданы 2 формы «форма обратной связи» и «заказ обратного звонка» и форму обратного звонка необходимо вынести в отдельное меню, для этого необходимо создать новый пункт в меню со следующим минимальным набором настроек:
Действие (контроллер): controllers/main
Ключ словаря (название пункта меню): свое название пункта меню
Пространство имён (namespace): formdatasave
Параметры (доп GET параметры): &forms=ID_ФОРМЫ (можно несколько форм, об этом ниже)
Остальные параметры по желанию.
Для добавления нескольких форм в один пункт меню необходимо в «параметры» указывать их через разделитель "||", пример: &forms=2||1||5 (в данном разделе будут активны только формы с ID 1,2,5 и при этом форма с ID 2 будет выведена по умолчанию, так как, она первая в списке)

Свои текста для существующих полей или новых динамически создаваемых
Для добавления своих текстов на пользовательские поля можно создать файлик в нужном контексте «formdatasave/lexicon/язык/custom.inc.php», он включится автоматически, контент в стандартном формате:
<?php

$_lang['fds_data_field_data'] = 'Дата'; // меняет глобально заголовок поля с названием "date"
$_lang['fds_data_form2_field_data'] = 'Дата'; // меняет заголовок поля с названием "date", только для формы с ID 2
$_lang['fds_data_form7_field_data'] = 'Дата'; // меняет заголовок поля с названием "date", только для формы с ID 7
Показаны 3 возможных формата ключей лексикона, можно использовать их по отдельности или вместе.

Демо: http://crowpackages.com.ua/components/formdatasave.html (при переходе скрипт modx.pro обрезает ".html", окончание необходимо добавить вручную в урле после перехода по ссылке)
Пакет на modstore: https://modstore.pro/packages/other/formdatasave
Юра
27 октября 2018, 12:42
2
271
+3

Комментарии: 6

Алексей Бгатов
27 октября 2018, 17:22
+2
для тупых — в чем принципиальное отличие от FormItSaveForm, доступого из коробки?
    Баха Волков
    27 октября 2018, 17:44
    +1
    У Formit оно выглядит прям на любителя (это всего лишь мое мнение)

    Компонент нужный, но как по мне цена очень высокая (и это тоже всего лишь моё мнение), если бы он стоил рублей 500, то я бы пользовался, но хозяин барин
Ivan
29 октября 2018, 15:08
0
Мы за 2к пользуемся. например, msearch2 + mfilter2, а тут пакет, 70% от стоимости выше озвученных, который по идее то и не нужен и достаточно FormItSaveForm. Имхо
    Юра
    29 октября 2018, 16:56
    0
    Сам компонент предоставляет более продвинутые возможности по сравнению с хуком FormIt, для работы с данными из форм. Достаточно «FormItSaveForm» — это хорошо, пользуйся. Никто и ничего не обязывает использовать данный компонент для замены хука FormIt.
      Ivan
      30 октября 2018, 00:22
      0
      Иногда нужно что бы можно было посмотреть прикрепленные файлы. В FormItSaveForm такого вроде нет. Это было бы хорошим плюсом, как мне кажется
        Юра
        30 октября 2018, 09:09
        0
        Полностью согласен, сохранение прикрепляемых файлов было бы крутой штукой, но, к сожалению данная штука будет слишком быстро заполнять дисковое пространство, что будет вести к падению сайта или будет тормозить из-за превышения дисковой квоты. Ранее обдумывалось такое, но из-за проблем с дисковой квотой — идея была откинута. Амазон хоть и резиновый, но тоже не вариант, так как, за него необходимо платить приличные деньги постоянно. Раз не у меня одного такая идея возникла, есть тогда смысл подумать над такой реализацией с минимальным ущербом для сервера. Спасибо за отзыв.