[AjaxForm] Отправка форм через Ajax


Работаю над одним интересным сайтом, в котором много разных форм: и для вакансий, и для заказов, и для обратной связи.

У MODX Revolution есть хороший компонент для форм — FormIt. Меня он всем устраивает, за исключением одного — отсутствия работы с ajax.
Проблема старая, решалась сотней разных способов на сотне разных сайтах, и просто не захотелось велосипедить в сто первый.

Следуя известной мудрости "лучше день потерять потом за пять минут долететь", я взял и написал новый бесплатный компонент AjaxForm.
Сниппет работает просто:
  1. Регистрирует нужные скрипты на фронтенде (jQuery.Form и jQuery.jGrowl)
  2. Сохраняет в сессию $scriptProperties при вызове сниппета
  3. Выводит указанную форму, прописывая класс ajax_form и скрытый input для получения $scriptProperties
  4. Вешает обработчик на форму, чтобы она отправлялась через ajax
  5. При отправке запускает указанный сниппет для обработки и возвращает ответ от него
  6. Выводит сообщение об успехе, или ошибки, если есть
По умолчанию все рассчитано на работу с FormIt, но можно указать и собственный сниппет.

Пример вызова для FormIt:
[[!AjaxForm?
	&snippet=`FormIt`
	&form=`tpl.AjaxForm.example`
	&hooks=`email`
	&emailSubject=`Тестовое сообщение`
	&emailTo=`info@domain.com`
	&validate=`name:required,email:required,message:required`
	&validationErrorMessage=`В форме содержатся ошибки!`
	&successMessage=`Сообщение успешно отправлено`
]]

Для вывода сообщений об ошибке заполнения поля, скрипт ищет в форме блок с классом error_имяполя и вставляет в него сообщение (см. дефолтный чанк).
При повторной отправке формы эти сообщения удаляются.

По идее, можно менять все вызовы FormIt на рабочих сайтах, просто оборачивая их в AjaxSubmit и перенося форму со страницы в чанк — должно работать.

Конечно вы можете использовать и собственный сниппет, который будет делать что угодно (хоть создавать страницы на сайте) и должен возвращать JSON массив с ключами:
  • status — 1 или 0, то есть успех или ошибка
  • message — сообщение о работе сниппета
  • data — массив для полей с ошибками, в котором ключами является имя поля, а значением — сообщение об ошибке
Для удобства работы в параметры сниппета передаётся переменная $AjaxForm с классом компонента. Советую вызывать из него методы error и success при выдаче ответа.

Простейший пример своего сниппета:
if (empty($_POST['name'])) {
	return $AjaxForm->error('Ошибки в форме', array('name' => 'Вы не заполнили имя'));
}
else {
	return $AjaxForm->success('Форма прошла проверку');
}

Вызываем так:
[[!AjaxForm?
	&snippet=`MySnippet`
	&form=`tpl.AjaxForm.example`
]]

В общем, качаем, тестируем, пишем отзывы.
Это бета-версия, написана целиком за сегодня и, скорее всего, содержит ошибки.

Кстати

Сниппет можно использовать еще одним интересным образом — просто вызвав его на странице, вы получаете подключенный jQuery.jGrowl и можете легко показывать приятные всплывающие уведомления на javascript:
AjaxForm.Message.success('Зеленый popup');
AjaxForm.Message.error('Красный popup', 1);
AjaxForm.Message.info('Черный popup');

Вторым параметром можно указать «прилипающий» popup — его нужно будет закрыть вручную, бывает полезно для показа серьёзных ошибок.


Сниппет использует:
Исходный код находится на GitHub

Версия 1.0.0-rc

  • Улучшена подготовка формы, автоматически добавляется класс ajax_form и метод отправки post
  • Добавлены параметры сниппету, для изменения путей загрузки скриптов и стилей
  • Добавлена работа с отключенным javascript

Следующая заметка
[miniShop2] Версия 2.1.2 Поддержка файлов в галерее
Предыдущая заметка
[Tickets] Версия 1.1.0-pl Новые настройки


