Сохранение полей формы в новой версии FormIt 2.2.2
Привет!
Сегодня днем я тут спрашивал как настроить новую версию FormIt так, что бы он сохранял значения формы.
К сожалению, разработчики компонента не отредактировали документацию и было совершенно не понятно как это должно работать.
Установив новую версию, я попробовал подключить хук FormItSaveForm. Вроде как это должно было сработать и значения полей должны были записаться в базу. Но нет…
К сожалению опыта у меня не так много и найденные мной недочеты в коде некоторым могут показаться очевидными, но тем не менее я заставил компонент работать как надо.
В сниппете FormItSaveForm необходимо в двух местах поправить запрос на получение id текущего ресурса и имени текущего контекста:
вместо
а вместо
в 82 строке нужно было написать
Форма заработала и значения начали сохраняться. Но не так как хотелось) Имена полей были на латинице и совпадали с именами инпутов.

Немного порывшись в коде понял, что следует делать вызов формы со следующими параметрами (привожу полный вызов):
В
В
В
Ну и в
Например, если указывать имена как

В результате в админке появились вот такие приятные записи:

Все это написал, в первую очередь для тех, кто сам так же как и я не особо искушен в написании своих компонентов и только начинает свой путь в этом направлении. Получилось очень размашисто, но зато вроде все сказал)
P.S. А кто хочет, что бы у него панель с сохраненными полями была на русском, просто скачайте вот эти файлики (перевел сам):
Дефолтные словари (перевел только название и описание пункта меню)
Словари для панели (перевел все)
Кто не помнит: файлы положить надо в /core/components/formit/lexicon/ru/
Спасибо)
Сегодня днем я тут спрашивал как настроить новую версию FormIt так, что бы он сохранял значения формы.
К сожалению, разработчики компонента не отредактировали документацию и было совершенно не понятно как это должно работать.
Установив новую версию, я попробовал подключить хук FormItSaveForm. Вроде как это должно было сработать и значения полей должны были записаться в базу. Но нет…
К сожалению опыта у меня не так много и найденные мной недочеты в коде некоторым могут показаться очевидными, но тем не менее я заставил компонент работать как надо.
В сниппете FormItSaveForm необходимо в двух местах поправить запрос на получение id текущего ресурса и имени текущего контекста:
вместо
$formName = $modx->getOption('formName', $formit->config, 'form-'.$modx->resource->get('id'));в 35 строке сниппета нужно было написать$formName = $modx->getOption('formName', $formit->config, 'form-'.$modx->resource->id);а вместо
'context_key' => $modx->resource->get('context_key')в 82 строке нужно было написать
'context_key' =>$modx->context->keyФорма заработала и значения начали сохраняться. Но не так как хотелось) Имена полей были на латинице и совпадали с именами инпутов.
Немного порывшись в коде понял, что следует делать вызов формы со следующими параметрами (привожу полный вызов):
[[!AjaxForm?
&snippet=`FormIt`
&form=`tpl.AjaxForm.example`
&hooks=`math,email,FormItSaveForm,FormItAutoResponder`
&formName=`Форма на странице контактов`
&formFields=`name,email,message`
&fieldNames=`name==Имя отправителя,email==Эл.почта отправителя,message==Комментарий отправителя`
&emailTpl=`emailTmpl`
&emailSubject=`Сообщение с сайта 3musictver.org.`
&emailTo=`suhomozgy.andrey@gmail.com`
&validate=`name:required,email:required,message:required,math:required`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Сообщение успешно отправлено`
&fiarTpl=`backToUserEmail`
&fiarSubject=`Спасибо за ваш вопрос!`
&fiarToField=`email`
&fiarFromName=`Детская школа искусств им. В.В. Андреева`
&fiarFrom=`no-reply@3musictver.org`
&mathMinRange=`1`
&mathMaxRange=`5`
]]В
&hooks=`...email,FormItSaveForm...`делаем сохранение значений после отправки письма.В
&formName=`Форма на странице контактов`говорим как будет называться наша форма. Это что бы в админке можно было фильтровать по названию.В
&formFields=`name,email,message`перечисляем поля, которые необходимо сохранить. Иначе будут сохранены все и получится как на картинке выше.Ну и в
&fieldNames=`name==Имя отправителя,email==Эл.почта отправителя,message==Комментарий отправителя`перечисляем нужные поля с присвоением им имен. Порядок написания важен. Например, если указывать имена как
...Имя отправителя==name...то получите такую картинкуВ результате в админке появились вот такие приятные записи:
Все это написал, в первую очередь для тех, кто сам так же как и я не особо искушен в написании своих компонентов и только начинает свой путь в этом направлении. Получилось очень размашисто, но зато вроде все сказал)
P.S. А кто хочет, что бы у него панель с сохраненными полями была на русском, просто скачайте вот эти файлики (перевел сам):
Дефолтные словари (перевел только название и описание пункта меню)
Словари для панели (перевел все)
Кто не помнит: файлы положить надо в /core/components/formit/lexicon/ru/
Спасибо)
Комментарии: 30
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Кстати, раз уж начал осваивать компоненты и перевел лексиконы, сделай пулл-реквест автору, чтобы новая версия уже была с русским языком. Вот репозиторий компонента: https://github.com/modxcms/FormIt, вот инструкция, как сделать пулл-реквест: Как начать участвовать в Open Source
И раз нашли ошибки — то сообщите разработчику, пожалуйста, а то каждый раз после обновления править код не очень хорошо.
То есть я добавил только
&hooks=`email,FormItSaveForm,…
&formFields=
&fieldNames=
в вызов FormIt и все заработало, правда использую FormIt без AjaxForm
Видимо, нужно еще добавить загрузку этой страницы в $modx->resource? Я правильно понял проблему?
До правок возвращало 500 ошибку в строках 35 и 82, где присутствовало:
FormIt 2.2.2-pl, AjaxForm 1.0.7-pl
s1509.h3.modhost.pro/manager/
s1509 / 721QTQutryPt
В форме заявок нужно добавить хук, назовём его, к примеру saveRequest
В сниппете создадим объект и сохраним его
ilyaut.ru/addons/very-easy-to-add-custom-objects-in-modx/
У меня в csv какая-то проблема с кодировкой. Только где не знаю =(
При этом в базе русские символы кодируются так: