Сохранение полей формы в новой версии FormIt 2.2.2

Привет!
Сегодня днем я тут спрашивал как настроить новую версию 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/

Спасибо)
Андрей Сухомозгий
31 марта 2015, 16:51
modx.pro
21
10 124
+11

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

Илья Уткин
31 марта 2015, 20:48
0
Читать интересно. У тебя живой приятный язык. Пиши еще)

Кстати, раз уж начал осваивать компоненты и перевел лексиконы, сделай пулл-реквест автору, чтобы новая версия уже была с русским языком. Вот репозиторий компонента: https://github.com/modxcms/FormIt, вот инструкция, как сделать пулл-реквест: Как начать участвовать в Open Source
Aleksandr PL
31 марта 2015, 21:26
0
Спасибо за подсказки, а то автор только обещал написать документацию по работе с новыми функциями.

И раз нашли ошибки — то сообщите разработчику, пожалуйста, а то каждый раз после обновления править код не очень хорошо.
Aleksandr PL
31 марта 2015, 21:38
0
Скажите, а зачем вы правите FormItSaveForm? — это нужно для совместимости с AjaxForm?

То есть я добавил только
&hooks=`email,FormItSaveForm,…
&formFields=
&fieldNames=

в вызов FormIt и все заработало, правда использую FormIt без AjaxForm

    Андрей Сухомозгий
    31 марта 2015, 21:40
    0
    да, мне нужно, что бы компонент работал через AjaxForm… без него вроде все работает как надо. наверное стоило указать это где-нибудь в заметке.
      Роман Ильин
      02 мая 2017, 08:50
      0
      Теперь с AjaxForm работает все как надо. FormItSaveForm не изменял.
    Andrey Grachov
    02 апреля 2015, 03:16
    +1
    Правки FormItSaveForm похоже были первоапрельской шуткой — хорошая попытка заменить Fatal error на Notice (Trying to get property of non-object). Чтобы все работало правильно, AjaxForm должен подменять $modx->resource, иначе не будут нормально (правильно) работать любые хуки FormIt, которые зависят от текущей страницы ($modx->resource), на которой находится форма.
      Василий Наумкин
      02 апреля 2015, 05:47
      0
      В последней версии я там добавил отправку id страницы, на которой запущена форма.

      Видимо, нужно еще добавить загрузку этой страницы в $modx->resource? Я правильно понял проблему?
        Andrey Grachov
        02 апреля 2015, 11:05
        0
        Да, все верно.
          Василий Наумкин
          02 апреля 2015, 11:57
          0
          Добавил правку и обновил пакет в репозитории, проверяйте.
            Андрей Сухомозгий
            02 апреля 2015, 12:00
            0
            проверил, работает!) спасибо:)
              Василий Наумкин
              02 апреля 2015, 12:06
              0
              Ура!
                Andrey Grachov
                02 апреля 2015, 14:02
                0
                Осталось только удалить issue чтобы не шокировать разработчиков FormIt :)
                Сергей Фещуков
                03 апреля 2015, 11:17
                0
                У меня не заработало с ходу. Заработало только после внесения правок из поста.
                До правок возвращало 500 ошибку в строках 35 и 82, где присутствовало:
                35: $modx->resource->get('id')
                82: $modx->resource->get('context_key')
                FormIt 2.2.2-pl, AjaxForm 1.0.7-pl
                  Andrey Grachov
                  04 апреля 2015, 14:53
                  0
                  Повторюсь еще раз — эти правки всего лишь заменяют фатальную ошибку нефатальной, всегда необходимо находить безошибочное решение :)
            Андрей Сухомозгий
            02 апреля 2015, 08:17
            0
            получается, issue зря написал) значит проблему можно решить на стороне AjaxForm?
            Хулио Надда
            05 апреля 2015, 00:47
            0
            А не подскажете случаем как отравлять в шаблоне сообщения ID самой заявки?
              Andrey Grachov
              06 апреля 2015, 13:44
              +1
              Если применить изменения, то можно будет использовать в шаблоне письма плейсхолдеры [[+savedForm.*]] с полями сохраненной формы (например, [[+savedForm.id]] для ID заявки).
                Хулио Надда
                06 апреля 2015, 16:45
                0
                Попробовал на двух сайтах, не получилось. Пользуюсь AjaxForm
                  Andrey Grachov
                  06 апреля 2015, 23:23
                  +1
                  Могу предположить, что причина может быть в неправильном порядке вызова хуков. Вот демка с модифицированным сниппетом FormItSaveForm, пробуйте пока она жива:
                  s1509.h3.modhost.pro/manager/
                  s1509 / 721QTQutryPt
                    Хулио Надда
                    06 апреля 2015, 23:37
                    0
                    Андрей, ну мне даж добавить нечего поменял порядок хуков все магическим образом заработало! Просто огромное человеческое спасибо!
                      Julia Phoenix
                      17 декабря 2015, 20:59
                      0
                      Андрей, подскажите пожалуйста. Какой порядок должен быть у хуков? Аналогично, как в посте не работает, а демка умерла просто давно уже)
                        Илья Уткин
                        18 декабря 2015, 00:18
                        0
                        Попробуйте поставить customExtra и сохранять формы в нем.

                        В форме заявок нужно добавить хук, назовём его, к примеру saveRequest
                        [[!FormIt?  
                            &hooks=`saveRequest,email,redirect`  
                            &emailTo=`your@mail.ru`  
                            &emailSubject=`Заказ обратного звонка`
                            &emailTpl=`tpl.mail.contact`
                            &redirectTo=`5`
                        ]]

                        В сниппете создадим объект и сохраним его
                        <?php
                        $modx->addPackage('customextra', $modx->getOption('core_path').'components/customextra/model/');
                        $request = $modx->newObject('customExtraItem');
                        $request->set('name', $_POST['name']);
                        $request->set('string1', $_POST['contact']);
                        $request->set('description', $_POST['text']);
                        $request->save();
                        return true;



                        ilyaut.ru/addons/very-easy-to-add-custom-objects-in-modx/
                          Julia Phoenix
                          21 декабря 2015, 08:22
                          0
                          Илья, спасибо большое!!! Не догадалась на твоем сайте посмотреть. Спасибо, буду пробовать.
                Николай Загумённов
                07 мая 2015, 18:35
                0
                Пробывал ли кто делать импорт csv сохраненных форм?
                У меня в csv какая-то проблема с кодировкой. Только где не знаю =(

                При этом в базе русские символы кодируются так:

                Scorp Satex
                02 июля 2015, 19:55
                +1
                Спасибо вам большое! Сэкономили мне кучу времени. :)
                  Lori
                  12 ноября 2016, 12:49
                  0
                  Что с FormItSaveForm что с FormSave ужасная кодировка. С utf-8 не работает, кто знает как исправить?
                    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    30