Комментарии ()

  1. Михаил 03 ноября 2013, 17:56 # 0
    Смотрю. Ajax манит но стараюсь
    1. Сергей 03 ноября 2013, 19:41 # +1
      Василий, спасибо за компонент, явно будет удобнее чем свой сниппит для отправки.
      Кстати, у вас в readme на github ошибка в имени класса: class=«ajax_fom».
      1. Алексей Карташов 03 ноября 2013, 19:47 # 0
        Однозначно полезно, спасибо!

        А настроек для указания имён файлов подключаемых скриптов, как я понимаю, нет? Помнишь, обсуждали как-то этот вопрос к коммиту на гитхабе?
        Просто я скрипты на фронтэнде обычно скукоживаю и склеиваю. И благодаря такой настройке в общую кучу можно приклеить ещё и jQuery.Form с jGrowl'ом.
        1. Василий Наумкин 03 ноября 2013, 21:35 # 0
          Вывел в параметры сниппета, можно обновляться.
          1. Алексей Карташов 04 ноября 2013, 01:23 # 0
            Круто, спасибо!
        2. Василий Столейков 04 ноября 2013, 09:41 # 0
          Как поменять шаблон письма? На почту приходит что-то типа:
          name: Имя
          email: почта@gmail.com
          message: Привет, я сообщение!
          P.S. Компонент очень долгожданный и решил много проблем. Спасибо!
          1. Василий Наумкин 04 ноября 2013, 09:59 # 0
            Как поменять шаблон письма в FormIt?

            Так и меняй.
            1. Василий Столейков 04 ноября 2013, 10:30 # -1
              Странно что получилось не сразу, потому и написал сюда. Спасибо большое! =)
              1. Василий Наумкин 04 ноября 2013, 10:33 # 0
                После изменения параметров сниппета страничку нужно обновлять, так как в форму добавляется хэш настроек, чтобы достать потом их в коннекторе из сессии.

                Посмотри в форму, там есть
                <input type="hidden" name="action" value="хэш" />
                в конце формы.
                1. Василий Столейков 04 ноября 2013, 11:04 # 0
                  Понял и учёл. Применил компонент сразу ко всем сайтам, с которыми работаю. На некоторых использовал свой сниппет для создания новых страниц. Работает замечательно — СПАСИБО!
                  1. Василий Наумкин 04 ноября 2013, 11:13 # 0
                    На здоровье!
          2. Сергей Росоловский 05 ноября 2013, 01:03 # 0
            Василий, а ты что мысли читать умеешь, я только гуглил FormIT с аяксом а тут на тебе. :) Кстати а когда уроки, а то я тут на SSD накопил малость, вот думаю ждать уроки или винта покупать?
            1. Василий Наумкин 05 ноября 2013, 01:10 # 0
              Планирую завтра дописать кое-какой функционал на сайте и начинать писать уроки.

              Покупай SSD, а к урокам сможешь подключиться в любое время.
            2. Сергей Росоловский 05 ноября 2013, 21:23 # 0
              Ммм, я люблю как защиту от спама в формах FormIt ставить хук math, но с AjaxForm этот хук не работает. По крайней мере у мене не работает. Я не ошибся, действительно он не работает?
              1. Василий Наумкин 05 ноября 2013, 21:34 # 0
                Не знаю, что это.
                  1. Василий Наумкин 06 ноября 2013, 08:09 # 0
                    Теперь работает, обновляйся.
                    1. Сергей Росоловский 06 ноября 2013, 12:37 # 0
                      Обновился, работает, спасибо.
              2. Александр Котлов 05 ноября 2013, 22:46 # 0
                C подачи Василия сделал наконец заготовку штуки (горомко сказано про 3 строки кода))) которой очень не хватало когда используешь минишоп как каталог — чтобы сообщения через форму на сайте отправленые в виде сообщений менеджеру админку складывались.

                Если кому интересно то там пара строчек в снипете. С точки зрения безопасности это ад, сейчас буду допиливать всякие защиты от инъекций
                $msg = $modx->newObject('modUserMessage');
                $msg->fromArray(array(
                	'sender' => 1,
                	'recipient' => 1,
                	'message' => $_POST['message'].$_POST['phone'],
                	'subject' => $_POST['subject'],
                	'read' => 0,
                	'private' => 1,
                	'date_sent'=> strftime('%Y-%m-%d %T'),
                ));
                $msg->save();
                return $AjaxForm->success('Сообщение отправлено');
                Вот.
                1. Александр Котлов 05 ноября 2013, 23:03 # 0
                  Код почти полностью скопипасчен из статьи на хабре которая тоже может кому интересна будет.
                2. Алексей Попов 13 ноября 2013, 12:46 # 0
                  Добрый день! Есть небольшая неприятность: появляется сообщение «Не указан ключ формы (action)»
                  При этом форма обрабатывается верно, письмо отсылается.
                  Подскажите, куда копать, что проверить?
                  1. Володя 13 ноября 2013, 13:42 # 0
                    да я тоже решил попробовать этот пакет и столкнулся с такой же ошибкой как у тебя.
                    хотя af_action не пустой file.modx.pro/files/e/6/0/e6019506b488bb34aef0d456ffd1a8af.png

                    попробовал на тестовом — все зашибись!
                    Возможно с сессией что то не так на серваке? Василий подскажи как проверить?
                    1. Володя 13 ноября 2013, 13:54 # 0
                      все это дело пробую на поддомене — может в нем загвоздка?
                      ну тестовый тоже поддомен и все пашет, значит дело не в нем.
                    2. Василий Наумкин 13 ноября 2013, 13:58 # 0
                      А ты старую форму убрал со страницы?

                      Может у тебя их там две отправляется, одна правильно, а вторая нет?
                      1. Алексей Попов 13 ноября 2013, 14:11 # 0
                        Форма одна точно.
                        Скрипты разве что иначе вызываются, через minifyx.
                        UPD: ну, собственно в этом и была проблема, js дважды на странице выводился, прессованный и обычный от компонента…
                        Спасибо!
                        1. Василий Наумкин 13 ноября 2013, 19:41 # 0
                          На здоровье!
                        2. Володя 13 ноября 2013, 14:15 # 0
                          конечно убрал. Повторил один в один на твоем тестовом стенде, все сразу заработало.
                          А на моем сервере — не хочет…
                          1. Володя 13 ноября 2013, 19:32 # 0
                            неправильно права были проставлены на session.save_path — в этом и была загвоздка.
                            теперь все ок!
                            1. Василий Наумкин 13 ноября 2013, 19:41 # 0
                              Ну и чудненько.
                      2. Michael Marwell 19 ноября 2013, 14:19 # +1
                        Спасибо за ваш труд, но есть неприятный момент, не работает проверка reCAPTCHA.

                        При обычной обработке Formit'om отдаётся ошибка, если поле каптчи не заполнено/заполнено не верно, а если использовать ваше дополнение происходит игнорирование обязательного заполнения этого поля и письмо отправляется на почту.
                        Пробовал разные варианты, ничего не получилось. Как их связать чтобы всё работало?
                        1. Василий Наумкин 19 ноября 2013, 14:22 # 0
                          Не знаю.

                          Я капчу не люблю и нигде не использую.
                          1. Prihod 22 июня 2014, 13:36 # 0
                            hi, для того что бы заработала reCAPTCHA нужно пофиксить функцию handleFormIt
                            в файле ajaxform.class.php, а именно добавить вот этот код
                            if(!empty($this->modx->placeholders[$plPrefix.'error.recaptcha'])) {
                               $errors['recaptcha'] = $this->modx->placeholders[$plPrefix.'error.recaptcha'];
                            }

                            Моя функция выглядит так Ж

                            public function handleFormIt(array $scriptProperties = array()) {
                                    $plPrefix = isset($scriptProperties['placeholderPrefix'])
                                        ? $scriptProperties['placeholderPrefix']
                                        : 'fi.';
                             
                                    $errors = array();
                                    foreach ($scriptProperties['fields'] as $k => $v) {
                                        if (isset($this->modx->placeholders[$plPrefix.'error.'.$k])) {
                                            $errors[$k] = $this->modx->placeholders[$plPrefix.'error.'.$k];
                                        }
                                    }
                             
                                    if(!empty($this->modx->placeholders[$plPrefix.'error.recaptcha'])) {
                                        $errors['recaptcha'] = $this->modx->placeholders[$plPrefix.'error.recaptcha'];
                                    }
                             
                                    if (!empty($errors)) {
                                        $message = !empty($this->modx->placeholders[$plPrefix.'validation_error_message'])
                                            ? $this->modx->placeholders[$plPrefix.'validation_error_message']
                                            : 'af_err_has_errors';
                                        $status = 'error';
                                    }
                                    else {
                                        $message = isset($this->modx->placeholders[$plPrefix.'successMessage'])
                                            ? $this->modx->placeholders[$plPrefix.'successMessage']
                                            : 'af_success_submit';
                                        $status = 'success';
                                    }
                             
                                    return $this->$status($message, $errors);
                                }
                            1. Василий Наумкин 23 июня 2014, 14:11 # 0
                              Выглядит полезео, оформляй github.com/bezumkin/ajaxform/issues/new
                              1. Алфёров Юрий 22 декабря 2014, 17:55 # 0
                                что то ещё нужно добавить? у меня капча постоянно выдаёт: Это поле обязательно для заполнения.
                            2. Dmitry Rodionov 25 ноября 2013, 10:37 # 0
                              Есть механизм для подсветки/определения полей в которых ошибка?
                              1. Василий Наумкин 25 ноября 2013, 11:15 # 0
                                Заметку не пробовал почитать?
                                1. Dmitry Rodionov 25 ноября 2013, 13:25 # 0
                                  я именно об выделении поля, а не о блоке error_имяполя, можно ли к полю добавлять к примеру какой-то класс если в нем ошибка, который можно переопределять, так на мой взгляд логичнее будет
                                  1. Володя 25 ноября 2013, 17:45 # 0
                                    не знаю, правильно ли. Но можно добавить в дефолтный js
                                    после
                                    form.find('.error_' + key).html(value);	
                                    form.find('.error_' + key).addClass('error');
                                    и будет подставляться класс
                              2. Дарья Брандина 01 декабря 2013, 15:33 # 0
                                Василий, здравствуйте! Установила AjaxForm, переделала по инструкции существующую рабочую форму FormIt:
                                заменила [[!FormIt? на [[!AjaxForm? &snippet=`FormIt` &form=`tpl.AjaxForm` и, соответственно, перенесла html-код формы в чанк tpl.AjaxForm. Но почему-то перестали приходить уведомления мне на почту. Форма обернута следующим образом:

                                <form id="contact-form" method="post" class="ajax_form form-horizontal" role="form" action="[[~[[*id]]]]">...</form>
                                может нужно что-то другое прописать в action или method?

                                Помогите, пожалуйста, разобраться.
                                1. Дарья Брандина 01 декабря 2013, 15:44 # 0
                                  P.S. Нужно ли кроме установки пакета AjaxForm и изменения вызова сниппета вставлять в head скрипты или что-то еще делать?
                                  1. Дарья Брандина 01 декабря 2013, 16:17 # 0
                                    Вот так я вызываю сниппет:
                                    [[!AjaxForm?
                                    	&snippet=`FormIt`
                                    	&form=`tpl.AjaxForm`
                                    	&emailTpl=`tpl.MailToAdmin`
                                    	&emailTo=`address@gmail.com`
                                    	&hooks=`spam,email,math`
                                    	&submitVar=`submit`
                                    	&emailSubject=`Тестовое сообщение`
                                    	&validate=`name:required,email:required,message:required,nerobotostavitblank:blank`
                                    	&successMessage=`Ваша сообщение успешно отправлено.`
                                        &mathMinRange=`1`
                                        &mathMaxRange=`10`
                                    ]]
                                    Содержимое сниппета tpl.AjaxForm:

                                    <span>[[+fi.successMessage]]</span>
                                    <form id="contact-form" method="post" class="ajax_form form-horizontal" role="form" action="[[~[[*id]]]]">
                                    	<fieldset>
                                    		<input type="hidden" name="nerobotostavitblank" value="" />
                                    		<legend>Оставьте заявку</legend>
                                    		<div class="form-group">
                                    			<label for="name" class="col-lg-3 control-label">Имя</label>
                                    			<div class="col-lg-9">
                                    			  <input type="name" id="name" name="name" value="[[!+fi.name]]" class="form-control" placeholder="Имя" reqiured />
                                    			</div>
                                    		</div>
                                    		<div class="form-group">
                                    			<label for="phone" class="col-lg-3 control-label">Телефон</label>
                                    			<div class="col-lg-9">
                                    			  <input type="text" id="phone" name="phone" value="[[!+fi.phone]]" class="form-control" placeholder="Телефон" required pattern="\s*(?:\+\d{1,2}|\d)?\s*(?:\(\s*\d{3}\s*\)\s*|\-?\d{3}(?:\-|\s)?)?\d{3}(?:\-|\s)?\d{2}(?:\-|\s)?\d{2}\s*" />
                                    			</div>
                                    		</div>
                                    		<div class="form-group">
                                    			<label for="e-mail" class="col-lg-3 control-label">Email</label>
                                    			<div class="col-lg-9">
                                    			  <input type="email" id="e-mail" name="e-mail" value="[[!+fi.e-mail]]" class="form-control" placeholder="Email" required />
                                    			</div>
                                    		</div>
                                    		
                                    		<div class="form-group">
                                    			<label for="message" class="col-lg-3 control-label">Сообщение</label>
                                    			<div class="col-lg-9">
                                    			  <textarea id="message" name="message" class="form-control" placeholder="Сообщение" rows="3">[[!+fi.message]]</textarea>
                                    			</div>
                                    		</div>
                                    		[[$math]]
                                    		<div class="form-group">
                                    			<div class="col-lg-offset-3 col-lg-9">
                                    				<button type="submit" class="btn btn-primary" name="submit">Отправить</button>
                                    				<button type="reset" class="btn btn-default">Отмена</button>
                                    			</div>
                                    		</div>
                                    	</fieldset>
                                    </form>
                                    1. Дарья Брандина 03 декабря 2013, 11:28 # 0
                                      Проблема решена: удалила параметр &submitVar и все заработало!
                                  2. Kirill Bedin 03 декабря 2013, 12:13 # 0
                                    А можно как-то безболезненно jGrowl отключить и fi.SuccessMessage выводить прямо в форму?
                                    1. Василий Наумкин 04 декабря 2013, 00:15 # 0
                                      Можно.

                                      Используй параметр &frontend_js=``.
                                      1. Kirill Bedin 04 декабря 2013, 09:17 # 0
                                        C &frontend_js=`` и Аякс не работает. Решил проблему правкой default.js и сохранением его как custom.js. Ну и соответственно:
                                        &frontend_js=`[[+assetsUrl]]js/custom.js`
                                        1. Владимир Тельнов 26 мая 2014, 00:52 # 0
                                          Поделитесь пожалуйста способом.
                                    2. Владимир Ребров 04 декабря 2013, 00:14 # 0
                                      Использовал уже на 3-х сайтах — было все ОК. На четвертом — тоже, пока не перенес на reg.ru. После этого при отправке формы получаю
                                      Failed to load resource: the server responded with a status of 500 (Internal Server Error) isystemcomp.ru/assets/components/ajaxform/action.php
                                      Причем эта ошибка иногда сменятеся этой
                                      POST isystemcomp.ru/assets/components/ajaxform/action.php 500 (Internal Server Error) jquery.js:8706
                                      1. Василий Наумкин 04 декабря 2013, 00:15 # 0
                                        И?

                                        Я то как тебе должен с хостингом помочь?
                                        1. Владимир Ребров 04 декабря 2013, 00:16 # 0
                                          Нет, конечно. Просто возможно ты знаешь в чем может быть проблема. Может кто-то уже сталкивался с этим.
                                          1. Василий Наумкин 04 декабря 2013, 00:17 # 0
                                            Об этом лучше почитать в логах сервера. Он же не зря пишет Internal Server Error.
                                            1. Владимир Ребров 04 декабря 2013, 15:12 # 0
                                              Сервер пишет:
                                              [error] mod_fcgid: process /var/www/u7547931/php-bin/php(12535) exit(communication error), get unexpected signal 11
                                              Если честно, мне это ни о чем не говорит)
                                              1. Василий Наумкин 04 декабря 2013, 16:08 # 0
                                                Мне тоже, тут просто написано, что ошибка.

                                                Видимо особенность твоего хостинга.
                                                1. Владимир Ребров 04 декабря 2013, 16:37 # 0
                                                  Ок, спасибо. Написал в техподдержку.
                                                  1. Дарья Брандина 22 декабря 2013, 11:59 # 0
                                                    Владимир, ну и как, тех.поддержка помогла? Просто у меня после переноса на новый хостинг ровно та же проблема…
                                              2. Дарья Брандина 24 декабря 2013, 10:33 # 0
                                                Василий, а вот у меня все никак не разрешится эта проблема, тех.поддержка как-то очень не спешит помогать....((

                                                Ошибка (в консоли) та же, что описана выше:
                                                Failed to load resource: the server responded with a status of 500 (Internal Server Error) www.limo-world.webtm.ru/assets/components/ajaxform/action.php

                                                В логах сервера написано:
                                                PHP Fatal error: Cannot use object of type AjaxForm as array in /home/s/sidarvik/limo-world/public_html/core/components/ajaxform/model/ajaxform/ajaxform.class.php on line 110, referer: www.limo-world.webtm.ru/limo-order

                                                Подскажите, хотя бы, кто должен решать эту проблему: я или тех. поддержка хостинга?
                                                1. Дарья Брандина 24 декабря 2013, 10:40 # 0
                                                  Кстати, тех. поддержка только что ответила, что мне «следует уточнить причину появления ошибки у разработчика сайта или CMS, установленной на сайте. Работа с пользовательским кодом выходит за рамки услуг, предоставляемых технической поддержкой.»

                                                  Василий, помогите, пожалуйста!
                                                  1. Василий Наумкин 24 декабря 2013, 10:43 # 0
                                                    На строке 110 вот это:
                                                    if (!isset($_SESSION['AjaxForm'][$action])) {

                                                    Объект AjaxForm никак не может попасть в сессию, если только на сервере не включены глобальные переменные, или еще какая гадость.

                                                    Проверяй в phpinfo() наличие register_globals On и если есть — нужно выключить.
                                                    1. Дарья Брандина 24 декабря 2013, 11:37 # 0
                                                      Да, стоит register_globals On. Как это можно отключить? Т.е. нужно в тех.поддержку писать или я сама могу это сделать?
                                                      1. Василий Наумкин 24 декабря 2013, 11:42 # 0
                                                        Я бы на твоем месте отыгрался на борзой поддержке.

                                                        Спроси у этих товарищей, зачем они включили эту опцию, если она отключена по умолчанию аж с PHP 4.2?

                                                        А с версии 5.3 она помечена устаревшей, а в PHP 5.4 её вообще удалили. Вот документация.

                                                        То есть, сервер сконфигурирован очень странно, как минимум. А как максимум — это огромное поле для взлома и поиска уязвимостей.
                                                        1. Дарья Брандина 24 декабря 2013, 12:15 # +1
                                                          Василий, спасибо за совет! Тех. поддержка пишет, что я могу отключить эту опцию в .htaccess
                                                          php_flag register_globals off
                                                          Я так и сделала, и теперь AjaxForm работает.

                                                          Почему у них такие настройки, спрошу.
                                          2. Никита Пономарев 06 декабря 2013, 17:19 # 0
                                            Здавствуйте. А возможно ли использовать с этим компонентом QuipReply?
                                            При запросе выдает Internal server error.
                                            1. Василий Наумкин 06 декабря 2013, 19:11 # 0
                                              Понятия не имею.

                                              В заметке выше написано, как должен работать используемый сниппет.
                                            2. Рустам Алимов 14 декабря 2013, 22:29 # 0
                                              Василий, добрый день, вызываю Ваше творение 2 раза на странице. При заполнении 1 из форм и отправки на почту приходит 2 письма с одинаковым содержимым. Погуглив нашел параметр сниппета formit submitVar вроде как он должен решать проблему. Пробывал его вешать на AjaxFormit но мои наивные намерения не к чему не привели.

                                              Подскажите хоть куда думать?

                                              Пробывал копировать формит создав второй сниппет а в параметрах второго указывать submitVar но тоже ничего не работает.
                                              1. Михаил 15 января 2014, 04:40 # 0
                                                Здравствуйте снова :)) В общем рапортую об ошибке, похоже на этот камент.

                                                В общем страничка пуста, только форма и то что аяксформ добавляет.
                                                То есть пересечения с другими формами или скриптами нет.

                                                Форма стандартная, вызов такой
                                                [[!AjaxForm?
                                                	&snippet=`FormIt`
                                                	&form=`tpl.AjaxForm.example`
                                                	&hooks=`email`
                                                	&emailSubject=`Тестовое сообщение`
                                                	&emailTo=`bogdamir@gmail.com`
                                                	&validationErrorMessage=`В форме содержатся ошибки!`
                                                	&successMessage=`Сообщение успешно отправлено`
                                                ]]
                                                action.php возвращает такую ошибку
                                                Fatal error: Cannot use object of type AjaxForm as array in /home2/miho/sites/mebelbk.ru/core/components/ajaxform/model/ajaxform/ajaxform.class.php on line 110
                                                Fatal error: Exception thrown without a stack frame in Unknown on line 0
                                                Однако хостинг не мой, и править в настройках session.save_path не даёт.
                                                Что можно с этим сделать?
                                                1. Михаил 15 января 2014, 04:52 # 0
                                                  Хотя phpinfo выводит

                                                  Может и не в этом дело.
                                                  1. Михаил 15 января 2014, 05:06 # 0
                                                    А ну да, нашёл что надо выключить php_flag register_globals
                                                    Буду пытать саппорт, спасибо.
                                                  2. Михаил 15 января 2014, 05:11 # 0
                                                    Да всё заработало! Думаю про register_globals стоит добавить в описание.
                                                    1. Василий Наумкин 15 января 2014, 08:03 # 0
                                                      Тебя про него даже админка должна предупреждать.
                                                    2. Юрий 16 февраля 2014, 19:50 # 0
                                                      Василий, подскажите, можно ли использовать несколько вызовов AjaxForm на странице.
                                                      1. Василий Наумкин 16 февраля 2014, 20:08 # 0
                                                        Можно.
                                                        1. Юрий 16 февраля 2014, 22:30 # 0
                                                          Вызов одной формы:
                                                          Если убрать &submitVar=`submitform1` — то работает только одна форма, если нет, по выскакивает сообщение «сообщение отправлено», не зависимо от того заполнена форма или нет
                                                          [[!AjaxForm?
                                                          	&snippet=`FormIt`
                                                          	&submitVar=`submitform1`
                                                          	&placeholderPrefix=`f1`
                                                          	&form=`tpl.Form.page1`
                                                          	&hooks=`email`
                                                          	&emailSubject=`Сообщение с страницы 1 - форма 1`
                                                          	&emailTo=`мой email`
                                                          	&validate=`name:required,email:required,phone:required`
                                                          	&validationErrorMessage=`В форме содержатся ошибки!`
                                                          	&successMessage=`Ваше сообщение успешно отправлено`
                                                              ]] 
                                                          
                                                          Шаблон:

                                                          <form role="form" method="post" class="ajax_form">
                                                            <div class="col-md-12 col-lg-12 col col-xs-12">
                                                              <label for="af_name">Ваше имя</label>
                                                              <input type="text" class="form-control input-sm" name="name" id="af_name1" placeholder="Ваше имя" value="[[+f1.name]]">
                                                              <span class="error error_name">[[+f1.error.name]]</span> </div>
                                                            <div class="col-md-12 col-lg-12 col-xs-12">
                                                              <label for="af_phone">Телефон</label>
                                                              <input type="tel" class="form-control input-sm" id="af_phone1" placeholder="Телефон" name="phone" value="[[+f1.phone]]">
                                                              <span class="error error_name">[[+f1.error.phone]]</span> </div>
                                                            <div class="col-md-12 col-lg-12 col-xs-12">
                                                              <label for="af_email">Email</label>
                                                              <input type="email" class="form-control input-sm" id="af_email1" placeholder="Email"  name="email" value="[[+f1.email]]">
                                                              <span class="error error_name">[[+f1.error.email]]</span> </div>
                                                            <div class="col-md-12 col-lg-12 col-xs-12">
                                                              <button type="submit" class="btn btn-danger btn-sm marg-t-10 btn-block"  name="submitform1">Заказать</button>
                                                              <span class="help-block text-center"><small>Мы <a href="#"  data-toggle="modal" data-target="#terms">бережем</a> Вашу конфидециальность</small></span> </div>
                                                            [[+f1.success:is=`1`:then=`<div class="alert alert-success">[[+f1.successMessage]]</div>`]]
                                                            [[+f1.validation_error:is=`1`:then=`<div class="alert alert-danger">[[+f1.validation_error_message]]</div>`]]
                                                          </form>
                                                          
                                                          1. Василий Наумкин 17 февраля 2014, 03:04 # 0
                                                            А если не использовать ajaxForm — работает?
                                                      2. Vasiliy Vronsky 21 февраля 2014, 01:03 # 0
                                                        Василий, не подскажете, каким образом отловить «callback» при успешной/не успешной отправке формы?
                                                        Заранее благодарю!
                                                        1. Evgeny Epifanov 03 марта 2014, 01:45 # 0
                                                          Подскажите пожалуйста, как как повесить выполнение этого запроса:
                                                          $('#myModal').modal('hide')
                                                          на событие «Форма отправлена»?
                                                          1. Любовь 20 марта 2014, 13:53 # 0
                                                            Удалось ли решить вопрос?
                                                            1. Evgeny Epifanov 20 марта 2014, 17:41 # 0
                                                              Да, проблему решил, правда немного не правильно. Главное работает.
                                                              Прописал непосредственно в default.js AjaxForm, а это значит, что после обновления все это затрется. Я не силен в программировании, поэтому пока так))
                                                              Файл: assets/components/ajaxform/js/default.js
                                                              строка 38:
                                                              else {
                                                              	AjaxForm.Message.success(response.message);
                                                              	form[0].reset();
                                                              	/* сюда и пишем то, что нужно при успешной отправке */
                                                              	$('#callBack').modal('hide');
                                                              }
                                                              
                                                              1. Володя 20 марта 2014, 17:51 # 0
                                                                это не по феншую… )
                                                                Ждем Василия, он то знает как колбэк ловить…
                                                                p.s. Сам так же делаю…
                                                                чтоб не затерлось скопируй default.js переименуй и в него вноси изменения. А подключить в сниппете ajaxform — joxi.ru/vfIqUxjKTJAbMBgJUvI
                                                                1. Evgeny Epifanov 20 марта 2014, 17:59 # 0
                                                                  Это я в курсе, спасибо. В том и дело, что хочется «по феншую»
                                                                  1. Василий Наумкин 20 марта 2014, 18:33 # 0
                                                                    Поменять default.js вполне нормально — для того и есть опция у сниппета.

                                                                    А колбеков в стандартном скрипте нет, и добавить руки не доходят.
                                                                    1. Володя 20 марта 2014, 19:07 # 0
                                                                      Эвона как… а я уже полчаса на код смотрю и думаю где же тут колбек)))
                                                            2. Андрей KaSeo 19 марта 2014, 23:19 # 0
                                                              Здравствуйте, Васиилий.
                                                              Неоднократно пользовался Вашими разработками. Спасибо Вам за ваши труды! Также постоянно использую на сайтах сниппет AjaxForm.
                                                              При очередном внедрении на сайт возникла проблема: при нажатии на кнопку «Отправить», поля блокируются и на этом все — никаких сообщений или уведомлений не всплывает, в логи ничего не попадает (правильно, запрос же не отправился) Использовал стандартные параметры сниппета.
                                                              Пробовал на двух сайтах, которые находятся на одном хостинге. Если использовать просто FormIt, то все норм.
                                                              Вот скрин — форма после нажатия накнопку «Отправить» i.imgur.com/aycEXNG.png
                                                              — Прошу прощения за бессмысленный комментарий. Проблема решилась, выключив register_globals
                                                              1. Василий Наумкин 19 марта 2014, 23:36 # 0
                                                                Ура!
                                                              2. Алина 26 марта 2014, 21:44 # 0
                                                                Добрый вечер!

                                                                На сайте несколько форм обратной связи, работают через сниппеты FORMit и AjaxForm.
                                                                не знаю как решить такую задачу:
                                                                Пользователь отправил сообщение. при успешной оправки письма — надо получить данные из массива POST и дальше должен работать мой сниппет (на основании заполненных данных формы)

                                                                Без ajax это решалось бы просто. — проверила бы данный с POSTа.
                                                                Как бы и здесь тоже самое надо сделать… да? только вот не могу понять, где делать эту проверку…
                                                                Можете подсказать где это делать? или как это делать?
                                                                1. Володя 26 марта 2014, 21:47 # 0
                                                                  самое начало поста…
                                                                  Простейший пример своего сниппета:
                                                                  if (empty($_POST['name'])) {
                                                                  	return $AjaxForm->error('Ошибки в форме', array('name' => 'Вы не заполнили имя'));
                                                                  }
                                                                  else {
                                                                  	return $AjaxForm->success('Форма прошла проверку');
                                                                  }
                                                                  Вызываем так:
                                                                  [[!AjaxSubmit?
                                                                  	&snippet=`MySnippet`
                                                                  	&form=`tpl.AjaxForm.example`
                                                                  ]]
                                                                  1. Алина 26 марта 2014, 21:55 # 0
                                                                    смотрела я на этот пример…
                                                                    возможно это глупые и элементарное не знание…
                                                                    но, вот не понимаю:
                                                                    — [[!AjaxSubmit? почему так? откуда «AjaxSubmit», разве не «AjaxForm»?
                                                                    — &snippet=`MySnippet` а куда девается &snippet=`FormIt`???

                                                                    как это работает?
                                                                2. Вадим Раевский 27 марта 2014, 12:17 # 0
                                                                  Добрый день!

                                                                  Нашел интересную особенность работы сниппета. В шаблоне e-mail невозможно подставить значения, например, [[*pagetitle]] или [[*tv.]] Они не передаются. Обычный FormIT и, например, их обрабатывают без проблем.

                                                                  Как с этим бороться?

                                                                  1. Володя 27 марта 2014, 12:26 # 0
                                                                    что за шаблон email?
                                                                    1. Василий Наумкин 27 марта 2014, 12:37 # +1
                                                                      Если нужно что-то передать из текущего документа — нужно создать скрытые инпуты и вставить туда плейсхолдеры. Ну а потом уже подставлять их в письме, как и всё остальное.
                                                                      1. Вадим Раевский 27 марта 2014, 13:24 # 0
                                                                        Спасибо.
                                                                    2. Игорь Захаров 02 апреля 2014, 08:42 # 0
                                                                      Добрый день. Столкнулся с проблемой. На сайте есть несколько форм обратной связи в модальных окнах. решил воспользоваться компонентом AjaxForm.

                                                                      Две формы прекрасно работают, а вот третья никак не хочет отправлять данные (нетворк показывает что запрос на сервер не уходит). Ошибку свою к сожалению не могу найти.

                                                                      Вот так выглядит вызов компонента:

                                                                      [[!AjaxForm?
                                                                      			&snippet=`FormIt`
                                                                      			&form=`form-3`
                                                                      			&hooks=`email`
                                                                      			&emailSubject=`Запись на ТО`
                                                                      			&emailTo=`[[++email]]`
                                                                      			&validate=`name:required,email:required,phone:required,message:required`
                                                                      			&validationErrorMessage=`Вы заполнили не все поля!`
                                                                      			&successMessage=`Сообщение успешно отправлено`
                                                                      
                                                                      ]]
                                                                      А вот так сама форма:

                                                                      <form method="post">
                                                                      <p><span>Ваше имя:</span> 
                                                                      <input type="text" name="name" value="[[+fi.name]]"></p>
                                                                      
                                                                      <p><span>Ваш email:</span> 
                                                                      <input type="text" name="email" value="[[+fi.email]]"></p>
                                                                      
                                                                      <p><span>Вопрос:</span> 
                                                                      <textarea name="message" cols="60" rows="3">[[+fi.message]]</textarea></p>
                                                                      
                                                                      <button class="submit">[[%af_submit]]</button>
                                                                      
                                                                      
                                                                      [[+fi.success:is=`1`:then=`
                                                                      	<div class="alert alert-success">[[+fi.successMessage]]</div>
                                                                      `]]
                                                                      [[+fi.validation_error:is=`1`:then=`
                                                                      	<div class="alert alert-danger">[[+fi.validation_error_message]]</div>
                                                                      `]]
                                                                      </form>
                                                                      Прошу помощи =) За ранее большое спасибо)
                                                                      1. Пётр Молчанов 04 апреля 2014, 10:42 # 0
                                                                        &emailTo=`[[++email]]`
                                                                        напиши сюда своё мыло и проверь, мне кажется ошибка тут
                                                                      2. Nick Solver 04 апреля 2014, 09:24 # 0
                                                                        К сожалению что я не делал — не работает отправка. Точнее отправка работает, но письмо не приходит. FormIt отправляет нормальной(
                                                                        1. Татьяна Фадеева 07 апреля 2014, 17:55 # 0
                                                                          Василий, а ваш компонент делает redirect, как FormIt? У меня форма остается и никуда не переходит.
                                                                          1. Василий Наумкин 07 апреля 2014, 17:56 # 0
                                                                            AjaxForm нужен, чтобы отправлять форму без перезагрузки страницы.

                                                                            Так что нет, редиректов он не делает.
                                                                            1. Татьяна Фадеева 08 апреля 2014, 10:26 # 0
                                                                              Спасибо за ответ)
                                                                          2. Егор 30 апреля 2014, 21:01 # 0
                                                                            Добрый день.
                                                                            Имею сайт, на котом реализована мультиязычность по средствам Babel. Три языка. На одной из страниц присутствует форма отправки «Online бронирование», чтобы для каждого языка была своя форма, был написан небольшой сниппет, который в зависимости от context- а, подставляет на страницу форму. Код сниппита следующий:
                                                                            if($modx->context->get('key') !== "mgr"){
                                                                            	$cntx = $modx->context->get('key');
                                                                            		switch($cntx){
                                                                                            case 'web':
                                                                                            	$translateLogo = $modx->getChunk('forma-ru');
                                                                                            	break;
                                                                                            case 'en':
                                                                                            	$translateLogo = $modx->getChunk('forma-en');
                                                                                            	break;
                                                                                		case 'de':
                                                                                            	$translateLogo = $modx->getChunk('forma-en');
                                                                                            	break;
                                                                                    }
                                                                            		return $translateLogo;
                                                                            }
                                                                            else    {	return 1; }
                                                                            
                                                                            Этот сниппет вызывается в чанке(Сhoice-of-form), который прописывается в ajaxform, вызов получается следующий:
                                                                            [[!AjaxForm?
                                                                            	&snippet=`FormIt`
                                                                            	&form=`Сhoice-of-form`
                                                                            	&hooks=`email`
                                                                            	&emailTpl=`tpl.sentEmail`
                                                                            	&emailSubject=`Online бронирование`
                                                                            	&emailTo=`name@gmail.com`
                                                                            	&emailCC=``
                                                                            	&validationErrorMessage=`В форме содержатся ошибки!`
                                                                            	&successMessage=`Сообщение успешно отправлено`
                                                                            	&validate=`company:required,
                                                                            			name:required,
                                                                            			mail:required,
                                                                            			phone:required,
                                                                            			subject_event:required,
                                                                            			number_of_participants:required`
                                                                            	]]
                                                                            В результате я получаю ошибку «Не указан ключ формы (action).», а если вставить вместо Сhoice-of-form сразу чанк с формой forma-ru, работает отлично. Может подскажете, как возможно решить такую задачу и почему происходит ошибка?
                                                                            1. Егор 30 апреля 2014, 21:53 # 0
                                                                              Покумекав все-таки вопрос решился.
                                                                            2. Vasiliy Vronsky 30 апреля 2014, 21:02 # 0
                                                                              Василий, возникла следующая проблема:
                                                                              На одной странице находятся 2 формы (2 вызова AjaxForm в одном шаблоне), одна из которых в модальном окне, другая в тексте документа. Возникла необходимость сделать разные JS скрипты для каждой из них, методом разных
                                                                              &frontend_js=`***`
                                                                              проблему решить не удалось, тянет JS из первой вызванной. Подскажите что сделать? Спасибо!
                                                                              1. Василий Наумкин 30 апреля 2014, 22:01 # 0
                                                                                Пропиши js для двух форм в одном скрипте, или подключи 2 скрипта в шаблоне страницы.

                                                                                Необязательно же регистрировать js через сниппет.
                                                                              2. Павел Гилевский 03 мая 2014, 21:22 # 0
                                                                                Помогите, плз.
                                                                                форма данные отправляет, но с перегрузкой страницы. т.е. Ajax не срабатывает. Что делаю не так?

                                                                                чанк с формой
                                                                                [[+fi.success:is=`1`:then=`
                                                                                	<div class="alert alert-success">[[+fi.successMessage]]</div>
                                                                                `]]
                                                                                [[+fi.validation_error:is=`1`:then=`
                                                                                	<div class="alert alert-danger">[[+fi.validation_error_message]]</div>
                                                                                `]]
                                                                                <form method="post" action="" id="contactform">
                                                                                   <fieldset>
                                                                                         <label>Имя\Компания*</label>
                                                                                         <input type="text" name="contact_name" class="textfield" id="name" value="" />
                                                                                         [[!+fi.error.contact_name]]
                                                                                        
                                                                                         <div class="clear"></div>
                                                                                         <label>Телефон</label>
                                                                                         <input type="text" name="contact_phone_NA_format" class="textfield" id="subject" value="" />
                                                                                         [[!+fi.error.contact_phone_NA_format]]
                                                                                         <div class="clear"></div>
                                                                                         <label>E-mail*</label>
                                                                                         <input type="text" name="contact_email" class="textfield" id="email" value="" />
                                                                                        [[!+fi.error.contact_email]]
                                                                                         <div class="clear"></div>
                                                                                         <label>Сообщение:</label>
                                                                                         <textarea name="contact_message" id="message" class="textarea" cols="2" rows="4"></textarea>
                                                                                         <div class="clear"></div>
                                                                                	 [[+qaptcha.Slider]]
                                                                                	 
                                                                                	 <input style="float:left;margin-top:15px"  href="#spasibo" type="submit" name="submit" class="buttoncontact" value="Отправить заявку" />
                                                                                	 <div class="clear"></div>
                                                                                   </fieldset>
                                                                                </form>
                                                                                и вызов:
                                                                                [[!AjaxForm?
                                                                                	&snippet=`FormIt`
                                                                                	&form=`form`
                                                                                	&hooks=`email`
                                                                                	&emailSubject=`Форма обратной связи с сайта [[GetField? &id=`4` &field=`introtext`]]`
                                                                                	&emailTo=`[[GetField? &id=`28` &field=`introtext`]]`
                                                                                	&validate=`contact_name:required,contact_email:email:required`
                                                                                	&validationErrorMessage=`В форме содержатся ошибки!`
                                                                                	&successMessage=`Сообщение успешно отправлено =)`
                                                                                ]]   
                                                                                заранее ОГРОМНОЕ спасибо!
                                                                                1. Павел Гилевский 03 мая 2014, 23:16 # 0
                                                                                  если дописываю class ajax_form то перестают отправляться письма.
                                                                                  блокируются все поля формы и никаких сообщений не выдает.
                                                                                  1. Евгений Довгань 09 мая 2014, 09:23 # 0
                                                                                    Тоже самое, работает с перегрузкой

                                                                                    [[!AjaxForm?
                                                                                    	               &snippet=`FormIt`
                                                                                    	               &form=`formit.tpl`
                                                                                    	               &emailTpl=`formitmail.tpl`
                                                                                    	               &hooks=`email`
                                                                                    	               &emailSubject=`Сообщение с сайта`
                                                                                    	               &emailTo=`info@gmail.com`
                                                                                    	               &successMessage=`Вашe сообщение успешно отправлено.`
                                                                                    	               &validate=`email:blank`
                                                                                    	               ]]


                                                                                    [[+fi.success:is=`1`:then=`
                                                                                    		<div class="alert alert-success">[[+fi.successMessage]]</div>
                                                                                    	`]]
                                                                                    	[[+fi.validation_error:is=`1`:then=`
                                                                                    		<div class="alert alert-danger">[[+fi.validation_error_message]]</div>
                                                                                    	`]]
                                                                                    <form action="[[~[[*id]]]]" method="post" class="ajax_form">
                                                                                    <input type="hidden" name="email" value="" />
                                                                                    <input  type="text" id="name" name="name" value="Имя[[!+fi.name]]"   onfocus="if (this.value=='Имя') this.value='';" onblur="if (this.value==''){this.value=''}">
                                                                                    <input  type="text" id="surname" name="surname" value="Фамилия[[!+fi.surname]]" onfocus="if (this.value=='Фамилия') this.value='';" onblur="if (this.value==''){this.value=''}">
                                                                                    <textarea id="message" name="message" value="[[!+fi.message]]" onfocus="if (this.value=='Сообщение') this.value='';" onblur="if (this.value==''){this.value=''}">Сообщение</textarea>
                                                                                    <input id="btn" type="submit" value="">
                                                                                    </form>   
                                                                                    
                                                                                2. Андре Владимирович 10 мая 2014, 15:02 # 0
                                                                                  При отправки выдает ошибку: Не указан ключ формы (action). что делать?

                                                                                  [[!AjaxForm?
                                                                                  	&snippet=`FormIt`
                                                                                  	&form=`AjaxForm1`
                                                                                  	&emailTpl=`sentEmailTpl`
                                                                                  	&emailTo=`admin@yandex.ru`
                                                                                  	&hooks=`spam,email,math`
                                                                                  	&emailSubject=`Тестовое сообщение`
                                                                                  	&validate=`contact_name:required,contact_phone_NA_format:required`
                                                                                  	&successMessage=`Ваша сообщение успешно отправлено.`
                                                                                      &mathMinRange=`1`
                                                                                      &mathMaxRange=`10`
                                                                                  ]]

                                                                                  <form action="[[~[[*id]]]]" method="post" name="wsm_callback_form">
                                                                                  <table style="margin-left:-8px;" border="0"><tr><td>
                                                                                  <label for="contact_name">Имя </label><em></em><br />
                                                                                  <input id="ContactForm1_contact-form-name" name="contact_name" size="30" minlength="2" value="[[!+fi.contact_name]]" />
                                                                                  <span class="error">[[!+fi.error.contact_name]]</span>
                                                                                  </td></tr>
                                                                                  
                                                                                  
                                                                                  <tr><td>
                                                                                  <label for="contact_phone">Телефон </label><em></em><br />
                                                                                  <input id="ContactForm1_contact-form-email" name="contact_phone_NA_format" size="30" value="[[!+fi.contact_phone_NA_format]]" maxlength="14" />
                                                                                  <span class="error">[[!+fi.error.contact_phone_NA_format]]</span>
                                                                                  </td></tr>
                                                                                  <tr><td>
                                                                                  
                                                                                  </td></tr><tr><td colspan="2">
                                                                                  <br />
                                                                                  
                                                                                  <label for="contact_message">Cообщение </label><em></em><br />
                                                                                  <textarea id="ContactForm1_contact-form-text-message" name="contact_message" cols="24" rows="7">[[!+fi.contact_message]]</textarea>
                                                                                  <span class="error">[[!+fi.error.contact_message]]</span>
                                                                                  
                                                                                  <div style="float:left;">
                                                                                  <input name="submit" type="submit" value="Submit"/>
                                                                                  </div>
                                                                                  </td></tr>
                                                                                  </table>
                                                                                  </form>
                                                                                  1. Алексей Марченко 10 мая 2014, 21:36 # 0
                                                                                    Все тут верно, возможно дело в скриптах! Посмотри какие скрипты подключаются…!
                                                                                  2. Алексей 22 мая 2014, 11:17 # 0
                                                                                    Интересно, formit прекрасно работает с
                                                                                    <form enctype="multipart/form-data"><input type="file" name="file[]" multiple></form>
                                                                                    загрузкой файлов через форму. Возможно ли реализовать загрузку файлов через ajaxForm?
                                                                                    1. Алексей 22 мая 2014, 17:22 # 0
                                                                                      Оказалось это проблема хука email в formit. Будет время на днях отправлю им пулл-регвэст
                                                                                      Отдельный файл отправляет без проблем, а если указать у тэга input:
                                                                                      name="file[]" multiple
                                                                                      — ничего не отправляет.
                                                                                      1. Василий Наумкин 22 мая 2014, 19:19 # 0
                                                                                        Отправь, конечно — не лишним будет.
                                                                                        1. Алексей 31 мая 2014, 15:26 # 0
                                                                                          Я как понял в github'е какое-то лютое кэширование, так что изменения доходят долго…
                                                                                          1. Василий Наумкин 31 мая 2014, 16:06 # 0
                                                                                            Автор дополнения должен их принять и выпустить новую версию. FormIt обновляется очень редко.
                                                                                    2. Евгений 17 июня 2014, 17:07 # 0
                                                                                      Не могу понять, почему не «прилетает» дополнительный параметр.

                                                                                      Вызываю я всплывающее окно с формой заказа.
                                                                                      [[$mainModal? 
                                                                                          &modalName=`topCall` 
                                                                                          &modalText=`Напишите нам что-нибудь, пожалуйста. Или расскажите.` 
                                                                                      ]]
                                                                                      
                                                                                      В нём вывожу modalText — [[+modalText]] — там оно, естественно, выводится.
                                                                                      А дальше у меня отдаётся всё это в
                                                                                      [[!AjaxForm?
                                                                                       &snippet=`FormIt`
                                                                                       &form=`mainModalForm`
                                                                                       &hooks=`email`
                                                                                       &emailTpl=`mainModalEMail` 
                                                                                       &emailSubject=`"[[++site_name]]" - заказ`
                                                                                       &emailTo=`[[pdoField? &id=`1` &field=`site_mail`]]` 
                                                                                       &validate=`name:required, email:reqired, message:required`
                                                                                       &validationErrorMessage=`В форме содержатся ошибки. :(`
                                                                                       &successMessage=`Сообщение успешно отправлено`
                                                                                       &modalText=`[[+modalText]]`
                                                                                      ]]
                                                                                      И вот туда уже modalText не прилетает. Во всяком случае я его в
                                                                                      <input type="hidden" name="modalText" value="[[+modalText]]">
                                                                                      не наблюдаю. Как поступить в этом случае?
                                                                                      1. Alex Fesenko 08 августа 2014, 10:38 # 0
                                                                                        При использовании данного дополнения, в связке с дополнением Login, а именно при регистрации, после нажатия на кнопку для сабмита формы, все элеменыт формы блокируются, вместе с самой кнопкой, никакие данные не отправляются. С чем это может быть связано и как решить эту проблему?
                                                                                        1. Константин Ильин 28 августа 2014, 17:27 # 0
                                                                                          [[!AjaxForm?
                                                                                          	&snippet=`Register`
                                                                                          &form=`tpl.AjaxForm.ex`
                                                                                              &submitVar=`registerbtn`
                                                                                              &activationEmailTpl=`lgnActivationEmailTpl`
                                                                                              &activationEmailSubject=`Спасибо за регистрацию!`
                                                                                              &submittedResourceId=`20`
                                                                                              &usernameField=`email`
                                                                                              &usergroups=`Users`
                                                                                              &activation=`0`
                                                                                              &validate=`nospam:blank,     
                                                                                                password:required,
                                                                                                password_confirm:password_confirm=^password^,
                                                                                                fullname:required,
                                                                                                email:required:email`
                                                                                              &placeholderPrefix=`reg.`
                                                                                              &postHooks=`auto-login`
                                                                                          ]]
                                                                                          Форма зависает в состоянии disabled, ошибок в консоле браузера нет,
                                                                                          Я криворук или он не работает с Register?
                                                                                          1. Николай 31 августа 2014, 14:41 # 0
                                                                                            А подскажите пожалуйста чайнику! Где прописывается майл на который должно приходить сообщение?
                                                                                            Сейчас у меня все выглядет так:
                                                                                            [[!AjaxForm?
                                                                                            	&snippet=`FormIt`
                                                                                            	&form=`tpl.AjaxForm`
                                                                                            	&emailTpl=`tpl.MailToAdmin`
                                                                                            	&emailTo=`nrem83@mail.ru`
                                                                                            	&hooks=`spam,email,math`
                                                                                            	&submitVar=`submit`
                                                                                            	&emailSubject=`Тестовое сообщение`
                                                                                            	&validate=`name:required,email:required,message:required,nerobotostavitblank:blank`
                                                                                            	&successMessage=`Ваша сообщение успешно отправлено.`
                                                                                                &mathMinRange=`1`
                                                                                                &mathMaxRange=`10`
                                                                                            ]]
                                                                                            Это на странице с формой

                                                                                            <span>[[+fi.successMessage]]</span>
                                                                                            <form id="contact-form" method="post" class="ajax_form form-horizontal" role="form" action="[[~[[*id]]]]">
                                                                                            	<fieldset>
                                                                                            		<input type="hidden" name="nerobotostavitblank" value="" />
                                                                                            		<legend>Оставьте заявку</legend>
                                                                                            		<div class="form-group">
                                                                                            			<label for="name" class="col-lg-3 control-label">Имя</label>
                                                                                            			<div class="col-lg-9">
                                                                                            			  <input type="name" id="name" name="name" value="[[!+fi.name]]" class="form-control" placeholder="Имя" reqiured />
                                                                                            			</div>
                                                                                            		</div>
                                                                                            		<div class="form-group">
                                                                                            			<label for="phone" class="col-lg-3 control-label">Телефон</label>
                                                                                            			<div class="col-lg-9">
                                                                                            			  <input type="text" id="phone" name="phone" value="[[!+fi.phone]]" class="form-control" placeholder="Телефон" required pattern="\s*(?:\+\d{1,2}|\d)?\s*(?:\(\s*\d{3}\s*\)\s*|\-?\d{3}(?:\-|\s)?)?\d{3}(?:\-|\s)?\d{2}(?:\-|\s)?\d{2}\s*" />
                                                                                            			</div>
                                                                                            		</div>
                                                                                            		<div class="form-group">
                                                                                            			<label for="e-mail" class="col-lg-3 control-label">Email</label>
                                                                                            			<div class="col-lg-9">
                                                                                            			  <input type="email" id="e-mail" name="e-mail" value="[[!+fi.e-mail]]" class="form-control" placeholder="Email" required />
                                                                                            			</div>
                                                                                            		</div>
                                                                                            		
                                                                                            		<div class="form-group">
                                                                                            			<label for="message" class="col-lg-3 control-label">Сообщение</label>
                                                                                            			<div class="col-lg-9">
                                                                                            			  <textarea id="message" name="message" class="form-control" placeholder="Сообщение" rows="3">[[!+fi.message]]</textarea>
                                                                                            			</div>
                                                                                            		</div>
                                                                                            		[[$math]]
                                                                                            		<div class="form-group">
                                                                                            			<div class="col-lg-offset-3 col-lg-9">
                                                                                            				<button type="submit" class="btn btn-primary" name="submit">Отправить</button>
                                                                                            				<button type="reset" class="btn btn-default">Отмена</button>
                                                                                            			</div>
                                                                                            		</div>
                                                                                            	</fieldset>
                                                                                            </form>
                                                                                            Это чанк

                                                                                            Сообщение отправляется но в не известном направлении. Помогите пожалуйсат, а если можно опишите порядок действий по установке формы
                                                                                            1. maxim.kuhar 21 сентября 2014, 05:46 # 0
                                                                                              Подскажите, пожалуйста, где исправить, чтобы сообщение о статусе отправки (успешно отправлено, ошибка в форме) появлялось в всплывающем сообщении в правом верхнем углу экрана (как здесь file.modx.pro/files/8/f/7/8f7b0a25750cb5f23beaadbbc16ea5ea.png).

                                                                                              У меня сейчас данное сообщение отображается в самом низу экрана и чтобы его увидеть надо пролистать страницу.
                                                                                              1. Василий Наумкин 21 сентября 2014, 06:31 # 0
                                                                                                У себя в стилях исправить, где ж еще?

                                                                                                По умолчанию уведомления выводятся вверху, если у тебя не так — то это только от стилей твоего сайта может быть.
                                                                                              2. Саша Туманов 29 сентября 2014, 00:10 # 0
                                                                                                Подскажите пожалуйста, как можно вывести сообщение о неправильной проверке math?
                                                                                                Хук свою ошибку генерирует. Раньше выводил её так:
                                                                                                   [[!FormIt?
                                                                                                        &hooks=`math`
                                                                                                        &mathField=`contact_math`
                                                                                                        &mathMinRange=`1`
                                                                                                        &mathMaxRange=`5`
                                                                                                    ]]
                                                                                                [[!+fi.error.contact_math:notempty=`<div id="validation_err">[[!+fi.error.contact_math]]</div>`]]
                                                                                                Где contact_math, это имя поля в которое вводится результат проверки.

                                                                                                Для AjaxForm не работает, конечно, такой вариант. А во всплывающем окошке, при ошибке math, появляется просто «Форма содержит ошибки»
                                                                                                1. Василий Наумкин 29 сентября 2014, 07:06 # 0
                                                                                                  Конкретная ошибка будет не во всплывающем окне, а вот здесь
                                                                                                  <span class="error error_math">[[!+fi.error.math]]</span>

                                                                                                  У меня блок с math выглядит так:
                                                                                                  <input name="math" id="math" value="[[+fi.math]]">
                                                                                                  <span class="error error_math">[[+fi.error.math]]</span>
                                                                                                  	
                                                                                                  <input type="hidden" name="op1" value="[[+fi.op1]]" />
                                                                                                  <input type="hidden" name="op2" value="[[+fi.op2]]" />
                                                                                                  <input type="hidden" name="operator" value="[[+fi.operator]]" />
                                                                                                  1. Саша Туманов 29 сентября 2014, 22:30 # 0
                                                                                                    Отлично. То, что надо :)
                                                                                                    Спасибо!
                                                                                                2. Bon 03 ноября 2014, 12:24 # 0
                                                                                                  Поставил AjaxForm и два контекста как тут. Локаль контекста в форму не подтягивается. Юзаю FormIt. Может я, конечно, лажанул где-то. Но пока не получилось никак исправить.
                                                                                                  Василий, не подскажете как заставить FormIt при работе с AjaxForm подхватить cultureKey и выводить нормальные сообщения об ошибках валидации на языке текущего контекста?
                                                                                                  1. Artem 05 ноября 2014, 16:32 # 0
                                                                                                    День добрый, столкнулся с проблемой настройки автоматической ответа на форму обратный связи
                                                                                                    Вот вызов:
                                                                                                    [[!AjaxForm?
                                                                                                    	&snippet=`FormIt`
                                                                                                    	&form=`formTest`
                                                                                                    	&emailTpl=`mailProducts`
                                                                                                    	&hooks=`email,spam`
                                                                                                    	&validationErrorMessage=`В форме содержатся ошибки!`
                                                                                                    	&successMessage=`Сообщение успешно отправлено`
                                                                                                    	&fiarTpl=`mailTestProducts`
                                                                                                        &fiarSubject=`Thank You for Contacting Us`
                                                                                                        &fiarToField=`emailP`
                                                                                                        &fiarFromName=`Learn MODx Website`
                                                                                                    	&emailSubject=`[[+presentation]] : [[*pagetitle]]`
                                                                                                    	&emailTo=`temates93@gmail.com`
                                                                                                    	&validate=`nameP:required,emailP:email:required`
                                                                                                    ]]
                                                                                                    
                                                                                                    1. Artem 05 ноября 2014, 16:57 # 0
                                                                                                      Прошу прощения, забыл прописать hooks='FormItAutoResponder'
                                                                                                    2. Слава Саленок 27 ноября 2014, 16:20 # 0
                                                                                                      Не работает, ругается на скрипт Uncaught TypeError: Cannot read property 'defaults' of undefined
                                                                                                      Конкретно здесь
                                                                                                      $.jGrowl.defaults.closerTemplate = '<div>[ '+afConfig.closeMessage+' ]</div>';
                                                                                                      Может у кого было подскажите, пробовал менять версии jquery как на старые так и на новые и не работает.

                                                                                                      Письма отправляет, все нормально вот как ajax не работает. просто отправляет и пишет что все отправлено.
                                                                                                      Добавление новых комментариев отключено.