MODX - Форма обратной связи (FormIt)

Александр Мальцев
Александр Мальцев
99K
414
Содержание:
  1. Назначение компонентов FormIt и AjaxForm
  2. Принцип работы формы обратной связи
  3. Создание формы обратной связи
  4. Демонстрация работы формы обратной связи
  5. Комментарии

Урок, на котором рассмотрим создание формы обратной связи в CMF MODX Revolution, используя компоненты AjaxForm и FormIt.

Назначение компонентов FormIt и AjaxForm

FormIt – это компонент (сниппет) для MODX Revolution, предназначенный для обработки формы на стороне сервера. Он может осуществлять проверку полей формы (валидацию) перед дальнейшими действиями, защищать сайт от получения спама, отправлять данные формы на почту, хранить копии заполненных форм, осуществлять редирект на другую страницу (например, после успешной отправки формы на email), выполнять функцию автоответчика и многое другое.

Но для того чтобы работать с FormIt через AJAX необходимо использовать дополнительный компонент AjaxForm.

Принцип работы формы обратной связи

Перед тем как перейти к разработке формы обратной связи в MODX Revolution, рассмотрим основной алгоритм её работы.

MODX - Схема работы формы обратной связи

После открытия некоторой страницы с формой (она берётся из чанка, указанного в параметре &form вызова сниппета AjaxForm при формировании страницы на сервере), пользователь переходит к её заполнению. Завершив заполнение, пользователь нажимает на кнопку "Отправить" и компонент AjaxForm (код JavaScript) отправляет её на сервер посредством AJAX. На сервере данный компонент запускает сниппет FormIt и передаёт ему данные формы. Обработав эти данные, сниппет FormIt формирует ответ, который через компонент AjaxForm передаётся клиенту и отображается на странице пользователю. Ответ может быть положительным (это значит, что форма прошла валидацию и, например, данные были успешно отправлены на почту) или отрицательным (например, при заполнении формы пользователь допустил некоторые ошибки).

Создание формы обратной связи

Для создания формы обратной связи в MODX Revolution необходимо выполнить следующие основные шаги:

  1. Установить компоненты FormIt (из репозитория modx.com) и AjaxForm (из репозитория modstore.pro).
  2. Создать HTML форму в чанке (пример формы можно взять из чанка tpl.AjaxForm.example).
  3. Создать ресурс, в котором будет выводиться форма и шаблон. Подключить данный шаблон к ресурсу.
    MODX - Шаблон для ресурса Форма обратной связи
    MODX - Ресурс Форма обратной связи
  4. Добавить в созданный шаблон вызов сниппета AjaxForm и параметры, необходимые для его работы.

Рассмотрим шаги 2 и 4 более подробно.

Создание HTML формы в чанке

Создание HTML формы обратной связи можно осуществить посредством копирования заготовки tpl.AjaxForm.example. Например, присвоим скопированному чанку имя tpl.AjaxForm. Этот чанк, уже содержит готовую HTML-форму, состоящую из 3 полей: Имя, E-mail и Сообщение. Основные действия, которые надо производить с формой в основном будут сводиться к добавлению новых категорий или к удалению существующих. Под категорией будем понимать группу связанных между собой элементов: метка (label), элемент формы (input, select, textarea) и элемент span (используется для отображения ошибки валидации).

MODX - Чанк, содержащий HTML код формы обратной связи

Основные моменты:

  • Текст метки (элемента label). Обычно берётся либо из словаря (для многоязычных сайтов) или указывается непосредственно с помощью текста.
  • Элемент span, должен иметь атрибут class со значением error_name, в котором фразу name необходимо изменить на значение атрибута name элемента формы, вслед за которым он расположен.
Внимание: использование плейсхолдера [[+fi.name]] в качестве значения атрибута value элемента формы и плейсхолдера [[+fi.error.name]] в качестве контента элемента span актуально только для классической работы с FormIt, т.е. без AJAX. Они используются для заполнения формы при её повторной отправке для того чтобы сохранить значения введённые пользователем и отобразить ошибки валидации.

Например, добавим в HTML форму поле для ввода телефонного номера:

<div class="control-group">
  <label class="control-label" for="af_phone">Телефон:</label>
  <div class="controls">
    <input type="text" id="af_phone" name="phone" value="" placeholder="">
    <span class="error_phone"></span>
  </div>
</div>

В итоге данный чанк будет содержать следующий HTML-код:

<form action="" method="post" class="ajax_form af_example form-horizontal">
  <div class="control-group">
    <label class="control-label" for="af_name">Имя*</label>
    <div class="controls">
      <input type="text" id="af_name" name="name" value="" placeholder="Введите имя">
      <span class="error_name"></span>
    </div>
  </div>
  <div class="control-group">
    <label class="control-label" for="af_email">E-mail*</label>
    <div class="controls">
      <input type="email" id="af_email" name="email" value="" placeholder="Введите email">
      <span class="error_email"></span>
    </div>
  </div>
  <div class="control-group">
    <label class="control-label" for="af_phone">Телефон</label>
    <div class="controls">
        <input type="text" id="af_phone" name="phone" value="" placeholder="Введите номер телефона">
      <span class="error_phone"></span>
    </div>
  </div>
  <div class="control-group">
    <label class="control-label" for="af_message">Сообщение*</label>
    <div class="controls">
      <textarea id="af_message" name="message" rows="5"></textarea>
      <span class="error_message"></span>
    </div>
  </div>
  <div class="control-group">
    <div class="controls">
      <button type="reset" class="btn btn-default">Очистить</button>
      <button type="submit" class="btn btn-primary">Отправить</button>
    </div>
  </div>
</form>

Создание кода, содержащего вызов сниппета AjaxForm

Открываем шаблон, который будет использовать ресурс и вводим код, который будет всё это осуществлять.

[[!AjaxForm?
  &form=`tpl.AjaxForm`
  &snippet=`FormIt`
  &hooks=`FormItSaveForm,email`
  &emailSubject=`Тестовое сообщение`
  &emailTo=`myemail@mail.ru`
  &emailFrom=`no-reply@mysite.com`
  &emailTpl=`tpl.email`
  &validate=`name:minLength=^2^,email:email:required,message:minLength=^10^`
  &validationErrorMessage=`В форме содержатся ошибки!`
  &successMessage=`Сообщение успешно отправлено`
]]

Разберём основные параметры:

  • &form – отвечает за чанк, содержащий форму (tpl.AjaxForm).
  • &snippet - сниппет, обрабатывающий форму (FormIt).
  • &hooks – хуки, которые будет выполнять сниппет FormIt после успешной проверки формы (1 - FormItSaveForm, 2 - email). Хуки - это скрипты, которые запускаются после того когда форма прошла валидацию (проверку). Они указываются через запятую и запускаются последовательно один за другим. Если в одном из них произошла ошибка, то остальные не запускаются. В этом уроке будем использовать 2 хука. Хук FormItSaveForm предназначен для сохранения формы в базе данных. Хук email предназначен для отправки данных формы на почту.
  • &emailSubject, &emailTo, &emailFrom, &emailTpl – параметры, значения которых использует хук email. Они предназначены для указания темы письма (&emailSubject), адреса отправки (&emailTo), заголовка From (&emailFrom), шаблона письма (&emailTpl).
  • &validate – параметр, на основании значения которого осуществляется валидация формы. Значения параметра представляет собой список элементов, разделённых между собой запятыми. Каждый элемент состоит из имени элемента формы (который нужно проверить) и правила (требования к нему), разделённые между собой с помощью знака двоеточия. Например, валидатор name:minLength=^2^ проверяет, чтобы поле name содержало не меньше 2 символов. Валидатор email:email:required проверяет, чтобы поле mail содержало адрес электронной почты. С основными правилами создания валидаторов можно познакомиться на странице "FormIt Validators".
  • &validationErrorMessage - содержит сообщение, которое будет выводиться, если в форме содержатся ошибки.
  • &successMessage - сообщение, которое увидит пользователь, если сообщение будет успешно отправлено.

Осталось только создать чанк tpl.email, который будет содержать шаблон письма.

<h3>Сообщение</h3>
<p>От кого: [[+name]]</p>
<p>E-mail: [[+email]]</p>
<p>Телефон: [[+phone]]</p>
<p>Сообщение: [[+message]]</p>
MODX - Чанк tpl.email
Внимание: Для вывода значений полей формы, используется плейсхолдеры.

Демонстрация работы формы обратной связи

Основные моменты при работе с формой обратной связи на странице продемонстрируем с помощью следующих изображений.

MODX - Незаполненная форма обратной связи:

MODX - Незаполненная форма обратной связи

Форма обратной связи, не прошедшая валидацию:

Форма обратной связи, не прошедшая валидацию

Сообщение, об успешной отправке формы:

Сообщение, об успешной отправке формы

Просмотр заполненной формы в панели управления MODX:

Просмотр заполненной формы в панели управления MODX

Письмо, пришедшее на почтовый ящик:

Письмо, пришедшее на почтовый ящик

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

  1. Сергей
    14 июля 2021, 16:58
    Можешь подсказать как исправить я все перепробовал что знаю. на сайте ugavto-rostov.ru горизонтальная промотка из за галереи думаю.в адаптивной верстке. косяк в том что когда открываешь галерею правая стрелка промотки настроена на конец окна, и ее не видно так как окно больше экрана из за промотки, я нашел как стрелочку подвинуть но промотка останется.Буду безгранично благодарен если скажешь как исправить это увеличит мои знания.
    1. Сергей
      17 июля 2021, 16:47
      ну когда с права на пустом месте от фото нажимаешь. то открывается фото. тоесть блок шире почемуто. что легче поменять галерею? нужно убрать горизонтальную прокрутку на мобильных устройствах, а просто адоптивная верстка не показывает пркрутку, только когда выбераешь модель любого телефона.
    2. Сергей
      08 июля 2021, 08:01
      подскажите пожалуйста как дополнительные поля сделать отображение не во вкладке доп поля а на вкладке документ как на скриншоте itchief.ru/assets/uploadify/0/f/f/0ffc19dd1dc230c2b6c0e233817d572c.jpg
      1. Александр Мальцев
        08 июля 2021, 14:31
        Это осуществляется через настройку форм в админке.
        1. Сергей
          08 июля 2021, 14:59
          получилось спасибо
      2. Сергей
        08 июля 2021, 07:58
        Подскажите пожалуйста как увеличить memory_limit для сайта
        1. Александр Мальцев
          08 июля 2021, 14:26
          Попробуйте добавить в конец файла «.htaccess» следующую строку:
          php_value memory_limit 100M
          1. Сергей
            08 июля 2021, 14:59
            поставил но незнаю как проверить
            1. Александр Мальцев
              09 июля 2021, 05:12
              Можно с помощью phpinfo().
              1. Сергей
                09 июля 2021, 10:05
                получилось посмотреть местное значение Local Value 400м главное значение Master Value 128м, это значит поменялось или не совсем?
                1. Александр Мальцев
                  11 июля 2021, 14:44
                  Можно так:
                  <?php
                  exit(ini_get('memory_limit'));
                  1. Сергей
                    11 июля 2021, 14:48
                    простите а это куда вставлять? и сколько (м) оно даст?
                    1. Александр Мальцев
                      11 июля 2021, 14:59
                      Создать php-файл на сервере, скопировать в него это содержимое и открыть его в браузере.
                      1. Сергей
                        11 июля 2021, 15:09
                        сделал показывает 400м, это только просмотривать такой способ? но Master Value 128м так и остался неизменным. Чему верить? Master Value это не важно считать что memory_limit равен 400м?
                        1. Александр Мальцев
                          11 июля 2021, 15:35
                          Это локальное (конечное) значение, используется именно оно.
                          Master Value – это первоначальное (глобальное) значение (установлено в «php.ini»), которое затем вы переопределили в «.htaccess». Значение переопределённое в «.htaccess» — это локальное значение (Local Value).
                          1. Сергей
                            11 июля 2021, 15:42
                            понял большое спасибо!!!
                            1. Сергей
                              11 июля 2021, 15:53
                              а я пробовал этот код, но в новой версии наверное не работает, пробовал перед установкой админки сделать не получилось, а на более старой версии работало.
                              в файле setup\includes\modinstalltest.class.php на строчке 84 
                              
                              поменяй 
                              
                              Цитата: 
                              
                              $bytes = $this->_returnBytes($ml); -----memory_limit равен 128M 
                              
                              на 
                              
                              Цитата: 
                              
                              $bytes = (int)$ml; 
                              
                              или на строке 109 
                              
                              поменяй 
                              
                              Цитата: 
                              
                              if (is_integer($val)) return $val; ---------memory_limit равен 256M 
                              
                              на 
                              
                              Цитата: 
                              
                              if (is_numeric($val)) return (int)$val; 
                              
                              какой вариант больше понравится =) 
                              хотя строчки такие есть в файле менял не помогало
                              1. Александр Мальцев
                                14 июля 2021, 15:31
                                В этом файле значение определяется тоже с помощью ini_get('memory_limit'):
                                protected function _checkMemoryLimit() {
                                  $success = false;
                                  $ml = @ini_get('memory_limit');
                                  $bytes = $this->_returnBytes($ml);
                                  ...
                                
                                Не забывайте, на хостинге тоже имеется ограничение и максимальное значение memory_limit зависит от используемого вами тарифного плана. Сильно большие значение memory_limit — это тоже плохо, т.к. эта память выделяется для каждого запущенного скрипта. В этом случае лучше постараться оптимизировать их, иначе несколько запущенных скриптов могут привести к превышению доступной памяти, и, следовательно, к ошибкам.
                                1. Сергей
                                  14 июля 2021, 15:41
                                  Спасибо за ответ, лучше не буду лезть туда.
        2. Сергей
          07 июля 2021, 13:33
          здравствуйте не к кому обратиться форма работает отправляет письма на почту mail.ru, но когда меняешь на почту yandex.ru форма пишет ошибку, подскажите как подключить почту на yandex.ru. буду очень благодарен если поможете, спасибо.
          1. Александр Мальцев
            07 июля 2021, 15:11
            Здравствуйте! Для этого нужно использовать не обычный пароль от почты, а создать отдельный для приложений. Выполняется это на странице «Пароль для почты» (открывается она при нажатии на ссылку «пароли приложений», расположенной в меню: Настройки -> Безопасность).
            Создайте отдельных паролей Яндекс Почты для приложений
            1. Сергей
              07 июля 2021, 15:24
              Пробовал не получалось, щас еще попробую а на скрине все верно? itchief.ru/assets/uploadify/b/f/8/bf84394d388d5d1947e1e1b113fd6255.jpg попробуйте форму на этом сайте ugavto-rostov.ru/ вот создал пароль для приложений itchief.ru/assets/uploadify/b/a/5/ba52192e950020c7afc7f6a92f3db973.jpg форма ошибку выводит
              1. Александр Мальцев
                07 июля 2021, 15:43
                При отправке корректно заполненной формы возвращается ошибка:
                email: "<span class=\"error\"> </span>"
                message: "Форма содержит ошибки"
                success: false
                1. Александр Мальцев
                  07 июля 2021, 15:36
                  Так всё корректно, только в поле mail_smtp_hosts прописываю так: smtp.yandex.ru:465
                  1. Сергей
                    07 июля 2021, 15:51
                    И как мне исправить эти ошибки, какие данные вам скинуть?
                    1. Сергей
                      07 июля 2021, 16:06
                      может потому что я сначала аджаксформ установил а потом форм айти, может из за этого?
                      1. Александр Мальцев
                        07 июля 2021, 16:11
                        Наврядли, попробуйте без валидации данных.
                        1. Сергей
                          07 июля 2021, 16:21
                          убрал строчку &validate=`name:required,email:email:required,telefon:required` таже ошибка высвечивается (. хук емайл убераю пишет что отправлено тока на почту нечего не приходит
                          1. Сергей
                            07 июля 2021, 16:40
                            у меня указано вот такое сообщение об ошибке &validationErrorMessage=`Пожалуйста, исправьте ошибки!` а на сайте приходит другое сообщение.
                            1. Сергей
                              07 июля 2021, 18:06
                              вы еще подумаете как мне помочь, у вас на сайтах яндекс почта работает? или мне не ждать ответа?
                              1. Александр Мальцев
                                08 июля 2021, 01:14
                                Использую Яндекс Почту для домена. Она работает. На рабочем проекте не могу экспериментировать, попробую настроить отправку почты через личный аккаунт Яндекс Почты на тестовом проекте и напишу результат.
                                1. Сергей
                                  08 июля 2021, 07:55
                                  написал в техподдержку яндекса они сказали поставить галочки вот тут mail.yandex.ru/#setup/client и форма заработала.
                                  1. Александр Мальцев
                                    08 июля 2021, 14:22
                                    Отлично!
            2. Сергей
              11 июня 2021, 23:55
              подскажите как сделать так чтоб модальное окно не закрывалось при нажатии на кнопку формы отправить, только при втором нажатии на модальное окно видно сообщении что форма отправилась корректно.использую formit на modx revo.
              1. Александр Мальцев
                07 июля 2021, 15:13
                Для этого уберите или закомментируйте код закрывающий модальное окно при нажатии на кнопку.
              2. Maxim Sokolkov
                12 мая 2021, 11:35
                Добрый день. Подскажите, пожалуйста, почему могли сломаться выводы &validationErrorMessage и &successMessage?
                Раньше они открывались в модальном окне, сейчас же они на секунду появляются под футером и исчезают. Сообщения при этом уходят нормально. Как будто какой то css не отрабатывает, но не могу понять какой.

                i.imgur.com/mYDYMEr.png
                1. Вадим
                  06 апреля 2021, 11:27
                  Добрый день Александр, вопрос такой. Есть форма на сайте, все работает и письмо отправляется, но не могу разобраться с правами пользователей. Суперадмин видит кнопку FormIt в админке и видит заполненные формы, а Manager видит кнопку FormIt, но списка заполненных форм нет, может подскажете в чем проблема, где я мог ошибиться в настройках пользователя?
                  1. Вадим
                    06 апреля 2021, 11:35
                    Все разобрался, после перехода сайта на https протокол, если в админку зайти по http протоколу многое работает некорректно.
                  2. Александр Сидоров
                    23 марта 2021, 12:53
                    Добрый день Александр! Подскажите пожалуйста, как решить проблему.

                    На сайте есть модальное окно записи на прием.
                    На странице шаблона, в чанке вызывается форма:
                    [[!AjaxForm? 
                    &form=`tpl.AjaxForm3` 
                    &snippet=`FormIt` 
                    &hooks=`FormItSaveForm,spam,email`
                    &emailSubject=`Запись на приём к врачу`
                    &emailTo=`test555@yandex.ru`
                    &emailFrom=`info@test555.ru`
                    &emailTpl=`tpl.email3`
                    &validate=`name:minLength=^2^,tel:required
                    &validationErrorMessage=`В форме содержатся ошибки!`
                    &successMessage=`Сообщение успешно отправлено`
                    ]]
                    
                    Содержимое шаблона формы: prnt.sc/10tbnkk
                    Содержимое шаблона письма:
                    <h3>Записаться онлайн к врачу</h3>
                    
                    <p>От кого: [[+name]]</p>
                    <p>Телефон: [[+tel]]</p>
                    <p>Имя врача: [[+doctor]]</p>
                    
                    Проблема в том, что необходимо в шаблон письма передать заголовок текущего ресурса, но цепляется заголовок не страницы с доктором, а родительский (Список врачей), вместо (Сергеева А.В.).

                    Путем скрипта:
                    prnt.sc/10tbqiu

                    Удалось передать значение pagetitle в дополнительное поле input, в значение value
                    prnt.sc/10tbj5i

                    Но вот проблема в том, что письмо не цепляет почему-то это значение, и в письме на почту приходит подобная картина:
                    Записаться онлайн к врачу
                    От кого: 55555555
                    Телефон: +375 55 555-55-55
                    Имя врача: [[+doctor]]
                    
                    Подскажите пожалуйста, как можно решить вопрос передачи заголовка в шаблон((.
                    1. Александр Мальцев
                      24 марта 2021, 14:54
                      Привет! Попробуйте убрать у поля атрибут disabled, значение таких полей скорее всего не передаются на сервер. Используйте, если нужно hidden или readonly.
                      1. Александр Сидоров
                        24 марта 2021, 15:09
                        Благодарю за ответ, к этому времени разобрал проблему, да именно в disabled она и была.

                        Сейчас ситуация еще хуже, перестали в принципе все формы работать.

                        Сделаны как набор модальных окон, каждая со своим id и корректно настроены верстальщиком, подключены мной.

                        Приведу пример кода, возможно будет тоже решение от Вас, потому-что с формами просто катастрофа (хостинг располагается на nic.ru)

                        Так выглядит подключение:
                        prnt.sc/10u8mbn

                        Вот это шаблон формы:
                        prnt.sc/10u8opq

                        А это шаблон почтового письма:
                        prnt.sc/10u8ph7

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

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

                        И второй вопрос, вот до этих лагов, отправлялось 3 письма (то есть 2 дубликата еще).
                        С чем могло быть связано 2 копии в письме при отправке?

                        Что подскажете попробовать? Что могло повлиять на ситуацию с отправкой вообще любой формы?
                        1. Александр Сидоров
                          24 марта 2021, 16:04
                          Если я ставлю
                          &submitVar=`form-1`
                          в сниппет вызова, а кнопку оставляю button

                          Записаться
                          то письмо не приходит.

                          Если же я убираю submitVar, или оставляю, но вешаю отправку на input:
                          />

                          то опять по 3 письма приходит(

                          Форма располагается вот тут:
                          dental-elit.web-alexxx.ru/service/ortopediya
                          При клике на консультацию.

                          ( уже что только не придумал, либо же нужно остальным формам уникальность какую-то сформировать, либо же вопрос по закрытию модального окна автоматически после отправки, может на этом этапе что-то происходит )…

                          1. Александр Мальцев
                            24 марта 2021, 16:14
                            Начните с разметки. Откройте валидатор (https://validator.w3.org/) и исправьте все ошибки, которые у вас имеются в разметке, потом двигайтесь дальше.
                            1. Александр Сидоров
                              24 марта 2021, 17:08
                              Помогите с задачкой Александр. В долгу не останусь, труд оплачу.
                              1. Александр Сидоров
                                24 марта 2021, 16:56
                                Прежде чем с разметкой разберусь, хотя уже начал.
                                Посмотрите еще момент, вот это шаблоны и id форм:

                                шаблон 4-й формы: prnt.sc/10uatbb
                                шаблон и id 3-й формы: prnt.sc/10uaugi
                                шаблон 2-й формы: prnt.sc/10uauwf

                                У них разные классы, но id — id=«popupResult»

                                И ниже фрагмент из js (возможно нужно как-то в js поменять id и соответственно у форм тоже сделать уникальными id? ), просто не очень разберусь, слишком мудрено все сделали через js файл:

                                $('.js-form3').each(function () {
                                      valEl($(this));
                                   });
                                   $('[data-scroll]').on('click', function () {
                                      $('html, body').animate({
                                         scrollTop: $($.attr(this, 'data-scroll')).offset().top
                                      }, 2000);
                                      event.preventDefault();
                                   })
                                });
                                
                                $(document).ready(function () {
                                   $('[data-su]').on('click', function (e) {
                                      e.preventDefault();
                                      $(this).parents('form').submit();
                                   })
                                   $.validator.addMethod(
                                      "regex",
                                      function (value, element, regexp) {
                                         var re = new RegExp(regexp);
                                         return this.optional(element) || re.test(value);
                                      },
                                      "Please check your input."
                                   );
                                   function valEl(el) {
                                
                                      el.validate({
                                         rules: {
                                            tel: {
                                               required: true,
                                               regex: '^([\+]+)*[0-9\x20\x28\x29\-]{5,20}$'
                                            },
                                            name: {
                                               required: true
                                            },
                                            mess: {
                                               required: true
                                            },
                                            email: {
                                               required: true,
                                               email: true
                                            }
                                         },
                                         messages: {
                                            tel: {
                                               required: 'Поле обязательно для заполнения',
                                               regex: 'Телефон может содержать символы + - ()'
                                            },
                                            name: {
                                               required: 'Поле обязательно для заполнения',
                                            },
                                            email: {
                                               required: 'Поле обязательно для заполнения',
                                               email: 'Неверный формат E-mail'
                                            }
                                         },
                                         submitHandler: function (form) {
                                            $('#loader').fadeIn();
                                            var $form = $(form);
                                            var $formId = $(form).attr('id');
                                            switch ($formId) {
                                               case 'popupResult':
                                                  $.ajax({
                                                     type: 'POST',
                                                     url: $form.attr('action'),
                                                     data: $form.serialize(),
                                                  })
                                                     .always(function (response) {
                                                        setTimeout(function () {
                                                           $('#loader').fadeOut();
                                                        }, 500);
                                                        setTimeout(function () {
                                                           $.arcticmodal('close');
                                                           $('#overlay4').fadeIn();
                                                           $form.trigger('reset');
                                                           //строки для остлеживания целей в Я.Метрике и Google Analytics
                                                        }, 1100);
                                                        $('#overlay4').on('click', function (e) {
                                                           $('#overlay4').fadeOut();
                                                        });
                                
                                                     });
                                                  break;
                                            }
                                            return false;
                                         }
                                      })
                                   }
                                
                                   $('.js-form4').each(function () {
                                      valEl($(this));
                                   });
                                   $('[data-scroll]').on('click', function () {
                                      $('html, body').animate({
                                         scrollTop: $($.attr(this, 'data-scroll')).offset().top
                                      }, 2000);
                                      event.preventDefault();
                                   })
                                });
                                
                                
                            2. Александр Мальцев
                              24 марта 2021, 15:52
                              Добавьте к input name:
                              <input name="form-1" type="submit" value="Отправить" />
                              В вызове сниппета добавьте параметр submitVar:
                              &submitVar=`form-1`
                              
                              1. Александр Сидоров
                                24 марта 2021, 15:45
                                Проблема решилась после того, как убрал хуки
                                &hooks=`FormItSaveForm,spam,email`

                                и заменил их на
                                &hooks=`spam,email`

                                Но теперь по 3 письма одинаковых приходит(
                          2. Дмитрий
                            04 марта 2021, 21:11
                            Здравствуйте, очень надеюсь на Вашу помощь. Сайт был на друпале, там была форма, которая при заполнение полей и нажатии Отправить перенаправляла данные с полей на сторонний ресурс и заполняла эти поля
                            Код с того сайта:
                            function($, Drupal, drupalSettings) {
                              Drupal.behaviors.sprintsalon_itp_forms = {
                                attach(context, settings) {
                                  $.fn.itprintLoginAjaxFormSubmit = function(email, pass) {
                            	var itp = "https://*******";
                            	$.ajax({
                            	  type: "GET",
                            	  url: itp + "/api/login",
                                      crossDomain: true,
                                      xhrFields: {withCredentials: true}
                            	}).done(function(d) {
                            	  $.ajax({
                                        type: "POST",
                            	    contentType: 'application/json',
                            	    dataType: 'json',
                                        url: itp + "/api/login",
                            	    cache: false,
                            	    crossDomain: true,
                            	    xhrFields: {withCredentials: true},
                            	    headers: {'X-CSRF-Token': d.csrf_token, 'X-Requested-With': 'XMLHttpRequest'},
                            	    beforeSend: function(xhr) {
                                          xhr.setRequestHeader("X-CSRF-Token", d.csrf_token);
                                        },
                            	    data: JSON.stringify({login: email, password: pass, csrf_token: d.csrf_token}),
                            	    statusCode: {
                            	      200: function(msg) {
                            		console.log(["200", msg]);
                            		window.location.href = itp;
                            //		$.ajax({
                            //                   type: "GET",
                            //                   url: itp + "/api/profile"
                            //                }).done(function(m) {console.log(m)});
                            //              window.location.replace($itp);
                            	      },
                            	      400: function(msg) {
                            		console.log(["400", msg]);
                            	      }
                            	    }
                                      });
                            	});
                                  };
                            
                                  $.fn.itprintForgotAjaxFormSubmit = function(email) {
                            	$.ajax({
                                      type: "POST",
                            	  dataType: 'json',
                                      url: "https://******",
                            	  data: {username: email}
                                    }).done(function(msg) {
                            	  console.log(msg);
                            	});
                                  };
                                }
                              };
                            })(jQuery, Drupal, drupalSettings);
                            ;
                            


                            Как такое реализовать на modx ajaxform formit?
                            1. Татьяна
                              18 января 2021, 12:15
                              Здравствуйте! Подскажите, пожалуйста, как указать страницу, с которой отправили сообщение. Если оставляю emailTpl по умолчанию, то id страницы приходит, а если пишу свой чанк как у вас с добавлением id: [[+id]], то номера нет, а так [[+id]] остается в сообщении.
                              1. Татьяна
                                18 января 2021, 12:25
                                Все, разобралась сама. Нужно указать скрытое поле с name=«имя» value="[[*id]]", а в чанке подставить [[+имя]]. Подсмотрела в комментариях.
                              2. Сергей
                                19 октября 2020, 15:52
                                Здравствуйте, подскажите пожалуйста. Пытаюсь сделать все по вашей инструкции и не только по вашей, письма почему то не приходят на почту. Спам я проверял, пытался отправить на несколько почт, все четно. Причем если только через Formit отправлять, письма приходят, такое ощущение что ajaxform не цепляется к formit, я просто пробовал без вот этой строчки &snippet=`FormIt`ничего не меняется, в консоли ошибок нет, ответ получаю true визуально все отправляется. В логах вот такая ошибка «Could not connect to provider at: тут сайт api stopforumspam org» пробовал hooks без spam, тоесть &hooks=`email` все равно эта же ошибка. Складывается ощущение что параметры в [[!AjaxForm?]] какие то просто не работаю или не передаются в formit, если в &validate менять это не влияет ни на что. Версии formit и ajaxform последние, версия MODX Revolution 2.6.1-pl (traditional).
                                1. Александр Мальцев
                                  20 октября 2020, 15:14
                                  Здравствуйте! Отправляет AjaxForm или нет можно посмотреть в браузере, используя инструменты разработчика.
                                  1. Сергей
                                    20 октября 2020, 15:51
                                    это я знаю, я уже все там просмотрел все работало и отправляло. Если вкратце причина была в то что [[!AjaxForm?]] был два раза подключен.
                                2. Фунтик
                                  27 июля 2020, 18:59
                                  Здравствуйте, пытаюсь изменить successMessage, но оно не хочет меняться. В чем проблема?
                                  1. Александр Мальцев
                                    28 июля 2020, 15:54
                                    Здравствуйте! А что у вас в successMessage?
                                    1. Фунтик
                                      28 июля 2020, 20:29
                                      Уже решил)
                                  2. Maxim Sokolkov
                                    31 мая 2020, 17:49
                                    Добрый день. Подскажите, пожалуйста, а возможно ли форму обратной связи вывести в модальном окне по кнопке в меню?

                                    Например, я создаю ресурс, подключаю туда форму обратной связи:

                                                [[!AjaxForm?
                                                    &snippet=`FormIt`
                                                    &form=`AjaxForm.callbackModal`
                                                    &hooks=`email`
                                                    &emailTo=`[[++emailsender]]`
                                                    &emailFrom=`[[++emailfrom]]`
                                                    &emailTpl=`formContactsTplModal`
                                                    &emailFromName=`[[++site_name]]`
                                                    &emailSubject=`Обратная связь с «[[++site_name]]»`
                                                    &validate=`fio:stripTags, email:email:required, message:required:stripTags:maxLength=^1000^`
                                                    &submitVar=`contactsbtn`
                                                    &frontend_css=``
                                                    &validationErrorMessage=`В форме содержатся ошибки!`
                                                    &successMessage=`Мы свяжемся вами в ближайшее время.`
                                                ]]
                                    
                                    Создаю форму AjaxForm.callbackModal

                                    <form>
                                        <div class="title-h2" style="margin-bottom:5px;">Обратная связь</div>
                                        <div class="push10"></div>
                                        <div class="form-group">
                                            <input name="fio.children" type="text" class="form-control required" placeholder="ФИО ребенка *" value="[[!+fi.fio.children]]" />
                                        </div>
                                    	<div class="form-group">
                                            <input name="fio.parents" type="text" class="form-control required" placeholder="ФИО родителя *" value="[[!+fi.fio.parents]]" />
                                        </div>
                                    	<div class="form-group">
                                            <input name="sector" type="text" class="form-control required" placeholder="Номер участка *" value="[[!+fi.sector]]" />
                                        </div>
                                        <div class="form-group">
                                            <input name="tel" type="text" class="form-control required tel" placeholder="Телефон *" value="[[!+fi.tel]]" />
                                        </div>
                                    	<div class="form-group">
                                            <input name="email" type="email" class="form-control required" placeholder="Email *" />
                                        </div>
                                    	<div class="form-group">
                                            <textarea name="message" class="form-control required" placeholder="Ваше сообщение *"></textarea>
                                        </div>
                                        <div class="push20"></div>
                                    
                                        <div class="agreement form-group">
                                            <input type="checkbox" name="agreement" id="agreement1" class="required">
                                            <label for="agreement1">
                                                <i class="material-icons checked">check_box</i> 
                                                <i class="material-icons no-checked">check_box_outline_blank</i> 
                                                Согласен на обработку персональных данных *
                                            </label>
                                        </div>
                                    
                                        <p><small><span class="red f16">*</span> - поля, обязательные для заполнения</small></p>
                                        <input name="callbackbtn" type="submit" class="btn" value="Отправить" />
                                    </form>
                                    
                                    Создаю еще один ресурс, но в виде ссылки (для меню)


                                    Как то можно через эту ссылку вывести модальное окно с формой обратной связи?
                                    1. Сергей
                                      07 мая 2020, 00:46
                                      Добрый вечер! Интересует вопрос, а возможно ли средствами formit и modx делать следующее: как только отправили форму post запросом и выполнили redirect скажем на страницу благодарности, то после этого кликом мыши на перезагрузку в браузере переадресовать страницу на главную (такой не стандартный немного вариант) и чтоб на эту страницу нельзя было повторно попасть по истории ( стрелка влево и вправо в браузере), а если мы пытаемся попасть на нее прямым запросом то нас опять же редиректит на главную?

                                      Я знаю что можно через куки — записав куки страницы потом обнулить их и получается что в рамках одной сессии можно попасть один раз, а вот средствами только modx и formit это возможно?
                                      1. Сергей
                                        07 мая 2020, 13:15
                                        Еще хотел добавить — это вроде называется паттерн PRG (POST/REDIRECT/GET)
                                        1. Александр Мальцев
                                          09 мая 2020, 16:27
                                          Добрый день! Но этот паттерн не совсем то, что вы хотите сделать.
                                          Это можно выполнить через сессионные переменные. Например, в FormIt создать хук в котором в некоторую сессионную переменную записывать какое-то определенное значение. Кроме этого к FormIt через redirectTo установить id страницы благодарности. На страницу благодарности добавить некоторый сниппет. В этом сниппете проверять наличие этой сессионной переменной. Если её нет, то выполнять редирект на главную страницу. В противном случае удалять её. В этом случае при повторной загрузке страницы сессионой переменной уже не будет и попасть на неё не получится. Следовательно, сниппет на этой странице выполнит редирект на главную страницу.
                                      2. Александр С
                                        20 апреля 2020, 10:46
                                        Александр здравствуйте. Не поможете с проблемой весь интернет перерыл но не могу вывести результаты с калькулятора для отправки на почту. форма отправляет для примера взял свою форму и подставил значения с калькулятора но ничего не приходит. Возможно проблема в самом коде. Подскажите что не так подставил
                                        <form action="[[~[[*id]]]]" method="post" class="ajax_form" id="footerform">
                                            <div class="message"></div>
                                            <div class="form-group hidden">
                                            	<label>Имя</label>
                                            	<input class="form-control" name="user" placeholder="" type="text">
                                              </div>
                                              <div class="form-group hidden">
                                            	<label>Имя</label>
                                            	<input class="form-control" name="username" placeholder="" type="text">
                                              </div>
                                            <div class="form-group">
                                                <input type="text" name="name" class="form-control" placeholder="Name">
                                            </div>
                                            <div class="form-group">
                                                <input type="email" name="email" class="form-control" placeholder="Email">
                                            </div>
                                            <div class="form-group">
                                                <select id="lang" name="name" class="form-control">
                                                        <option value="1000">PHP</option>
                                                        <option value="2000">JS</option>
                                                    </select>
                                            </div>
                                            <div class="form-group">
                                                <select id="site" class="form-control">
                                                        <option value="1000">Tilda</option>
                                                        <option value="2000">WP</option>
                                                    </select>
                                            </div>
                                            <input name="total" id="total" value="0" type="submit">Submit</input>
                                        </form>
                                        1. Александр Мальцев
                                          24 апреля 2020, 15:44
                                          Здравствуйте! Посмотрите, есть ли ошибки в логах и журнале MODX. Если нет, то можете попробовать начать создавать форму с одного поля, постепенно добавляя новые. Обратите внимание, что в форме у вас несколько полей с name="name".
                                        2. Венера
                                          28 февраля 2020, 23:59
                                          Здравствуйте! Описанная вами форма отображается корректно во всех версиях? Имею ввиду ПК, мобильная. Дали под редактирование сайт на modx, там установлена форма, которая на ПК отображается корректно, но на мобильной версии не отображается совсем. Куда посмотреть и что изменить подскажите пожалуйста.
                                          1. Александр Мальцев
                                            29 февраля 2020, 09:16
                                            Здравствуйте! Посмотрите стили, может она просто скрыта на мобильных устройствах.
                                          2. Мансур Латыпов
                                            27 февраля 2020, 15:35
                                            Здравствуйте, сделал все по вашей инструкции, даже с формой tpl.AjaxForm.example сообщение не отправляется.
                                            Прилагаю коды
                                            <form action="" method="post" class="ajax_form af_example">
                                            
                                                <div class="form-group">
                                                    <label class="control-label" for="af_name">[[%af_label_name]]</label>
                                                    <div class="controls">
                                                        <input type="text" id="af_name" name="name" value="[[+fi.name]]" placeholder="" class="form-control"/>
                                                        <span class="error_name">[[+fi.error.name]]</span>
                                                    </div>
                                                </div>
                                            
                                                <div class="form-group">
                                                    <label class="control-label" for="af_email">[[%af_label_email]]</label>
                                                    <div class="controls">
                                                        <input type="email" id="af_email" name="email" value="[[+fi.email]]" placeholder="" class="form-control"/>
                                                        <span class="error_email">[[+fi.error.email]]</span>
                                                    </div>
                                                </div>
                                                
                                                
                                                <div class="form-group">
                                                    <label class="control-label" for="af_message">[[%af_label_message]]</label>
                                                    <div class="controls">
                                                        <textarea id="af_message" name="message" class="form-control" rows="5">[[+fi.message]]</textarea>
                                                        <span class="error_message">[[+fi.error.message]]</span>
                                                    </div>
                                                </div>
                                            
                                                <div class="form-group">
                                                    <div class="controls">
                                                        <button type="reset" class="btn btn-default">[[%af_reset]]</button>
                                                        <button type="submit" class="btn btn-primary">[[%af_submit]]</button>
                                                    </div>
                                                </div>
                                            
                                                [[+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>
                                            
                                            Далее код вызова AjaxForm
                                            <!doctype html>
                                            <html lang="ru">
                                            <head>
                                                [[$head]]
                                            </head>
                                            <body>
                                                <div id="app">
                                                    [[$header]]
                                                    [[$navigation]]
                                                <section  name="commerc" id="commerc" class="slide">
                                                  <div class='container'>
                                                  <div class="slide-title">
                                                        <h1>Анкета - заявка</h1>
                                                        <p class="underline"></p>
                                                  </div>
                                            [[!AjaxForm? 
                                              &form=`tpl.AjaxForm.example` 
                                              &snippet=`FormIt` 
                                              &hooks=`FormItSaveForm,email`
                                              &emailSubject=`Тестовое сообщение`
                                              &emailTo=`mail@bsnsweb.ru`
                                              &emailFrom=`no-reply@mysite.com`
                                              &emailTpl=`tpl.email`
                                              &validate=`name:minLength=^2^,message:minLength=^10^`
                                              &validationErrorMessage=`В форме содержатся ошибки!`
                                              &successMessage=`Сообщение успешно отправлено`
                                            ]]
                                                </div>
                                                  </section>
                                                    [[$contacts]]
                                                    [[$footer-copyright]]
                                                </div>
                                            
                                                [[$footer-links]]
                                            </body>
                                            </html>
                                            
                                            Прилагаю ответ с сервера на отправку формы
                                            itchief.ru/assets/uploadify/5/f/1/5f1545e8ba208ceecef7f08b7f7f7e5e.png
                                            1. Александр Мальцев
                                              29 февраля 2020, 09:22
                                              Проверьте, есть ли ошибки в журнале ошибок MODX. Также следует проверить настройки почты в системных настройках MODX. Отправка почты выполняется в соответствии с ними. Для этого в админке нажмите на значок шестеренки, выберите пункт «Системный настройки». На открывшейся странице выберите раздел «core» и подраздел «Почта» и посмотрите что у вас там настроено.
                                              1. Sergey Net
                                                27 июня 2020, 22:10
                                                Здравствуйте Александр!
                                                А не могли бы вы рассказать немного подробнее — как именно там (core — почта) все должно быть настроено?
                                                1. Александр Мальцев
                                                  28 июня 2020, 11:19
                                                  Здравствуйте! Тут всё просто. Отправку писем рекомендуется осуществлять через SMTP. Для этого вы должны найти на сайте почтового сервиса или хостинга (если почта настроена там) параметры и ввести их в MODX. Алгоритм действий здесь будет такой же как при настройке обычной почтовой программы для работы через SMTP.
                                                  Например, для настройки почты для отправки писем через SMTP Яндекса необходимо:
                                                  — перевести в состяние «Да» ключ «Использовать SMTP» (mail_use_smtp);
                                                  — указать SMTP хост (mail_smtp_hosts) — smtp.yandex.ru:465;
                                                  — задать номер порта для SMTP сервера (mail_smtp_port) — 465;
                                                  — указать SMTP префикс для соединений (mail_smtp_prefix) — ssl;
                                                  — включить SMTP аутентификацию (mail_smtp_auth), т.е. установить этому параметру значение «Да»;
                                                  — ввести имя пользователя используемого при SMTP авторизации (mail_smtp_user) – no-reply@itchief.ru;
                                                  ввести пароль используемый при SMTP авторизации (mail_smtp_pass).
                                                  1. Sergey Net
                                                    28 июня 2020, 19:33
                                                    Спасибо Александр! Да, почта работает.
                                                    Респект вам и уважуха! вы прям как добрый самаритянин помогающий путникам:)
                                                    Сейчас таких днем с огнем не сыщешь!
                                                    Если вам нужно будет где-то на каком-то сервисе поставить отзыв, то киньте ссылку — поставлю:)

                                                    P.S — раз уж можно пользоваться вашими добротой и осведомленностью, хочу уточнить — если у меня есть вопрос то я должен найти подходящую тему на вашем сайте и в комментариях спросить, правильно? Или есть какие-то другие способы?
                                                    1. Александр Мальцев
                                                      04 июля 2020, 15:54
                                                      Пожалуйста! Если вы отметите сайт на Яндексе, в социальных сетях или каких-то других сервисах добрым словом, то буду рад.
                                                      Если что-то хотите спросить и это соответствует этой теме, то в комментариях. Если такой темы нет, то создайте вопрос. Такая возможность есть.
                                            2. Zulya
                                              08 февраля 2020, 00:45
                                              Здравствуйте, Александр!
                                              У меня не сохраняются форма с заполненными полями в админке, если в html-е формы в action прописана другая страница.
                                              Например,
                                              <form action="[[~1006]]" method="post">
                                              А сама форма расположена на странице 1005.
                                              Вы можете спросить зачем в action я указываю 1006, а не 1005 (или не оставляю пустым).
                                              Потому что после нажатия кнопки Отправить, на странице 1006, происходит вывод ресурсов, то есть, с помощью формы я хочу сохранить данные формы в админке, а также выполнить выборку ресурсов на странице 1006.

                                              Для сохранения данных в базе я использую хук FormItSaveForm, но не помогает.

                                              Возникает вопрос, как заставить FormIt сохранять данные формы?
                                              1. Александр Мальцев
                                                08 февраля 2020, 15:00
                                                Здравствуйте.
                                                Если вы используете AjaxForm, то атрибут action не используется, т.к. форма отправляется на сервер через AJAX. Если использовать просто FormIt без AjaxForm, то action должен указывать на ресурс, в котором расположен вызов сниппета FormIt чтобы он мог получить данные и обработать их.
                                                1. Zulya
                                                  08 февраля 2020, 20:23
                                                  Здравствуйте, Александр!
                                                  Да, используется просто FormIt без AjaxForm. А возможно ли написать вспомогательный сниппет, который будет сохранять данные формы FormIt в базе и тем самым передавать данные формы на страницу 1006?
                                                  1. Александр Мальцев
                                                    10 февраля 2020, 06:21
                                                    Здравствуйте!
                                                    Данные же хранятся в базе. Вам нужно просто написать хук для FormIt, который будет получать данные с формы и заносить их в базу для ресурса 1006, и если нужно делать редирект на этот ресурс. При этом в action должна быть ссылка на ресурс, в котором находится вызов сниппета FormIt, который всё это будет делать. Если он находится на 1006, то оставляйте это значение.
                                                    1. Zulya
                                                      10 февраля 2020, 12:49
                                                      Спасибо!
                                              2. Антон
                                                06 февраля 2020, 12:58
                                                Добрый день Александр. Прошу вашей помощи, при отправки формы страница перезагружается и прокручивается на верх, то есть Ajax не срабатывает. При этом письмо отправляется и благополучно приходит на почту. Сделано все по инструкции с этой статьи, JQuery подключен, версия MODX последняя, никаких ошибок в консоли нет — только в разделе «VERBOSE» выдает следующие сообщения:
                                                [Violation] Avoid using document.write(). и [Violation] Parser was blocked due to document.write(
                                                1. Александр Мальцев
                                                  06 февраля 2020, 13:29
                                                  Добрый день! Это в браузере Google Chrome? Это сообщение означает что браузер блокирует cross-origin скрипт, который вызывается через «document.write».
                                                  Применительно в этом случае браузер блокирует вызов скриптов, которые вызываются в js-скриптах компонента AjaxForm через «document.write». В основном это случается, когда устройство имеет плохое сетевое подключение.
                                                  В AjaxForm данным образом подключаются 2 скрипта:
                                                  jquery.form.min.js
                                                  jquery.jgrowl.min.js
                                                  Вы их можете просто самостоятельно подключить до подключения js-файла компонента AjaxForm:
                                                  <script src="path/to/jquery.form.min.js"></script>
                                                  <script src="path/to/jquery.jgrowl.min.js"></script>
                                                  В этом случае они не будут подключать через «document.write».
                                                  Другой вариант дождаться пока разработчик компонента поправит этот момент, и реализует их подключение по-другому, например используя метод appendChild.
                                                  1. Антон
                                                    17 февраля 2020, 13:50
                                                    Александр спасибо за доступное объяснение, Вы абсолютно правы по каким-то причинам Chrome не хотел подключать скрипты. Так же еще пришлось перенести script подключения jquery в раздел head (изначально был подключен перед закрывающим тегом body) и все заработало.
                                                2. Паша
                                                  06 февраля 2020, 07:02
                                                  На хостинге работает отправка почты с сайта только при помощи функции PHP mail(). При отправке заявки появляется надпись «Форма успешно отправлена». Хотя в &successMessage указан другой текст. На почту заявки не приходят. В файлах логов появляется "/core/components/formit/src/FormIt/Hook/Email.php: 322) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail." Подскажите, пожалуйста, как настроить отправку при помощи функции PHP mail().
                                                  1. Александр Мальцев
                                                    06 февраля 2020, 13:33
                                                    По сообщению, которое выдаёт компонент FormIt, у вас на хостинге просто не подключена функция mail. Он её не может запустить, и, следовательно отправить письмо.
                                                    1. Паша
                                                      06 февраля 2020, 08:20
                                                      Хостинг ответил «Попытка отправки письма со стороны Вашего сайта обрывается еще до связи с почтовым сервером».
                                                    2. Саша
                                                      24 января 2020, 21:58
                                                      Здравствуйте, помогите пожалуйста, почему-то перестала работать форма обратной связи, но недавно все работало хорошо. Код вызова сниппета в AjaxForm почему-то отсутствует, посмотрел все коды в AjaxForm и Formlt и так его и не нашел куда отправлять сообщение (Эмайл), всегда эмайл был указан в Приложении — Конфигурация куда отправлять. Вот такой код в чанки AjaxForm:

                                                      <form action="[[~[[*id]]]]" class="callback-form" id="callbackForm">
                                                                  <div class="grid">
                                                                    <div class="column one-half-tablet form-group-md">
                                                                      <input class="form-input name" type="text" name="name" placeholder="Ваше имя">
                                                                    </div>
                                                                    <div class="column one-half-tablet form-group-md">
                                                                      <input class="form-input phone" type="phone"  name="phone" placeholder="Ваш номер">
                                                                    </div>
                                                                  </div>
                                                                  <div class="form-group">
                                                                    <textarea class="form-input"  name="message" placeholder="Ваши пожелания"></textarea>
                                                                  </div>
                                                                  <div class="grid grid-align-center">
                                                                    <div class="column one-half-tablet form-group">
                                                                      <label class="checkbox">
                                                                        <input class="checkbox-input" type="checkbox" checked>
                                                                        <div class="checkbox-indicator"></div><span class="checkbox-label">Я даю согласие на обработку персональных данных</span>
                                                                      </label>
                                                                      [[!recaptchav2_render]]
                                                                        <span class="error_g-recaptcha-response error">[[!+fi.error.recaptchav2_error]]</span>
                                                                    </div>
                                                                    <div class="column one-half-tablet">
                                                                      <button class="btn btn--third btn--block btn--semibold" onclick="yaCounter51621158.reachGoal('send_query'); ga ('send', 'event', 'send_query', 'page2');" type="submit">Отправить</button>
                                                                    </div>
                                                                  </div>
                                                                </form>

                                                      а вот такой код в сниппете AjaxForm:

                                                      if (!$modx->loadClass('ajaxform', MODX_CORE_PATH . 'components/ajaxform/model/ajaxform/', false, true)) {
                                                          return false;
                                                      }
                                                      $AjaxForm = new AjaxForm($modx, $scriptProperties);
                                                      
                                                      $snippet = $modx->getOption('snippet', $scriptProperties, 'FormIt', true);
                                                      $tpl = $modx->getOption('form', $scriptProperties, 'tpl.AjaxForm.example', true);
                                                      $formSelector = $modx->getOption('formSelector', $scriptProperties, 'ajax_form', true);
                                                      $objectName = $modx->getOption('objectName', $scriptProperties, 'AjaxForm', true);
                                                      $AjaxForm->loadJsCss($objectName);
                                                      
                                                      /** @var pdoTools $pdo */
                                                      if (class_exists('pdoTools') && $pdo = $modx->getService('pdoTools')) {
                                                          $content = $pdo->getChunk($tpl, $scriptProperties);
                                                      } else {
                                                          $content = $modx->getChunk($tpl, $scriptProperties);
                                                      }
                                                      if (empty($content)) {
                                                          return $modx->lexicon('af_err_chunk_nf', array('name' => $tpl));
                                                      }
                                                      
                                                      // Add selector to tag form
                                                      if (preg_match('#<form.*?class=(?:"|\')(.*?)(?:"|\')#i', $content, $matches)) {
                                                          $classes = explode(' ', $matches[1]);
                                                          if (!in_array($formSelector, $classes)) {
                                                              $classes[] = $formSelector;
                                                              $classes = preg_replace(
                                                                  '#class=(?:"|\')' . $matches[1] . '(?:"|\')#i',
                                                                  'class="' . implode(' ', $classes) . '"',
                                                                  $matches[0]
                                                              );
                                                              $content = str_ireplace($matches[0], $classes, $content);
                                                          }
                                                      } else {
                                                          $content = str_ireplace('<form', '<form class="' . $formSelector . '"', $content);
                                                      }
                                                      
                                                      // Add method = post
                                                      if (preg_match('#<form.*?method=(?:"|\')(.*?)(?:"|\')#i', $content)) {
                                                          $content = preg_replace('#<form(.*?)method=(?:"|\')(.*?)(?:"|\')#i', '<form\\1method="post"', $content);
                                                      } else {
                                                          $content = str_ireplace('<form', '<form method="post"', $content);
                                                      }
                                                      
                                                      // Add action for form processing
                                                      $hash = md5(http_build_query($scriptProperties));
                                                      $action = '<input type="hidden" name="af_action" value="' . $hash . '" />';
                                                      if ((stripos($content, '</form>') !== false)) {
                                                          if (preg_match('#<input.*?name=(?:"|\')af_action(?:"|\').*?>#i', $content, $matches)) {
                                                              $content = str_ireplace($matches[0], '', $content);
                                                          }
                                                          $content = str_ireplace('</form>', "\n\t$action\n</form>", $content);
                                                      }
                                                      
                                                      // Save settings to user`s session
                                                      $_SESSION['AjaxForm'][$hash] = $scriptProperties;
                                                      
                                                      // Call snippet for preparation of form
                                                      $action = !empty($_REQUEST['af_action'])
                                                          ? $_REQUEST['af_action']
                                                          : $hash;
                                                      
                                                      $AjaxForm->process($action, $_REQUEST);
                                                      
                                                      // Return chunk
                                                      return $content;
                                                      1. Александр Мальцев
                                                        26 января 2020, 09:47
                                                        Здравствуйте! Если отсутствует код вызова сниппета AjaxForm, то его нужно добавить или откатить сайт на предыдущую дату, где он присутствовал.
                                                        Настройки почты находятся в системных настройках в разделе «Почта».
                                                      2. Ivan
                                                        22 января 2020, 00:45
                                                        Здравствуйте! не подскажете, на сайте такая проблема: настроили отправку формы обратной связи через AjaxForm по SMTP на MODx Revo. Письмо отправляется, только при этом сама форма подвисает и сообщение об отправке не выводится. На почту при этом всё приходит. Ошибок в логах нигде никаких нет — ни на сервере, ни в консоли хрома, ни в админке Модх. Всё уже перерыли, даже не знаю куда копать дальше) Буду благодарен за любой совет, заранее, спасибо!
                                                        1. Ivan
                                                          22 января 2020, 15:26
                                                          Разобрался) Если кому интересно, помогло обновление движка до актуальной версии ;)
                                                          1. Александр Мальцев
                                                            23 января 2020, 14:57
                                                            Отлично!
                                                        2. Елена Туркина
                                                          26 декабря 2019, 00:19
                                                          Доброго времени суток! в логах такая ошибка [2019-12-23 09:49:35] (ERROR @ /var/www/site56/data/www/site56.ru/core/components/formit/src/FormIt/Hook/Email.php: 303) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                          письма на почту не отправляются. в базу не сохраняются. нЕ подскажите, как ее решить?
                                                          1. Александр Мальцев
                                                            26 декабря 2019, 08:40
                                                            Для отправки писем необходимо наличие php функции mail. Если хостинг бесплатный, то они обычно отключают возможность отправки писем. Если хостинг платный, то напишите в техподдержку, чтобы вам включили данную функцию.
                                                            1. Елена Туркина
                                                              26 декабря 2019, 11:45
                                                              Спасибо)
                                                          2. Людмила
                                                            25 декабря 2019, 00:03
                                                            Здравствуйте! Обнаружила, почему не подключался у меня ajax.

                                                            У меня есть свой скрипт, который подключался перед закрытием тега body и вызывал конфликт c default.js.

                                                            Как только я отключила его, всё заработало! Но мне ведь нужно, чтобы и мои скрипты работали… Не сможете помочь?
                                                            Вот мой скрипт:
                                                            jQuery.noConflict();
                                                            (function($) {
                                                            function f_central_panel() {
                                                            $(".right_panel").hide(«slow»);
                                                            $(".left_panel").hide(«slow»);

                                                            $(".button_from_left").hide(«slow»);
                                                            $(".button_from_right").hide(«slow»);

                                                            $(".center_panel").show(«slow»);
                                                            $(".button_go_left").show(«slow»);
                                                            $(".button_go_right").show(«slow»);
                                                            return false;
                                                            };
                                                            function f_left_panel() {
                                                            $(".right_panel").hide(«slow»);
                                                            $(".button_from_right").hide(«slow»);

                                                            $(".left_panel").show(«slow»);
                                                            $(".button_from_left").show(«slow»);


                                                            $(".center_panel").hide(«slow»);
                                                            $(".button_go_left").hide(«slow»);
                                                            $(".button_go_right").hide(«slow»);
                                                            return false;
                                                            };
                                                            function f_right_panel() {
                                                            $(".right_panel").show(«slow»);
                                                            $(".button_from_right").show(«slow»);

                                                            $(".left_panel").hide(«slow»);
                                                            $(".button_from_left").hide(«slow»);


                                                            $(".center_panel").hide(«slow»);
                                                            $(".button_go_left").hide(«slow»);
                                                            $(".button_go_right").hide(«slow»);
                                                            return false;
                                                            };
                                                            $(document).ready(function(){

                                                            /* $('#row_header, #row_footer').click(function(){
                                                            f_central_panel();
                                                            }); */

                                                            $('.button_go_left').click(function(){
                                                            f_left_panel();
                                                            });

                                                            $('.button_from_left').click(function(){
                                                            f_central_panel();
                                                            });

                                                            $('.button_go_right').click(function(){
                                                            f_right_panel();
                                                            });

                                                            $('.button_from_right').click(function(){
                                                            f_central_panel();
                                                            });

                                                            $(window).scroll(function(){
                                                            if ($(this).scrollTop() > 100) {
                                                            $('.scrollup').fadeIn();
                                                            } else {
                                                            $('.scrollup').fadeOut();
                                                            }
                                                            });

                                                            $('.scrollup').click(function(){
                                                            $(«html, body»).animate({ scrollTop: 0 }, 600);
                                                            return false;
                                                            });

                                                            });


                                                            }) (jQuery);
                                                            1. Nik
                                                              25 декабря 2019, 14:43
                                                              Попробуйте заменить $(document).ready(function(){ , в вашем скрипте убирающем конфликты на это — jQuery(function($){
                                                              возможно поможет. Ну и посмотрите что консоль показывает, какие ошибки
                                                              1. Людмила
                                                                25 декабря 2019, 20:57
                                                                Благодарю за ответ. Не успела написать, помогло убрать обертку jQuery.noConflict(); (jQuery);
                                                                И конфликты вроде не появились, всё работает.
                                                            2. IbraimVeliiev
                                                              11 ноября 2019, 23:09
                                                              Привет, Шеф!

                                                              Не отрпавяет почему-то форму. Пробовал smtp и гугла, и яндекса и все равно ошибка.
                                                              Не могу понять в чем принича. На хостинге используется Cpanel. До этого на Plesk все работало. Можете подсказать?

                                                              При отправке вот такая ошибка
                                                              [2019-11-11 23:04:05] (ERROR @ /home/ikincie3/public_html/core/components/formit/src/FormIt/Hook/Email.php : 303) [FormIt] An error occurred while trying to send the email. SMTP connect() fonksiyonu başarısız. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
                                                              В админке отправленные формы сохраняются. Благодарю
                                                              1. Александр Мальцев
                                                                12 ноября 2019, 02:06
                                                                Привет!
                                                                Если учётные данные SMTP сервиса корректные, то обратитесь в техподдержку.
                                                              2. Артем
                                                                22 октября 2019, 15:56
                                                                Александр, добрый день.
                                                                А подскажите мне пожалуйста. Настроил Fomit + FormitSaveForm.
                                                                Мне необходимо что эта сохраненная форма отправлялась на email в виде csv таблицы. Как это лучше реализовать?
                                                                1. Александр Мальцев
                                                                  23 октября 2019, 14:32
                                                                  Привет! Для этого нужно создать хук для FormIt. В этом хуке написать запрос для выборки данных из таблицы formit_forms. После этого посредством перебора данных сформировать из них csv. Затем написать код для отправки csv на почту.
                                                                2. Виктор
                                                                  13 октября 2019, 21:53
                                                                  Сделал Форму с полями. Все работает хорошо, отправляет, проходит проверку (валидацию), выводит сообщение об ошибках.
                                                                  Единственно, если в какие-то поля не заполнены, страница как-бы перезагружается. И если форма была внизу странице, то для того чтобы увидеть сообщения об ошибках, нужно прокрутить страницу вниз. У пользователя может создаться впечатление, что отправка прошла успешно, если он не прокрутит страницу вниз.
                                                                  Как сделать, чтоб фокус оставался на форме?
                                                                  1. Александр Мальцев
                                                                    14 октября 2019, 13:50
                                                                    Если форму реализовали с использованием AjaxForm, то страница не должна перезагружаться. Если страница перезагружается, то необходимо проверить может где-то что-то пропустили.
                                                                    1. Виктор
                                                                      14 октября 2019, 22:50
                                                                      Спасибо за ответ.
                                                                      Установил AjaxForm
                                                                      Максимально упростил страницу, чтоб уж ничего не влияло.
                                                                      Форму использовал которую установилась с AjaxForm.

                                                                      Вот код страницы много
                                                                      сделал чтоб имитировать длинную страницу.
                                                                      <html>
                                                                      <head>
                                                                          <title>test</title>
                                                                      </head>
                                                                      <body>
                                                                          <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br />  
                                                                          <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br />  
                                                                          <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br />  
                                                                          <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br />  
                                                                          <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br />  
                                                                          <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br />  
                                                                          <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br />  
                                                                          <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br />  
                                                                      
                                                                          [[!AjaxForm?
                                                                          &snippet=`FormIt`
                                                                          &form=`tpl.AjaxForm.example`
                                                                          &hooks=`email`
                                                                          &redirectTo=`57`
                                                                          &emailTpl=`email_test`
                                                                          &emailTo=`ky@gmail.com`
                                                                          &emailSubject=`Письмо с сайта`
                                                                          &validate=`name:required,email:required`
                                                                          ]]
                                                                      
                                                                      </body>
                                                                      </html>
                                                                      
                                                                      Все равно если поля не проходят проверку, сообщения об ошибке/ах выводится, но страница «прокручивается» верх — оказывается вверху.

                                                                      И еще с Formit если поля заполнены, redirectTo срабатывало и переходила на страницу 57, а с AjaxForm уже нет. Просто отправляется письмо и очищаетси и тоже в верх страници.

                                                                      тестирую все на Open Server
                                                                      1. Александр Мальцев
                                                                        15 октября 2019, 13:58
                                                                        В коде нет подключения библиотеки jQuery, а AjaxForm от неё зависит.
                                                                        1. Людмила
                                                                          24 декабря 2019, 12:31
                                                                          Александр, а у меня такая же проблема, но jQuery подключен, и не решается.
                                                                          Вот здесь: _https://copy.oartemi-slovo.ru/f1.html
                                                                          1. Александр Мальцев
                                                                            24 декабря 2019, 12:58
                                                                            У вас к странице не корректно подключен javascript-файл компонента AjaxForm (_https://copy.oartemi-slovo.ru/assets/components/ajaxform/js/default.js). Такая же проблема и с CSS-файлом этого компонента.
                                                                            1. Людмила
                                                                              24 декабря 2019, 13:43
                                                                              0:/oartemi-slovo.ru/htdocs/copy/core/components/ajaxform/ здесь у меня устанавливается ajaxform, но в этой директории нет директории js и никаких js скриптов и css нет. AjaxForm с modstore.pro ничем не отличается от моего, с modx.com.
                                                                              1. Александр Мальцев
                                                                                24 декабря 2019, 14:04
                                                                                А при чём тут core? Эта же ссылка на клиентскую часть компонента. Откройте в браузере инструменты разработчика и посмотрите на вкладке Elements или Network, что js-скрипт отдаётся с кодом 404, т.е. не найден.
                                                                                1. Людмила
                                                                                  24 декабря 2019, 14:11
                                                                                  Так и я про то же: у меня нет этого скрипта default.js, как и всей папки ajaxform в assets/components. Конечно будет 404, если их нет. Но как такое может быть? При установке AjaxForm на домен oartemi-slovo.ru есть и папка, и скрипты. Вручную разве перекинуть их на поддомен copy?
                                                                                  1. Александр Мальцев
                                                                                    24 декабря 2019, 14:28
                                                                                    Проверьте, может вы что-то не учли при создании поддомена для разработки сайта.
                                                                                    1. Александр Мальцев
                                                                                      24 декабря 2019, 14:28
                                                                                      Проверьте, может вы что-то не учли при создании поддомена для разработки сайта.
                                                                                      1. Людмила
                                                                                        24 декабря 2019, 14:21
                                                                                        вручную на хостинге скопировала папку ajaxform, форма изменилась, copy.oartemi-slovo.ru/assets/components/ajaxform/css/default.css подключился, а TypeError: $.jGrowl is undefined initialize copy.oartemi-slovo.ru/assets/components/ajaxform/js/default.js:12
                                                                                        jQuery 4
                                                                                        i
                                                                                        fireWith
                                                                                        ready
                                                                                        J

                                                                                        дает что-то такое в консоли
                                                                                        1. Александр Мальцев
                                                                                          24 декабря 2019, 15:11
                                                                                          Если у вас при установке компонента он устанавливается в основной сайт, значит нужно просто настроить MODX для правильной работе на этом поддомене и только потом уже устанавливать компоненты.
                                                                                          1. Людмила
                                                                                            24 декабря 2019, 15:45
                                                                                            oartemi-slovo.ru/uchimsya.html вот на домене такая же ошибка.
                                                                                  2. Людмила
                                                                                    24 декабря 2019, 13:17
                                                                                    Благодарю за ответ, но у меня по этому пути нет даже директории ajaxform (https://copy.oartemi-slovo.ru/assets/components/ajaxform/js/default.js) ajaxform установлен AjaxForm 1.1.9-pl с modx.com.

                                                                                    modstore.pro (https://modstore.pro/extras/) у меня есть в поставщиках, но AjaxForm с него не вижу при поиске в пакетах.

                                                                                2. Виктор
                                                                                  15 октября 2019, 20:28
                                                                                  Спасибо! Помогли, получилось.
                                                                          2. Дмитрий
                                                                            09 октября 2019, 14:36
                                                                            Добрый день. Подскажите пожалуйста куда нужно вписать email админа на который должны приходить письма, ато не приходят.
                                                                            1. Александр Мальцев
                                                                              09 октября 2019, 15:30
                                                                              Если письма всё равно не будут приходить, то необходимо настроить почту в MODX. Осуществляется это с помощью настройки системных параметров в админке. Все настройки собраны в разделе core -> Почта.
                                                                              1. Александр Мальцев
                                                                                09 октября 2019, 14:47
                                                                                Привет!
                                                                                Это определяется в параметре emailTo:
                                                                                &emailTo=`myemail@mail.ru`
                                                                                
                                                                              2. Карен Григорян
                                                                                26 августа 2019, 16:58
                                                                                Ахтунг, месяц протестированная форма проработала и сейчас нужно выгрузить данные, но они почему-то не сохранились в базе (( подскажите как-то можно их вытащить?

                                                                                [[!AjaxForm?
                                                                                &snippet=`FormIt`
                                                                                &form=`formTpl3`
                                                                                &hooks=`spam,FormSave,FormItAutoResponder`
                                                                                &fiarFrom=`noreply@domain.ru`
                                                                                &fiarSender=`noreply@domain.ru`
                                                                                &fiarFromName=`Оргкомитет`
                                                                                &fiarTpl=`MyEmailChunk3`
                                                                                &fiarReplyTo=`noreply@domain.ru`
                                                                                &fiarSubject=`Спасибо за регистрацию`
                                                                                &validationErrorMessage=`Поле содержит ошибку`
                                                                                &successMessage=`Спасибо за регистрацию`
                                                                                &validate=`firstName:required,lastName:required,middleName:required,phone:required,country:required,city:required,email:email:required,address:required,zipcode:required,pd:required`
                                                                                ]]

                                                                                Письма уходили респонденту, если бы можно было их вытащить…
                                                                                1. Vasily
                                                                                  03 апреля 2019, 13:44
                                                                                  Шеф, столкнулся с проблемой в самой админке. В новой версии FormIt (Приложения > FormIt) — пропали идентификаторы заявок.
                                                                                  Вопрос: — Как их сохранённый ID в FormItSaveForm (Приложения > FormIt) включить обратно?

                                                                                  Пробовал включить в hook на получение savedForm.id обращения, но в ответ пусто, может есть какой способ например в админку тащить из бд sql запросом, если никак
                                                                                  $sql = "SELECT * FROM `modx_formit_forms` WHERE `id` ORDER BY `modx_formit_forms`.`id` DESC LIMIT 1;
                                                                                  $select_forms = $modx->exec($sql);
                                                                                  print("ID: $select_forms");
                                                                                  
                                                                                  SELECT * FROM `modx_formit_forms` WHERE `id` ORDER BY `modx_formit_forms`.`id` DESC LIMIT 1
                                                                                  1. Александр Мальцев
                                                                                    03 апреля 2019, 14:15
                                                                                    Лучше откатить версию FormIt на предыдущую.
                                                                                    1. Vasily
                                                                                      03 апреля 2019, 14:42
                                                                                      То есть я установил MODX v2.7.1, загрузил FormIt, далее надо где-то искать/вытаскивать старую версию 4.1.0? А можно без откатов, а то в новой версии есть и улучшения, но вот то, что ID убрали — беда
                                                                                      1. Александр Мальцев
                                                                                        03 апреля 2019, 15:41
                                                                                        В MODX 2.6.5 + FormIt 4.2.1 всё нормально. ID есть, ничто никуда не убрали.
                                                                                        Может, какая-та проблема при использовании MODX 2.7.1. Версия 2.7 содержит достаточно много изменений, и её использовать в продакшене наверно пока не стоит, по крайней мере, в ближайшее время. Нужно по крайне мере дождаться доработки совместимости используемых дополнений с версией 2.7 и выход следующего релиза 2.7.x.
                                                                                        1. Vasily
                                                                                          03 апреля 2019, 16:04
                                                                                          В новой начитается с Name. ID нет. :(

                                                                                          А в старой ID, FORM, Значения, Дата, HASH Key
                                                                                          1. Александр Мальцев
                                                                                            04 апреля 2019, 14:57
                                                                                            Не знаю что у вас с таблицей formit_forms. FormIt 4.2.1 совместима с MODX 2.7. Установил MODX 2.7.1, FormIt 4.2.1 — всё отлично работает. Никаких name нет в базе данных. Скриншот структуры таблицы.
                                                                                            1. Vasily
                                                                                              04 апреля 2019, 17:58
                                                                                              А form в БД разве не Имя формы? Интересует как раз ID в самой CMS. Спасибо
                                                                                              1. Александр Мальцев
                                                                                                08 апреля 2019, 15:20
                                                                                                Разобрался с данной проблемой. Для того чтобы перейти на FormIt 4 сначала необходимо поставить FormIt 3 версии (например, 3.0.3). В этой версии имеет код, который обновляет структуру таблицы formit_forms и др. После этого можно установить FormIt 4 версии, и все записи в таблице formit_forms будут отображаться на вкладке «Формы» страницы «FormIt».
                                                                                                1. Vasily
                                                                                                  08 апреля 2019, 16:05
                                                                                                  Шеф, сделал всё по вашей инструкции (даже начиная с версии formit-2.2.6), но это не решило данную проблему
                                                                                                  1. Александр Мальцев
                                                                                                    12 апреля 2019, 14:47
                                                                                                    Значит сделали как-то не так. Изначально у вас установлена версия FormIt 4. Теперь вам необходимо:
                                                                                                    1. Сначала необходимо загрузить дополнение formIt 2 версии (например, 2.2.7, используя транспортный пакет formit-2.2.7-pl.transport.zip).
                                                                                                    2. Нажать кнопку «Деинсталлировать», используя метод «Сохранение».
                                                                                                    3. Перейти в загруженные версии FormIt и удалить все пакеты, кроме 2.2.7.
                                                                                                    4. Установить FormIt 2.2.7
                                                                                                    5. Загрузить дополнение formIt 3 версии (например, 3.0.3, используя транспортный пакет formit-3.0.3-pl.transport.zip).
                                                                                                    6. Установить FormIt 3.0.3 (на этом шаге произойдёт обновление структуры таблицы formit_forms и др.)
                                                                                                    7. Загрузить FormIt 4.2.2 используя поставщика modx.com
                                                                                                    8. Установить FormIt 4.2.2
                                                                                            2. Vasily
                                                                                              03 апреля 2019, 16:15
                                                                                              Будем, ждать_
                                                                                    2. anton
                                                                                      19 марта 2019, 11:59
                                                                                      Здравствуйте!

                                                                                      Подскажите как задать вывод разных сообщений (в зависимости от условий) об ошибках полей в validationErrorMessage

                                                                                      Спасибо!
                                                                                      1. Александр Мальцев
                                                                                        19 марта 2019, 15:09
                                                                                        Здравствуйте!
                                                                                        Выполнение этой задачи можно выполнить аналогично решению, приведённому в этом комментарии.
                                                                                        1. anton
                                                                                          19 марта 2019, 16:15
                                                                                          Александр, спасибо! Понял логику, но не получается…

                                                                                          Как подставить значение в зависимости от какого поля идет ошибка?
                                                                                          1. Александр Мальцев
                                                                                            20 марта 2019, 14:49
                                                                                            Можно сделать намного проще (с помощью JavaScript). В AjaxForm есть файл «default.js». По умолчанию он находится в «/assets/components/ajaxform/js/».
                                                                                            Его можно скопировать и переименовать, например, в «default2.js».
                                                                                            После этого его указать сниппету AjaxForm:
                                                                                            [[!AjaxForm?
                                                                                              &frontend_js = `[[+assetsUrl]]js/default2.js`
                                                                                              ...
                                                                                            ]]
                                                                                            
                                                                                            После этого его открыть и отредактировать.
                                                                                            Для этого нужно перейти на строчку, в котором обрабатывается успешный ответ с сервера с «response.success = false»:
                                                                                            if (!response.success) {
                                                                                                ...
                                                                                            }
                                                                                            
                                                                                            В нем можете написать или отредактировать существующую логику на ту, которая нужна. Все данные пришедшие с сервера находятся в переменной response.
                                                                                      2. Женёк
                                                                                        25 февраля 2019, 14:39
                                                                                        Приветствую!
                                                                                        В форме есть 2 обязательных поля.
                                                                                        При заполнении одного из полей, второе должно становится не обязательным.
                                                                                        Как такое можно сделать?
                                                                                        1. Александр Мальцев
                                                                                          02 марта 2019, 14:18
                                                                                          Привет!
                                                                                          Для этого нужно создать кастомный валидатор (сниппет), например, имеющий имя requiredOne:
                                                                                          <?php
                                                                                          
                                                                                          $isValueEmpty = empty($value); // определяем, пустое ли значение 1 поля
                                                                                          
                                                                                          // если да, то определяем, пустое ли значение 2 поля
                                                                                          if ($isValueEmpty) {
                                                                                            $isValueEmpty = empty($validator->fields[$param]);
                                                                                          }
                                                                                          
                                                                                          // если оба значения пусты, то выводим ошибку
                                                                                          if ($isValueEmpty) {
                                                                                            $validator->addError($key, $validator->formit->config[$key.'-requiredOneMessage']);
                                                                                            return false;
                                                                                          }
                                                                                          
                                                                                          return true;
                                                                                          
                                                                                          Далее в HTML форму добавляем два поля, например, таких:
                                                                                          <div class="control-group">
                                                                                            <label class="control-label" for="field1">Поле 1</label>
                                                                                            <div class="controls">
                                                                                              <input type="text" id="field1" name="field1" value="" placeholder="">
                                                                                              <span class="error_field1"></span>
                                                                                            </div>
                                                                                          </div>
                                                                                            
                                                                                          <div class="control-group">
                                                                                            <label class="control-label" for="field2">Поле 2</label>
                                                                                            <div class="controls">
                                                                                              <input type="text" id="field2" name="field2" value="" placeholder="">
                                                                                              <span class="error_field2"></span>
                                                                                            </div>
                                                                                          </div>
                                                                                          
                                                                                          В вызов сниппета добавляем следующие параметры:
                                                                                          [[!AjaxForm? 
                                                                                            &form=`tpl.AjaxForm` 
                                                                                            &snippet=`FormIt` 
                                                                                            &customValidators=`requiredOne`
                                                                                            &validate=`field1:requiredOne=field2,field2:requiredOne=field1`
                                                                                            &field1-requiredOneMessage=`Укажите значение 1 полю`
                                                                                            &field2-requiredOneMessage=`или установите значение 2 полю`
                                                                                            ...
                                                                                          ]]
                                                                                          В вызове сниппета field1 и field2 необходимо изменить на названия своих полей.
                                                                                        2. Паша
                                                                                          13 февраля 2019, 17:43
                                                                                          Здравствуйте!
                                                                                          Подскажите, пожалуйста, сделал все как описано в данной статье. Но заявки на почту не приходят. Хотя и появляются в админке сайта.
                                                                                          [[!AjaxForm?
                                                                                             &snippet=`FormIt`
                                                                                             &hooks=`FormItSaveForm,email`
                                                                                             &emailFrom=`postmaster@site.com`
                                                                                             &form=`tpl.AjaxForm`
                                                                                             &emailTpl=`mes-tpl`
                                                                                             &emailTo=`info@site.com`
                                                                                             &emailSubject=`Заказ звонка с сайта`
                                                                                             &validate=`phone:required`
                                                                                             &validationErrorMessage=`Ошибка. Пожалуйста, повторите отправку заявки`
                                                                                             &successMessage=`Спасибо. Заявка успешно отправлена, наши специалисты свяжутся с Вами.`
                                                                                          ]]
                                                                                          
                                                                                          Чанк tpl.AjaxForm
                                                                                          <form action="" method="post" class="ajax_form af_example">
                                                                                                  <input type="hidden" name="title" value="[[*pagetitle]]">
                                                                                          	<input type="hidden" name="link" value="[[*uri]]">
                                                                                              <div class="form-group">
                                                                                                  <div class="controls">
                                                                                                      <input type="text" id="af_name" name="name" value="" placeholder="Ваше имя" class="form-control oder_call_hat"/>
                                                                                                      <span class="error_name"></span>
                                                                                                  </div>
                                                                                              </div>
                                                                                          
                                                                                              <div class="form-group">
                                                                                                  <div class="controls">
                                                                                                      <input type="text" id="af_phone" name="phone" required="" value="" placeholder="Ваш телефон" class="form-control oder_call_hat"/>
                                                                                                      <span class="error_phone"></span>
                                                                                                  </div>
                                                                                              </div>
                                                                                          
                                                                                              <div class="form-group">
                                                                                                  <div class="controls">
                                                                                                      <textarea id="af_message" name="message" placeholder="Сообщение" class="form-control oder_call_hat_m" rows="5"></textarea>
                                                                                                      <span class="error_message"></span>
                                                                                                  </div>
                                                                                              </div>
                                                                                          
                                                                                              <div class="form-group">
                                                                                                  <div class="controls m_hat_btn">
                                                                                                      <button type="submit"  class="btn btn-primary sub_btn oder_call_hat_btn">Отправить</button>
                                                                                                  </div>
                                                                                              </div>
                                                                                          </form>
                                                                                          
                                                                                          Чанк mes-tpl
                                                                                          <p><strong>ЗАКАЗАТЬ ЗВОНОК</strong></p>
                                                                                          <hr/>
                                                                                          <p><strong>От кого:</strong> [[+name]]</p>
                                                                                          <p><strong>Телефон:</strong> [[+phone]]</p>
                                                                                          <p><strong>Сообщение:</strong> [[+message]]</p>
                                                                                          <p><strong>Со страницы:</strong> <a href="https://site.com/[[+link]]">[[+title]]</a></p>
                                                                                          <hr/>
                                                                                          <p><em>Заявка с сайта <strong><a href="https://site.com">Site</a></strong></em></p>
                                                                                          
                                                                                          При отправке заявки через сайт появляется сообщение «Форма успешно отправлена » (несмотря на то, что в &successMessage=`Спасибо. Заявка успешно отправлена, наши специалисты свяжутся с Вами.` другой текст. Но заявки на почту не приходят. В админке сайта в приложении FormIt заявка появляется. Почта, которая указана &emailFrom с доменом сайта на хостинге создана и работает.
                                                                                          1. Александр Мальцев
                                                                                            14 февраля 2019, 15:49
                                                                                            Здравствуйте!
                                                                                            Проверьте, нет ли ошибок в журнале ошибок MODX. А также стоит обратить внимание на папку спам, может туда письма попадают.
                                                                                            1. Паша
                                                                                              15 февраля 2019, 11:56
                                                                                              Спасибо за данный материал и ваш ответ. Попробовал перенести сайт на другой домен и хостинг — там все работает хорошо. Значит проблема не в коде. А хостинге.
                                                                                          2. Игорь
                                                                                            08 февраля 2019, 23:53
                                                                                            Здравствуйте, есть 2 формы на одной странице:
                                                                                            Вызов 1-й формы:
                                                                                            [[!FormIt?
                                                                                            	&hooks=`spam,email`
                                                                                            	&emailTpl=`patent-form-main`
                                                                                            	&emailSubject=`Заявка с сайта [[++site_name]]`
                                                                                            	&emailToName=`Мой сайт`
                                                                                            	&emailTo=`[[++emailsender]]`
                                                                                            	&successMessage=`Спасибо, вашe сообщение отправленно.`
                                                                                            	&validationErrorMessage=`*Обязательные поля не заполнены.`
                                                                                            	&customValidators=`patent-validation`
                                                                                            	&validate=`first_name:patent-validation,mail:patent-validation,telephone:patent-validation,opisanie:patent-validation,upload: formit2checkfile`
                                                                                            	&submitVar=`submit_button`
                                                                                            ]]
                                                                                            
                                                                                            Под формой вывод ошибки или успешной отправки
                                                                                            [[!+fi.successMessage:notempty=`<p>[[!+fi.successMessage]]</p>`]] 
                                                                                            [[!+fi.validation_error_message:notempty=`<p>[[!+fi.validation_error_message]]</p>`]]
                                                                                            
                                                                                            Вызов 2-й формы:
                                                                                            [[!FormIt?
                                                                                            	&hooks=`spam,email`
                                                                                            	&emailTpl=`patent-form`
                                                                                            	&emailSubject=`Заявка с сайта [[++site_name]]`
                                                                                            	&emailToName=`Мой сайт`
                                                                                            	&emailTo=`[[++emailsender]]`
                                                                                            	&successMessage=`Спасибо, вашe сообщение отправленно.`
                                                                                            	&validationErrorMessage=`*Обязательные поля не заполнены.`
                                                                                            	&customValidators=`patent-validation`
                                                                                            	&validate=`fio:patent-validation,pochta:patent-validation,phone:patent-validation,info:patent-validation,upload: formit2checkfile`
                                                                                            	&submitVar=`order`
                                                                                            ]]
                                                                                            
                                                                                            Под 2-й формой также есть вывод ошибки или успешной отправки
                                                                                            [[!+fi.successMessage:notempty=`<p>[[!+fi.successMessage]]</p>`]] 
                                                                                            [[!+fi.validation_error_message:notempty=`<p>[[!+fi.validation_error_message]]</p>`]]
                                                                                            Формы работают, письма отправляют, но получается если я заполняю 1-ю форму и не заполню обязательное поле (например имя) тогда под обеими формами выведется *Обязательные поля не заполнены. Подскажите как сделать, чтобы если я не заполнил обязательное поле в 1-й форме — то ошибка выводилась только под первой формой, а не под двумя сразу. Так же и с успешной отправкой.
                                                                                            1. Александр Мальцев
                                                                                              11 февраля 2019, 14:49
                                                                                              Добавить в вызовы сниппетов FormIt параметр placeholderPrefix.
                                                                                              Например, для первого FormIt:
                                                                                              [[!FormIt?
                                                                                                ...
                                                                                                &placeholderPrefix=`fi1.` 
                                                                                              ]]
                                                                                              Например, для второго FormIt:
                                                                                              [[!FormIt?
                                                                                                ...
                                                                                                &placeholderPrefix=`fi2.` 
                                                                                              ]]
                                                                                              После этого соответственно в первой форме заменить префикс всех плейсхолдеров с fi. на fi1.
                                                                                              Например:
                                                                                              ...
                                                                                              <label for="name">
                                                                                                Name: <span class="error">[[!+fi1.error.name]]</span>
                                                                                              </label>
                                                                                              <input type="text" name="name" id="name" value="[[!+fi1.name]]" />
                                                                                              ...
                                                                                              
                                                                                              А во второй с fi. на fi2.
                                                                                              ...
                                                                                              <label for="name">
                                                                                                Name: <span class="error">[[!+fi2.error.name]]</span>
                                                                                              </label>
                                                                                              <input type="text" name="name" id="name" value="[[!+fi2.name]]" />
                                                                                              ...
                                                                                              
                                                                                              1. Игорь
                                                                                                11 февраля 2019, 21:00
                                                                                                Понял, спасибо за помощь
                                                                                            2. IbraimVeliiev
                                                                                              06 февраля 2019, 16:01
                                                                                              Что-то у меня постоянно пишет, что «Форма содержит ошибки»

                                                                                              Форма такая

                                                                                              <form action="" method="post" class="ajax_form af_example form-horizontal">
                                                                                                <div class="form-group">
                                                                                                    <input class="form-control" type="text" id="af_name" name="name" value="" placeholder="Name">
                                                                                                    <span class="error_name"></span>
                                                                                                  </div>
                                                                                                <div class="form-group">
                                                                                                    <input class="form-control" type="email" id="af_email" name="email" value="" placeholder="Email">
                                                                                                    <span class="error_email"></span>
                                                                                                  </div>
                                                                                                <div class="form-group">
                                                                                                  <div class="controls">
                                                                                                     <input class="form-control" type="text" id="af_phone" name="phone" value="" placeholder="Phone number">
                                                                                                    <span class="error_phone"></span>
                                                                                                  </div>
                                                                                                </div>
                                                                                                <div class="form-group">
                                                                                                    <textarea class="form-control" id="af_message" name="message" rows="5"></textarea>
                                                                                                    <span class="error_message"></span>
                                                                                                  </div>
                                                                                                <div class="col-lg-12 text-center">
                                                                                                    <button type="reset" class="btn btn-default">Clear</button>
                                                                                                    <button type="submit" class="btn btn-primary">Send</button>
                                                                                              
                                                                                                </div>
                                                                                              
                                                                                              
                                                                                              
                                                                                              </form>
                                                                                              Вызываю вот так
                                                                                              
                                                                                              [[!AjaxForm?
                                                                                                  &snippet=`FormIt`
                                                                                                  &form=`getquote`
                                                                                                  &hooks=`email`
                                                                                                  &emailSubject=`Тестовое сообщение`
                                                                                                  &emailTo=`::::@gmail.com`
                                                                                                  &validate=`name:required,email:required,message:required`
                                                                                                  &validationErrorMessage=`В форме содержатся ошибки!`
                                                                                                  &successMessage=`Сообщение успешно отправлено`
                                                                                              ]]
                                                                                              
                                                                                              1. Александр Мальцев
                                                                                                07 февраля 2019, 15:07
                                                                                                Так что-то сложно посоветовать, посмотрите может ошибки есть в журнале MODX.
                                                                                                1. IbraimVeliiev
                                                                                                  07 февраля 2019, 15:40
                                                                                                  Шеф, вот логи.

                                                                                                  [2019-02-07 13:38:30] (ERROR @ C:\xampp\htdocs\modx\core\components\formit\src\FormIt\Hook\Email.php: 303) [FormIt] An error occurred while trying to send the email. Could not instantiate mail function.
                                                                                                  1. Александр Мальцев
                                                                                                    08 февраля 2019, 14:02
                                                                                                    Так в логах же всё написано. Ошибка у вас заключается в том, что php не удалось создать экземпляр функции mail. Вместо xampp поставьте локальный веб-сервер, который поддерживает отправку email писем или хотя бы имеет заглушку. Ну, или попробуйте настроить xampp, если в нём это есть.
                                                                                              2. Aleksandr Ustinov
                                                                                                30 января 2019, 21:11
                                                                                                Доброго времени шеф! Подскажите пожалуйста, для своих полей, в частности как в примере номер телефона, как добавить валидацию, в каком файле? И ещё вопрос, если добавляю родной чанк форма отправляется, а если изменяю форму в дизайн сайта, то форма сообщение что форма отправилась, но на самом деле не отправляется.
                                                                                                1. Александр Мальцев
                                                                                                  31 января 2019, 13:24
                                                                                                  Доброго!
                                                                                                  Как сделать валидацию номера телефона приведено в этом комментарии.
                                                                                                  Второй вопрос попробуйте решить посредством очистки кэша.
                                                                                                  1. Aleksandr Ustinov
                                                                                                    01 февраля 2019, 14:39
                                                                                                    Спасибо шеф! Ещё одна проблема. Перенес сайт с локального сервера в интернет, и теперь при отправки — ошибка валидации, форма не отправляется. На локальном сервере форма отправлялась письмо приходило.
                                                                                                    1. Александр Мальцев
                                                                                                      04 февраля 2019, 15:08
                                                                                                      Проверьте почтовые настройки в MODX (Шестерёнка -> Системные настройки -> фильтр «Почта»), а также, чтобы значение email адреса (имя домена) в параметре &emailFrom совпадала с вашим именем домена. Кроме этого стоит проверить поддерживает ли ваш тарифный план хостинга вообще отправку писем.
                                                                                                      1. Aleksandr Ustinov
                                                                                                        01 февраля 2019, 17:00
                                                                                                        Дополнение: в админке сообщение появляется…
                                                                                                  2. Иван
                                                                                                    18 января 2019, 01:27
                                                                                                    Добрый день!
                                                                                                    При выводе формы у меня все на сайте отображается. В чем причина?

                                                                                                    <img
                                                                                                    src=«https://itchief.ru/assets/uploadify/b/7/1/b719a52e6135da8d8788be2b034a0023s.jpg» class=«fancybox thumbnail center»>


                                                                                                    1. Александр Мальцев
                                                                                                      18 января 2019, 04:52
                                                                                                      Добрый! Если вставляешь вызов сниппета в ресурс, то необходимо поставить для этого ресурса галочку «Выполнять теги MODX».
                                                                                                      1. Иван
                                                                                                        18 января 2019, 15:56
                                                                                                        Добрый день! Не нашел где это нужно сделать?
                                                                                                        1. Александр Мальцев
                                                                                                          19 января 2019, 07:23
                                                                                                          Но это для ресурсов, у которых в качестве типа выбран «Тикет».
                                                                                                          Если у вас тип ресурса «Документ», то попробуйте отключить галочку «Использовать HTML-редактор», вставить сниппет и сохранить ресурс.
                                                                                                    2. Vasily
                                                                                                      10 декабря 2018, 13:33
                                                                                                      Александр, здравствуйте, подскажите пожалуйста, как добавить получателя отправившего запрос с сайта в ответном письме?

                                                                                                      Как правильно указать в параметре &fiarCC, чтобы пользователь видел свой ящик?


                                                                                                      Делал так: &fiarCC=`[[+email]]` — в итоге получатель видит вместо своего мыла пустоту, например вот:

                                                                                                      А вот, если же указать &fiarCC=`no-reply@mysite.ru`, то логично там будет указано мыло no-reply@mysite.ru


                                                                                                      Есть ли решение этому?
                                                                                                      1. Александр Мальцев
                                                                                                        11 декабря 2018, 16:28
                                                                                                        Здравствуйте! В MODX сначала обрабатываются внутренние теги. Т.е. тег [[+email]] будет обработан раньше, чем [[!AjaxForm]]. Следовательно, он будет иметь пустое значение.

                                                                                                        В этом случае нужно написать свой хук для FormIt. Пример хука для отправки email приведено в этом комментарии.
                                                                                                        1. Vasily
                                                                                                          12 декабря 2018, 11:12
                                                                                                          Шеф, возможно надо указать на 93 строке файла core/components/formit/src/FormIt/Hook/Email.php
                                                                                                          93 | $emailTo = $this->modx->getOption('emailTo', $this->formit->config, '');
                                                                                                          добавить
                                                                                                          93 | $emailTo = $this->modx->getOption('emailTo', $this->formit->config, $emailTo);
                                                                                                          Подскажите пожалуйста хук без чек боксов, чтобы пользователь смог видеть свой ящик.

                                                                                                          Спасибо
                                                                                                          1. Александр Мальцев
                                                                                                            13 декабря 2018, 13:47
                                                                                                            Что вы хотите отправить пользователю, который заполнил форму. То же самое письмо, которое вы отправляете на &emailTo?
                                                                                                            1. Vasily
                                                                                                              13 декабря 2018, 13:56
                                                                                                              Нет, у меня через хук FormItAutoResponder идёт другой чанк. Но даже если его не использовать и по обычному вызвать то так же в поле Вам «пусто»

                                                                                                              Хочу после успешной отправки формы пользователем получить в поле Вам его email. Как показано на img.1 (Пример с инет-магазина) с желтым рубиком, а ниже 2 изображения, которые получилось сделать у меня, загвоздка в том что у меня ещё стоят настройки smtp
                                                                                                              1. Александр Мальцев
                                                                                                                13 декабря 2018, 14:21
                                                                                                                Понятно, вы посылаете пользователю другой шаблон письма. А зачем тогда используете cc, это же необходимо для отправки копии письма.
                                                                                                                Необходимо выполнять просто так:
                                                                                                                [[!AjaxForm? 
                                                                                                                  &snippet=`FormIt` 
                                                                                                                  &hooks=`email,FormItAutoResponder`
                                                                                                                  &fiarTpl=`tpl.emailForUser`
                                                                                                                  ...
                                                                                                                В этом случае письмо должно отправиться правильно, т.е. на email, оставленный пользователем в поле name=«email». Если необходимо указать другое имя поля, то для этого используется параметр &fiarToField.

                                                                                                                Кроме этого с помощью хука можно также устанавливать параметры сниппету.
                                                                                                                Например, если хочу отправить точно такую же копию пользователю, то могу его просто добавить в параметр &emailTo.
                                                                                                                Хук emailToUser:
                                                                                                                <?php
                                                                                                                $email = $hook->getValue('email');
                                                                                                                if (!empty($email)) {
                                                                                                                  $hook->formit->config['emailTo'] = $hook->formit->config['emailTo'].','.$email;  
                                                                                                                }
                                                                                                                return true;
                                                                                                                
                                                                                                                Вызов сниппета AjaxForm:
                                                                                                                [[!AjaxForm? 
                                                                                                                  &snippet=`FormIt` 
                                                                                                                  &hooks=`emailToUser,email`
                                                                                                                  ...
                                                                                                                1. Vasily
                                                                                                                  13 декабря 2018, 14:35
                                                                                                                  Вывожу так:
                                                                                                                  [[!AjaxForm?
                                                                                                                  	&snippet=`FormIt`
                                                                                                                  	&form=`formSend.tpl`
                                                                                                                  	&hooks=`FormItSaveForm,FormItAutoResponder,email`
                                                                                                                      ...
                                                                                                                  	&emailTo=`[[++mail_smtp_user]]`
                                                                                                                  	&emailFrom=`[[++mail_smtp_user]]`
                                                                                                                  	&validate=`name:required,email:email:required`
                                                                                                                  	&validationErrorMessage=`Error!`
                                                                                                                  &successMessage=`Успешно отправлено!`
                                                                                                                      &fiarTpl=`tpl.emailForUser`
                                                                                                                      &fiarSubject=`Ваш ответ на сообщение.`
                                                                                                                      &fiarToField=`email`
                                                                                                                      &fiarFromName=`mysite.ru`
                                                                                                                      &fiarFrom=`[[++mail_smtp_user]]`
                                                                                                                      &fiarSender=`[[++mail_smtp_user]]`
                                                                                                                      &fiarHtml=`true`
                                                                                                                      &fiarRequired=`true`
                                                                                                                      &fiarReplyTo=`[[+email]]`
                                                                                                                  	&emailTpl=`eReport.tpl`
                                                                                                                  ]]
                                                                                                                  Разумеется, все работает, но в поле Вам «пусто».

                                                                                                                  Добавить хук emailToUser в
                                                                                                                  &hooks=`emailToUser,email`
                                                                                                                  и будет работать?
                                                                                                                  1. Александр Мальцев
                                                                                                                    13 декабря 2018, 15:10
                                                                                                                    Не надо ничего добавлять, попробуйте убрать лишнее. Должно и так всё работать.

                                                                                                                    Зачем пользователю отвечать самому себе?
                                                                                                                    &fiarReplyTo=`[[+email]]`
                                                                                                                    
                                                                                                                    Попробуйте также убрать это?
                                                                                                                    &fiarFromName=`mysite.ru`
                                                                                                                    &fiarFrom=`[[++mail_smtp_user]]`
                                                                                                                    &fiarSender=`[[++mail_smtp_user]]`
                                                                                                                    
                                                                                                                    Здесь всё зависит от настроек почтового сервера. Необходимо пробовать разные варианты. На тестовом сервере у меня вообще без настроек FormItAutoResponder, только с одним &fiarTpl Вам в полученном письме есть.
                                                                                                                    1. Vasily
                                                                                                                      13 декабря 2018, 16:17
                                                                                                                      Что ж, ладно буду пробовать. Спасибо.
                                                                                                          2. Vasily
                                                                                                            11 декабря 2018, 18:08
                                                                                                            Добавил хук emailTo
                                                                                                            с содержимым:
                                                                                                            <?php
                                                                                                            $emailTo = $hook->getValue('emailto');
                                                                                                            $modx->mail->address('to', $emailTo);
                                                                                                            
                                                                                                            бахнул в параметры сниппета ,email,emailTo, но это не спасло.

                                                                                                            Есть ли решение этой скрипке?
                                                                                                            1. Александр Мальцев
                                                                                                              13 декабря 2018, 14:31
                                                                                                              Пример хука для отправки письма (emailToUser):
                                                                                                              <?php
                                                                                                              $email = $hook->getValue('email');
                                                                                                              // если он установлен, то
                                                                                                              if (!empty($email)) {
                                                                                                                $emailName = $hook->getValue('name');
                                                                                                                 // Активируем почтовый сервис MODX
                                                                                                                $modx->getService('mail', 'mail.modPHPMailer');
                                                                                                                $modx->mail->set(modMail::MAIL_FROM, 'no-reply@mysite.com');
                                                                                                                $modx->mail->set(modMail::MAIL_FROM_NAME, 'Имя сайта');
                                                                                                                // Указываем кому отправить письмо
                                                                                                                $modx->mail->address('to', $email, $emailName);
                                                                                                                // Заголовок сообщения
                                                                                                                $modx->mail->set(modMail::MAIL_SUBJECT, 'Форма обратной связи');
                                                                                                                // Получаем чанк, содержащий необходимый текст письма и передаём ему параметры
                                                                                                                $modx->mail->set(modMail::MAIL_BODY, $modx->getChunk('tpl.email',
                                                                                                                  array(
                                                                                                                    'name' => $hook->getValue('name'),
                                                                                                                    'email' => $hook->getValue('email'),
                                                                                                                    'message' => $hook->getValue('message')
                                                                                                                  )
                                                                                                                ));
                                                                                                                // отправляем письмо
                                                                                                                $modx->mail->setHTML(true);
                                                                                                                if (!$modx->mail->send()) {
                                                                                                                  $modx->log(modX::LOG_LEVEL_ERROR,'Произошла ошибка при отправке письма: '.$modx->mail->mailer->ErrorInfo);
                                                                                                                }
                                                                                                                $modx->mail->reset();
                                                                                                              }
                                                                                                              return true;
                                                                                                              
                                                                                                              Использование хука:
                                                                                                              [[!AjaxForm? 
                                                                                                                &snippet=`FormIt` 
                                                                                                                &hooks=`email,emailToUser`
                                                                                                                ...
                                                                                                              
                                                                                                              1. Vasily
                                                                                                                12 декабря 2018, 10:26
                                                                                                                В чанке самой формы имеются поля:
                                                                                                                Array
                                                                                                                (
                                                                                                                    [name] => 
                                                                                                                    [email] => 
                                                                                                                    [phone] => 
                                                                                                                    [text] => 
                                                                                                                )
                                                                                                                
                                                                                                                Тут попробовал address заменить на email, тоже не получилось.
                                                                                                                $modx->mail->email('to', $emailTo);
                                                                                                                Или же надо в скрипку добавить $hook->getValue('sendemailto');?
                                                                                                          3. Александр Малагор
                                                                                                            09 октября 2018, 15:58
                                                                                                            Добрый день, Шеф.
                                                                                                            Помогите решить задачу.

                                                                                                            На лендинге есть несколько однотипных блоков CTA, информация для которых берется из MIGX.

                                                                                                            СТА вида:
                                                                                                            Фоновая картинка,
                                                                                                            Заголовок, например — «Напишите нам и мы вас расцелуем»,
                                                                                                            Подзаголовок — «Только у нас лучшие целовальщики в сфере нефтепереработки»
                                                                                                            Форма с кнопкой «Хочу целоваться».

                                                                                                            Но, разные СТА используют разные призывы: позвонить, написать, связаться, вызвать, послать и так далее и хочется при выводе СТА указывать для каждой формы уникальные надписи на кнопке «отправить».

                                                                                                            Вот вызов формы
                                                                                                            [[!AjaxForm?
                                                                                                                &snippet=`FormIt`
                                                                                                            	&hooks=`email`
                                                                                                            	&form=`tpl.AjaxForm.light`
                                                                                                            	&emailSubject=`Получен телефон из блока [[+title]]`
                                                                                                            	&emailUseFieldForSubject = 0
                                                                                                            	&emailTo=`zakaz@comfy-mebel.by`
                                                                                                            	&emailFrom=`site@comfy-mebel.by`
                                                                                                            	&emailTpl=`tpl.email-cta`
                                                                                                            	&validate=`phone:required`
                                                                                                            	&validationErrorMessage=`Проверьте правильность ввода номера!`
                                                                                                            	&successMessage=`Сообщение успешно отправлено`
                                                                                                                ]]
                                                                                                            Вот чанк формы
                                                                                                            <form action="" method="post" class="ajax_form af_example">
                                                                                                                <input type="text" id="af_phone" name="phone" value="[[+fi.phone]]" placeholder="+375 (__) ___-__-__" class="grey-input input-phone">
                                                                                                                <button type="submit" class="orange-button">Позвоните мне</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. Александр Мальцев
                                                                                                              18 октября 2018, 16:02
                                                                                                              Добрый! В чанк тоже можно передавать параметры.
                                                                                                              Например:
                                                                                                              [[$tpl.AjaxForm? &textSubmit=`Позвоните мне`]]
                                                                                                              
                                                                                                              Код чанка tpl.AjaxForm:
                                                                                                              ...
                                                                                                              <button type="submit" class="orange-button">[[+textSubmit]]</button>
                                                                                                              ...
                                                                                                              
                                                                                                              1. Александр Малагор
                                                                                                                23 октября 2018, 10:51
                                                                                                                Благодарю за ответ.
                                                                                                                Мне подсказали еще один способ, который позволяет передавать разные параметры из сниппета в чанки.
                                                                                                                Цитирую:
                                                                                                                1. Делаем копию сниппета. В моем случае это AjaxForm. Для примера я оставил оригинал сниппета, но лучше делать на своей копии.
                                                                                                                2. Открываем на редактирование и вставляем переменную ('Send form' < — значение по умолчанию)


                                                                                                                3. В чанке формы прописываем действия с переменной. В моем случае, я вставляю ее в текст кнопки submit


                                                                                                                4. При вызове сниппета указываем свою переменную и её значение.



                                                                                                                1. Александр Мальцев
                                                                                                                  23 октября 2018, 12:04
                                                                                                                  Да, отличный вариант!
                                                                                                            2. Vasily
                                                                                                              03 октября 2018, 21:26
                                                                                                              Александр, помогите пожалуйста решить вопрос:
                                                                                                              В AjaxForm мне надо вывести ID.сохраненной.формы именно в &successMessage=`Спасибо за заявку {savedForm.id}!`

                                                                                                              Никак неполучается распечатать её на экран после успешной отправки :(
                                                                                                              Буду Вам очень благодарен за решение :)
                                                                                                              1. Александр Мальцев
                                                                                                                04 октября 2018, 17:28
                                                                                                                Для этого необходимо:
                                                                                                                1. Убрать из сниппета AjaxForm параметр successMessage, чтобы он использовал сообщение FormIt.
                                                                                                                2. Создать сниппет, например, showSuccessMessage со следующим содержимым:
                                                                                                                <?php
                                                                                                                $modx->setPlaceholder('fi.successMessage', 'Ваше сообщение успешно отправлено. Его номер равен ' . $hook->getValue('savedForm')['id']);
                                                                                                                return true;
                                                                                                                3. Подключить его после FormItSaveForm:
                                                                                                                [[!AjaxForm? 
                                                                                                                  ...
                                                                                                                  &snippet=`FormIt` 
                                                                                                                  &hooks=`FormItSaveForm, email, showSuccessMessage`
                                                                                                                  ...
                                                                                                                ]]
                                                                                                                1. Vasily
                                                                                                                  05 апреля 2019, 12:03
                                                                                                                  Попробовал вывести в alert, при этом отключив JGrowl, но вывод ID формы не срабатывает. Суть в том, что надо в AjaxForm &form=«сюда вывести в какой нибудь плейсхолдер ID сохранённой формы», надо ли ещё какой хук добавлять для этого?
                                                                                                                  1. Александр Мальцев
                                                                                                                    11 апреля 2019, 15:20
                                                                                                                    Если вы хотите просто вывести форму на экран по её id, то в этом случае можно воспользоваться pdoResources:
                                                                                                                    [[!pdoResources?
                                                                                                                      &loadModels=`formit`
                                                                                                                      &class=`FormItForm`
                                                                                                                      &tpl=`@INLINE 
                                                                                                                          id: [[+id]]
                                                                                                                          form: [[+form]]
                                                                                                                          <!-- поля формы -->
                                                                                                                          name: [[+values.name]]
                                                                                                                          email: [[+values.email]]
                                                                                                                          phone: [[+values.phone]]`
                                                                                                                      &select = `{ "FormItForm": "*"}`
                                                                                                                      &sortby=`FormItForm.id`
                                                                                                                      &sortdir=`ASC`
                                                                                                                      &where=`{
                                                                                                                        "FormItForm.id": "1"
                                                                                                                      }`
                                                                                                                    ]]
                                                                                                                    
                                                                                                                    1. Vasily
                                                                                                                      11 апреля 2019, 15:36
                                                                                                                      Спасибо Шеф, такого я ещё не пробовал. Попробую — отпишусь, но будет ли &where=`{«FormItForm.id»: «1»}` выводить номер последний формы, когда человек нажмёт на type=«submit»? (там надо же в &sortdir=`DESC` вроде &limit=`1`)
                                                                                                                      1. Александр Мальцев
                                                                                                                        12 апреля 2019, 14:33
                                                                                                                        Нет, так не пойдет. Вы не получите 100% результат, что это id этой формы. Потому что в этот момент может быть отправлена ещё одна форма.
                                                                                                                        А почему бы сделать так, как предлагал выше, но немного по другому.
                                                                                                                        1. Убрать из сниппета AjaxForm параметр successMessage, чтобы он использовал сообщение FormIt.
                                                                                                                        2. Создать сниппет, например, showSuccessMessage со следующим содержимым:
                                                                                                                        <?php
                                                                                                                        $modx->setPlaceholder('fi.successMessage', $hook->getValue('savedForm')['id'].'.Ваше сообщение успешно отправлено!');
                                                                                                                        return true;
                                                                                                                        3. Подключить его после FormItSaveForm:
                                                                                                                        [[!AjaxForm?

                                                                                                                        &snippet=`FormIt`
                                                                                                                        &hooks=`FormItSaveForm, email, showSuccessMessage`

                                                                                                                        ]]
                                                                                                                        Теперь мы знаем где расположен id формы, а именно в начале до точки в сообщении. Сообщение при необходимости тоже можно получить оно идёт после точки.
                                                                                                                        После этого добавить на страницу скрипт:
                                                                                                                        <script>
                                                                                                                        $(document).on('af_complete', function(event, response) {
                                                                                                                          if (response.success) {
                                                                                                                            var message = response.message;
                                                                                                                            var pos = message.indexOf('.');
                                                                                                                            var idForm = message.substr(0, pos);
                                                                                                                            response.message = ''; // Отмена стандартного алерта jGrowl
                                                                                                                            alert(idForm); // выводим id сохраненной формы в alert
                                                                                                                            console.log(idForm); // выводим id сохраненной формы в консоль браузера
                                                                                                                          }
                                                                                                                        });  
                                                                                                                        </script>
                                                                                                                        
                                                                                                                        1. Vasily
                                                                                                                          12 апреля 2019, 15:50
                                                                                                                          Спасибо, проверил, теперь 2 алерта, но ни в одном у меня иначе:
                                                                                                                                  if ((form.attr('id') == 'fox_form_m101') === true) {
                                                                                                                                      if (response.success) {
                                                                                                                                              var message = response.message;
                                                                                                                                              var pos = message.indexOf('.');
                                                                                                                                              var idForm = message.substr(0, pos);
                                                                                                                                              response.message = ''; // Отмена стандартного алерта jGrowl
                                                                                                                                              alert(idForm); // выводим id сохраненной формы в alert
                                                                                                                                              $('.wrapp-send2').hide();
                                                                                                                                              $("#success-response2").fadeIn(700);
                                                                                                                                              $("#error-response2").fadeOut(0);
                                                                                                                                              console.log(idForm);
                                                                                                                                      }
                                                                                                                          
                                                                                                                          Консоль чистая и в алерт я получаю пусто.

                                                                                                                          На сайте алерт #success-response2

                                                                                                                          <div id="success-response2" class="alert alert-success" style="display: none;">
                                                                                                                          	<p>Ваша заявка успешно отправлена. < br />Спасибо, что обратились к нам.</p>
                                                                                                                          	<p>Мы ответим Вам в ближайшее время. [[+fi.successMessage]]</p>
                                                                                                                          </div>
                                                                                                                          
                                                                                                                          И даже если вместо alert(idForm) заменяю на
                                                                                                                          $("#success-response2").show(idForm); // выводим id сохраненной формы в alert
                                                                                                                          Всё ровно ('savedForm')['id'] пусто.
                                                                                                                          Шеф, что я делаю не так?
                                                                                                                    2. Александр Мальцев
                                                                                                                      08 апреля 2019, 14:43
                                                                                                                      Нет, достаточно открыть файл «default.js», расположенный по пути "\assets\components\ajaxform\js" и внести в него соответствующие изменения. Т.е. закомментировать в нем всё, что касается jGrowl.

                                                                                                                      Чтобы вывести сообщение об успешной отправки в alert достаточно:
                                                                                                                      AjaxForm.Message = {
                                                                                                                          success: function (message, sticky) {
                                                                                                                              if (message) {
                                                                                                                                  if (!sticky) {
                                                                                                                                      sticky = false;
                                                                                                                                  }
                                                                                                                                  //$.jGrowl(message, {theme: 'af-message-success', sticky: sticky});
                                                                                                                                  alert(message);
                                                                                                                              }
                                                                                                                          },
                                                                                                                          ...
                                                                                                                      
                                                                                                                      1. Vasily
                                                                                                                        08 апреля 2019, 15:21
                                                                                                                        Не помогло, так как алерт возвращает функцию для конкретного id формы.
                                                                                                                        <script type="text/javascript">
                                                                                                                        $(document).on('af_complete', function(event, response) {
                                                                                                                            var form = response.form;
                                                                                                                            var fields = {
                                                                                                                        	// Тут если id формы - правда, то выполняем действие
                                                                                                                        	...
                                                                                                                            response.message=''; // Отмена стандартного алерта jGrowl
                                                                                                                        });
                                                                                                                        </script>
                                                                                                                        
                                                                                                                        При этом хук showSuccessMessage вставлен сразу после FormItSaveForm, но до email
                                                                                                                    3. Vasily
                                                                                                                      06 октября 2018, 14:37
                                                                                                                      Благодарю всё работает замечательно! :) Радует, что есть единственный самый лучший сайт в инете!

                                                                                                                      Шеф, у меня ещё вопрос: Поставил SMTP яндекса, настройки естественно в &fiarFrom=`[[++mail_smtp_user]]`, это стало причиной, что в подтверждении пользователю — [[*image]] — неотображается. Раньше вызывал так:
                                                                                                                      <img src="{$site_url}/[[phpthumbon? &input=`[[*image]]` &options=`&w=120&h=120&far=1&aoe=0&q=100`]]" alt="[[*pagetitle]]"/>
                                                                                                                      — всё работало, а сейчас пусто, приходит на почту /assets/cache_image/noimage2_120x120_102.jpg. Стал пробовать создавать хук на получение image что-то вроде:
                                                                                                                      <?php
                                                                                                                      //$modx->setPlaceholder('image', $hook->getValue['image']);
                                                                                                                      //$modx->resource->set('tv_name', $tv);
                                                                                                                      $modx->resource->set('image', $fields);
                                                                                                                      return true;
                                                                                                                      , но ничего не выходит, помогите пожалуйста получить данные из tv image
                                                                                                                      1. Александр Мальцев
                                                                                                                        10 октября 2018, 14:45
                                                                                                                        А если заменить {$site_url} на [[++site_url]].
                                                                                                                        1. Vasily
                                                                                                                          10 октября 2018, 15:00
                                                                                                                          Даже если заменить на [[++site_url]] приходит на почту подтверждение через хук FormItAutoResponder в виде
                                                                                                                          <img alt="Коэрцитиметр КИМ-2М" src="https://resize.yandex.net/mailservice?url=https%3A%2F%2Fmysitename.ru%2F%2Fassets%2Fcache_image%2Fnoimage2_120x120_46b.jpg&proxy=yes&key=16e67ce7fdd8cbcd55acfb8d9c48b639">
                                                                                                                          
                                                                                                                          1. Александр Мальцев
                                                                                                                            10 октября 2018, 15:37
                                                                                                                            Параметр fiarFrom по умолчанию берёт имя пользователя из системного параметра emailsender. Если значение emailsender установить, равное параметру mail_smtp_user, то fiarFrom можно не устанавливать.
                                                                                                                            1. Vasily
                                                                                                                              06 декабря 2018, 16:31
                                                                                                                              Всё дело было в версии php. У меня стояла 5.4, поставил 5.6 всё стало работать )

                                                                                                                              Спасибо :)
                                                                                                                              1. Александр Мальцев
                                                                                                                                07 декабря 2018, 15:53
                                                                                                                                Да, забыл отметить, что минимум 5.6. Добавлю эту информацию в статью.
                                                                                                                              2. Vasily
                                                                                                                                11 октября 2018, 11:09
                                                                                                                                Если убрать параметр fiarFrom, то вместо заданного &fiarFromName приходит: "Без получателя"
                                                                                                                                И [[*image]] также не отображается :(

                                                                                                                                У меня в чанке tpl.backToUser используются строки:
                                                                                                                                {var $site_url = ('site_url' | option) | preg_replace : '#/$#' : ''}
                                                                                                                                {var $assets_url = 'assets_url' | option}
                                                                                                                                Может в них всё дело?
                                                                                                                    4. Дмитрий
                                                                                                                      04 сентября 2018, 20:55
                                                                                                                      А как сделать и где прописывать перенаправление на другую страницу после заполнения формы клиентом (например на страницу благодарности) для создание целей в рекламных кампаниях?
                                                                                                                      1. Александр Мальцев
                                                                                                                        06 сентября 2018, 14:01
                                                                                                                        id ресурса, на который нужно перейти после успешной отправки, можно реализовать с помощью параметра redirectTo:
                                                                                                                        [[!AjaxForm?
                                                                                                                          ...
                                                                                                                          &redirectTo=`5`
                                                                                                                          ...
                                                                                                                        
                                                                                                                        1. Дмитрий
                                                                                                                          06 сентября 2018, 14:26
                                                                                                                          это я делал, не помогло
                                                                                                                          1. Александр Мальцев
                                                                                                                            06 сентября 2018, 14:52
                                                                                                                            Да, это же AJAX.
                                                                                                                            Тогда это можно выполнить, посредством добавления кода JavaScript на страницу:
                                                                                                                            <script>
                                                                                                                            $(document).on('af_complete', function(event, response) {
                                                                                                                              var form = response.form;
                                                                                                                              var url = 'адрес_на_который_нужно_перейти';
                                                                                                                              if (form.attr('id') == '#form') { // form - id формы
                                                                                                                                if (response.success) {
                                                                                                                                  location.href = url; // переход на другую страницу
                                                                                                                                }
                                                                                                                              }
                                                                                                                            });
                                                                                                                            </script>
                                                                                                                            
                                                                                                                      2. Binom
                                                                                                                        12 августа 2018, 13:52
                                                                                                                        Добрый день, Шэф! Пытаюсь настроить форму, она у меня во всплывашке, html формы в чанке, во всплывашке контент пуст
                                                                                                                        1. Александр Мальцев
                                                                                                                          13 августа 2018, 15:31
                                                                                                                          Добрый! В чанке должна находиться только HTML форма. Вызов AjaxForm — внутри HTML кода модального окна.
                                                                                                                        2. Aleksandr Ustinov
                                                                                                                          17 июля 2018, 12:09
                                                                                                                          Ещё раз Спасибо за оперативность ответов, изучаю revo совсем недавно. Работаю на evo. Возник такой вопрос
                                                                                                                          <p>Можно использовать ссылку для ответа: <a href="mailto:[+email+]?subject=RE:[+subject+]">[+email+]</a></p>
                                                                                                                          
                                                                                                                          — Это строчка из чанка-шаблона посылаемого снипеттом eForm в evo. Атеперь вопрос, как сделать тоже в рэво?
                                                                                                                          1. Александр Мальцев
                                                                                                                            17 июля 2018, 14:13
                                                                                                                            Вот так:
                                                                                                                            <p>Можно использовать ссылку для ответа: <a href="mailto:[[+emailFrom]]?subject=RE:[[+emailSubject]]">[[+emailFrom]]</a></p>
                                                                                                                            1. Aleksandr Ustinov
                                                                                                                              17 июля 2018, 23:20
                                                                                                                              Ещё вопрос такой: В эво в настройках есть параметр который отвечает за «Обратный адрес e-mail:» А в рево есть такой параметр?
                                                                                                                              1. Aleksandr Ustinov
                                                                                                                                17 июля 2018, 19:51
                                                                                                                                Спасиб огромное!
                                                                                                                            2. Aleksandr Ustinov
                                                                                                                              16 июля 2018, 17:26
                                                                                                                              Добрый день шеф. Сделал не один проект на основе ваших уроков бутстрапа, изучаю теперь revo подскажите в уроке мы добавили поле ввода телефона а вот проверку нет. Сделал все по уроку, форма уходит без ввода номера телефона
                                                                                                                              1. Aleksandr Ustinov
                                                                                                                                16 июля 2018, 14:24
                                                                                                                                Добрый день шеф. Сделал не один проект на основе ваших уроков бутстрапа, изучаю теперь revo подскажите в уроке мы добавили поле ввода телефона а вот проверку нет. Сделал все по уроку, форма уходит без ввода номера телефона
                                                                                                                                1. Александр Мальцев
                                                                                                                                  16 июля 2018, 15:06
                                                                                                                                  Добрый! Уже был такой вопрос.
                                                                                                                                  1. Aleksandr Ustinov
                                                                                                                                    16 июля 2018, 17:40
                                                                                                                                    Спасибо
                                                                                                                                2. kalisto
                                                                                                                                  12 июля 2018, 12:55
                                                                                                                                  Доброго часа Шеф!!!
                                                                                                                                  Прошу подсказать — в чем проблема — при вводе в поле input не могу взять уже введенные данные, форма закрывается ()в меню справа вверху заказать звонок. Как-то все время идет пляска то исчезает при вводе поля, то ждет ввода.
                                                                                                                                  http://mfgost.tw1.ru/catalog/hallways/
                                                                                                                                  1. Александр Мальцев
                                                                                                                                    12 июля 2018, 16:48
                                                                                                                                    Добрый! Сделайте отображение формы не при наведении на «Заказать звонок», а при клике на него.
                                                                                                                                    1. kalisto
                                                                                                                                      18 июля 2018, 10:34
                                                                                                                                      Огромное спасибо IT шеф — помогло.
                                                                                                                                  2. Алексей
                                                                                                                                    06 июня 2018, 09:43
                                                                                                                                    Доброго дня, уточните пожалуйста, как можно вывести дату публикации сниппета formit? Тоесть на сайте сделана на formit форма вопрос-ответ, где публикуется вопрос и ответ с помощью сниппета formit. В документации к formit не нашёл (
                                                                                                                                    1. Александр Мальцев
                                                                                                                                      11 июня 2018, 05:44
                                                                                                                                      У сниппетов нет даты публикации, такое поле только есть у ресурсов. Получить дату публикации текущего ресурса можно так: [[*publishedon]]
                                                                                                                                    2. kalisto
                                                                                                                                      19 апреля 2018, 16:55
                                                                                                                                      Здравствуйте!
                                                                                                                                      Все [[+fi.error.*]] вместо английского русский язык?
                                                                                                                                      Здесь скриншот
                                                                                                                                      1. Александр Мальцев
                                                                                                                                        20 апреля 2018, 13:40
                                                                                                                                        Здравствуйте! За язык отвечает параметр cultureKey в системных настройках.
                                                                                                                                        1. kalisto
                                                                                                                                          23 апреля 2018, 18:39
                                                                                                                                          Спасибо!
                                                                                                                                      2. Amsterdam
                                                                                                                                        18 апреля 2018, 06:56
                                                                                                                                        Доброго дня

                                                                                                                                        Интересует решение такой задачки, может быть подскажите, как реализовать?

                                                                                                                                        На странице отображен каталог товаров, выводиться через pdoResources, под каждым блоком товара есть кнопка «заказать». По клику на «заказать» под каждым конкретным товаром, вызывается модальное окно с formit.

                                                                                                                                        Задача: как добиться того, что бы в вызываемую форму (в любое произвольное поле) вставлялся заголовок именно того товара, под которым кликнули на «заказать» (что то вроде оформления быстрой заявки, не заходя на страницу товара).

                                                                                                                                        Пока не могу сообразить, как это реализовать.

                                                                                                                                        Буду благодарен за подсказку…
                                                                                                                                        1. Александр Мальцев
                                                                                                                                          18 апреля 2018, 14:14
                                                                                                                                          Здравствуйте. Это задачка решается с помощью JavaScript. Вам нужно при нажатии на кнопку «Заказать», найти элемент с названием товара (например, по классу). Конечно, это выполнить относительно кнопки «Заказать». Получить содержимое этого элемента, т.е. название товара. После этого получить нужный элемент в модальном окне и установить ему значение. Открыть модальное окно.
                                                                                                                                          1. Amsterdam
                                                                                                                                            18 апреля 2018, 18:42
                                                                                                                                            Спасибо за совет. Действительно, что то не подумал сделать выборку по названию товара уже выведенному, стал тянуть аяксом заголовок со страницы товара) В целом получилось, но будет работать только если ресурс представлен в виде страницы. Ваша рекомендация более универсальна.

                                                                                                                                            Хотя, в modx, кроме как ресурсами, адекватно вывести каталог, не вижу вариантов. Есть MIGx, но это невменяемый компонент на мой взгляд, невероятно тормозной. Но это уже оффтоп)

                                                                                                                                            Спасибо еще раз, что откликаетесь в комментариях!
                                                                                                                                            1. Александр Мальцев
                                                                                                                                              19 апреля 2018, 14:21
                                                                                                                                              Можно выполнить ещё с помощью data-атрибута, значения, которого формировать на сервере используя, тег modx, например pagetitle.
                                                                                                                                              А при нажатии на кнопку получать значение этого атрибута у кнопки и подставлять его в форму.
                                                                                                                                        2. Антон
                                                                                                                                          03 марта 2018, 01:32
                                                                                                                                          У меня такой вопрос: Все сделал как вы говорите, на компьютере все хорошо. Форма работает, письма приходят
                                                                                                                                          Но при попытке отправить данные через форму на мобильном устройстве не работает. Кнопка отправить не срабатывает. Как это исправить?
                                                                                                                                          1. Алексей
                                                                                                                                            24 февраля 2018, 09:27
                                                                                                                                            ШЕФ, Добрый день. По вашей инструкции все настроил, все работает. Но не знаю как реализовать следующее: у меня на сайте на одной странице есть несколько услуг, и у каждой есть кнопка сделать заявку. Как мне настроить форму, что бы в письме которое приходит мне на почту, отображалось название у какой именно услуги была нажата кнопка обратной связи. В настоящий момент в письме присылается только номер id самой страницы с которой была сделана заявка, а мне надо знать с какой именно услуги на этой странице.

                                                                                                                                            Заранее спасибо.
                                                                                                                                            1. Александр Мальцев
                                                                                                                                              24 февраля 2018, 16:20
                                                                                                                                              Здравствуйте.
                                                                                                                                              Это обычно осуществляется с помощью добавления к формам скрытых полей. Как это осуществить, можно посмотреть в этом комментарии.
                                                                                                                                            2. Вадим
                                                                                                                                              16 февраля 2018, 20:16
                                                                                                                                              Подскажите как менять надпись у [[+fi.error.name]] [[+fi.error.phone]] ????
                                                                                                                                              1. Александр Мальцев
                                                                                                                                                24 февраля 2018, 16:45
                                                                                                                                                Эти плейсхолдеры нужны только для формы FormIt, которая работает с перезагрузкой страницы (т.е. без AJAX).
                                                                                                                                                Их заполнение осуществляется так:
                                                                                                                                                1. Пользователь заполняет форму и нажимает кнопку «Отправить».
                                                                                                                                                2. На сервере после получения формы, выполняется её проверка. Это действие осуществляет FormIt. Если он находит ошибки валидации, то он записывает их в соответствующие плейсхолдеры ([[+fi.error.name]],[[+fi.error.phone]] и др.).
                                                                                                                                                3. Формируется ответ. Страница с формой отправляется пользователю.
                                                                                                                                                4. У пользователя происходит обновление страницы, и он видит результат.

                                                                                                                                                Если же форма работает без перезагрузки страницы (с помощью AJAX), то, конечно эти действия не выполняются (страница заново не формируется сервером). Эти плейсхолдеры просто не нужны.
                                                                                                                                              2. павел
                                                                                                                                                24 января 2018, 20:23
                                                                                                                                                Здравствуйте. Можете помочь с бедой? Перестали работать все формы на сайте. Выдает( произошла ошибка попробуйте позже) и т.д. Если потребуется для проверки могу скинуть сайт…
                                                                                                                                                1. Павел
                                                                                                                                                  17 января 2018, 12:16
                                                                                                                                                  Здравствуйте. Подскажите… на странице несколько форм (3) и при отправке с одной из них на почту поступают 4 одинаковых сообщения, как это исправить? Заранее благодарен.
                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                    18 января 2018, 15:35
                                                                                                                                                    Здравствуйте.
                                                                                                                                                    Вам необходимо к каждой submit кнопке добавить атрибут name.
                                                                                                                                                    Например:
                                                                                                                                                    <!-- Для первой формы -->
                                                                                                                                                    <input type="submit" name="form1" value="Отправить" />
                                                                                                                                                    <!-- Для второй формы -->
                                                                                                                                                    <input type="submit" name="form2" value="Отправить" />
                                                                                                                                                    <!-- ... -->
                                                                                                                                                    Указать в FormIt с помощью параметра submitVar, ту форму, которую он будет обрабатывать.
                                                                                                                                                    Для первой формы:
                                                                                                                                                    [[!FormIt?
                                                                                                                                                        &submitVar=`form1`
                                                                                                                                                        ...
                                                                                                                                                    ]]
                                                                                                                                                    Для второй формы:
                                                                                                                                                    [[!FormIt?
                                                                                                                                                        &submitVar=`form2`
                                                                                                                                                        ...
                                                                                                                                                    ]]
                                                                                                                                                    1. Павел
                                                                                                                                                      18 января 2018, 15:42
                                                                                                                                                      Здравствуйте. Спасибо за ответ. Делал и так но все равно шлет кучу одинаковых писем на почту, и что интересно формы 3 штуки а писем шлет 4 :)
                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                        18 января 2018, 16:04
                                                                                                                                                        Проверьте ваши формы, каждая форма должна начинаться с тега form и заканчиваться им. Может что у вас с разметкой.
                                                                                                                                                        Отправку писем осуществляет сниппет FormIt. Если указан параметр submitVar, то он проверяет есть ли в массиве $_POST указанный ключ. И если есть, то обрабатывает её. А иначе нет.
                                                                                                                                                        1. Павел
                                                                                                                                                          18 января 2018, 16:16
                                                                                                                                                          У меня как у вас AjaxForm + FormIt
                                                                                                                                                          Вот делать?
                                                                                                                                                          [[!AjaxForm?
                                                                                                                                                          &snippet=`FormIt`
                                                                                                                                                          &submitVar=`form1`
                                                                                                                                                          Ну и кнопку потом поправить…
                                                                                                                                                          1. Павел
                                                                                                                                                            18 января 2018, 17:13
                                                                                                                                                            Попробовал как вы подсказали но так же шлет 4 сообщения разом :) все form /form имеют.
                                                                                                                                                            <div class="col-md-10 col-md-offset-1 form">
                                                                                                                                                            <div class="site-form simple-form"><div class="name text-center">Задайте свой вопрос юристу!</div>
                                                                                                                                                                    <div class="preview">В течении 15 минут, вы получите объективное заключение по вашей ситуации.</div>
                                                                                                                                                                    
                                                                                                                                                            [[!AjaxForm?
                                                                                                                                                               &frontend_css=``
                                                                                                                                                               &snippet=`Formit`
                                                                                                                                                               &submitVar=`form2`
                                                                                                                                                               &hooks=`spam,email,emailUser`
                                                                                                                                                               &form=`tpl.forma`
                                                                                                                                                               &emailTpl=`tpl.email_forma`
                                                                                                                                                               &emailTo=`[[*email1?]]`
                                                                                                                                                               &emailFrom=`[[*email2?]]`
                                                                                                                                                               &emailSubject=`Вам задали вопрос [[++site_url]]`
                                                                                                                                                               &emailFromName=`[[+name]]`
                                                                                                                                                               &validate=`name:required:minLength=`3`,
                                                                                                                                                                           message:required:stripTags`
                                                                                                                                                               &validationErrorMessage=`Пожалуйста, заполните все поля*`
                                                                                                                                                               &successMessage=`СООБЩЕНИЕ УСПЕШНО ОТПРАВЛЕНО. СПАСИБО!`
                                                                                                                                                            ]]
                                                                                                                                                            </div>
                                                                                                                                                            </div>
                                                                                                                                                            <form method="post" class="ajax_form af_example">
                                                                                                                                                            <input type="hidden" name="title" value="[[*pagetitle]]">
                                                                                                                                                            <input type="hidden" name="link" value="[[*uri:tag]]">
                                                                                                                                                            <span>[[+fi.successMessage]]</span>
                                                                                                                                                            <div class="success-msg"></div>
                                                                                                                                                                                    <div class="form-group col-md-6">
                                                                                                                                                                                    <label for="" class="hidden">Ваше имя</label>
                                                                                                                                                                                    <input type="text" class="form-control" id="" name="name" required placeholder="Ваше имя*" value=""/>
                                                                                                                                                                                    </div>
                                                                                                                                                                                    <div class="form-group col-md-6">
                                                                                                                                                                                    <label for="" class="hidden">Телефон</label>
                                                                                                                                                                                    <input type="text" class="form-control" id="" name="phone" required placeholder="Телефон*" value=""/>
                                                                                                                                                                                    </div>
                                                                                                                                                                                    <div class="form-group col-md-12">
                                                                                                                                                                                    <label for="" class="hidden">Вопрос</label>
                                                                                                                                                                                    <textarea class="form-control" id="" name="message" placeholder="Вопрос"></textarea>
                                                                                                                                                                                    </div>
                                                                                                                                                            <div class="s-info">* Поля помеченные звездочкой обязательны для заполнения</div>
                                                                                                                                                            <div class="col-md-6 col-md-offset-3">
                                                                                                                                                                        <input type="submit" class="btn btn-prinary btn-lg" name="form2" value="Отправить" />
                                                                                                                                                                    </div>
                                                                                                                                                                    <div style="clear: both"></div>
                                                                                                                                                              </form>
                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                              17 февраля 2018, 15:54
                                                                                                                                                              А у вас формы расположены в чанках или вместе с вызовом сниппета AjaxForm?
                                                                                                                                                  2. tristshestilap
                                                                                                                                                    09 декабря 2017, 04:47
                                                                                                                                                    Шеф, прошу помощи!
                                                                                                                                                    Сделал все по статье, но при корректно заполненных полях и отправке пишет «Сообщение успешно отправлено». Письма на почте нет, а в ошибках modx
                                                                                                                                                    .../httpdocs/core/components/pdotools/model/pdotools/pdotools.class.php: 344) [pdoTools] Could not load snippet "!AddComparison"

                                                                                                                                                    Ума не приложу, как это исправить. Куда копать?
                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                      11 декабря 2017, 11:20
                                                                                                                                                      Тут можно только гадать, т.к. эта ошибка к работе формы обратной связи никакого отношения не имеет.
                                                                                                                                                    2. Дима
                                                                                                                                                      21 ноября 2017, 15:37
                                                                                                                                                      Добрый день, Александр. Вы пишите, что Хуки — запускаются последовательно один за другим. А можно ли передавать данные из хука в хук? То есть, так как они запускаются последовательно, то необходимо передать результат работы одного хука в другой. Вставить код весь в один хук не получается, так как один кастомный а другой хук плагина. и мне надо из хука плагина shopkeeper3 передать содержимое корзины в кастомный хук, для того чтобы в нём произошла отправка пост запроса в срм с содержимым корзины и контактными данными покупателя (вводятся в форме). Спасибо.
                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                        23 ноября 2017, 11:32
                                                                                                                                                        Добрый день!
                                                                                                                                                        Делается это очень просто.
                                                                                                                                                        Для установки значения используем следующее (в 1 хуке):
                                                                                                                                                        $hook->setValue('var1', 'значение1');
                                                                                                                                                        
                                                                                                                                                        Во втором, чтобы его получить пишем:
                                                                                                                                                        $var1 = $hook->getValue('var1');
                                                                                                                                                        
                                                                                                                                                      2. Алекс
                                                                                                                                                        30 октября 2017, 12:07
                                                                                                                                                        Добрый день, помогите разобраться.

                                                                                                                                                        возможно кто то сталкивались с такой проблемой когда одна и та же страница сайта доступна с слэшем в конце урла и так же без "/", при этом если добавлям слэш "/" в строке дописывается вот это ?cultureKey=, что по сути есть дубль страницы, друзья как «победить».
                                                                                                                                                        Заранее благодарен
                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                          04 ноября 2017, 15:33
                                                                                                                                                          Добрый день. Можно в .htaccess написать правило (редирект) с одной страницы на другую и тем самым избавиться от дубля.
                                                                                                                                                          Например:
                                                                                                                                                          RewriteRule ^section/lessons$ /section/lessons/ [R=301,L]
                                                                                                                                                          
                                                                                                                                                        2. kovasal
                                                                                                                                                          16 октября 2017, 21:38
                                                                                                                                                          Здравствуйте, Александр!
                                                                                                                                                          Столкнулся с одной странностью…
                                                                                                                                                          При вызове Formit чанк письма хочу указать через плейсхолдер:
                                                                                                                                                          [[!Formit?
                                                                                                                                                          ...
                                                                                                                                                          &emailTpl = `[[+changechunk]]`
                                                                                                                                                          ...]]
                                                                                                                                                          И содержимое плейсхолдера не вставляется, а вставляется "[[+changechunk]]"
                                                                                                                                                          В то же время за пределами вызова Formit — плейсхолдер выводит содержимое.
                                                                                                                                                          Почему такое происходит?
                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                            18 октября 2017, 14:43
                                                                                                                                                            Здравствуйте!
                                                                                                                                                            Это может происходить из-за того, что при вызове FormIt плейсхолдер changechunk ещё не установлен. Например, это может случиться, если вы будете вызывать сниппет, в котором вы устанавливаете changechunk, после вызова сниппета FormIt.
                                                                                                                                                          2. Василий
                                                                                                                                                            11 октября 2017, 16:11
                                                                                                                                                            Здравствуйте!
                                                                                                                                                            Прошу помощи. После переноса сайта проблемы с отправкой сообщений.

                                                                                                                                                            Форма обратной связи, сделанная по Вашей инструкции, (рабочая) данные отправляет, в админке сайта отображается как полученная, но письмо админу не приходит.

                                                                                                                                                            А при оформлении заказа через shopkeeper3 — наоборот — админу приходит письмо, а заказчику нет.

                                                                                                                                                            Могут эти 2 явления быть связаны?
                                                                                                                                                            И где вообще искать проблему. Все перепроверил — ничего не нашел. До переноса работало…
                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                              18 октября 2017, 14:46
                                                                                                                                                              Здравствуйте!
                                                                                                                                                              Сложно сказать, ошибок в MODX и в логах нет? Можно попробывать переустановить компоненты.
                                                                                                                                                            2. Алекс
                                                                                                                                                              10 октября 2017, 09:47
                                                                                                                                                              Добрый день коллеги, у нас на сайте поймали непонятную проблему — перестала работать форма обратной связи. При отправке выдает ошибку на сайте «форма содержит ошибки». Вот сообщение из журнала ошибок:

                                                                                                                                                              [2017-10-09 23:24:01] (ERROR @ /assets/components/ajaxform/action.php) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                                                                                                                              [2017-10-09 23:24:01] (ERROR @ /index.php) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                                                                                                                              [2017-10-09 23:24:01] (ERROR @ /index.php) [FormIt] Произошла ошибка при попытке отправить почту. Could not instantiate mail function.
                                                                                                                                                              [2017-10-09 23:55:16] (ERROR @ /index.php) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                                                                                                                              [2017-10-09 23:55:16] (ERROR @ /assets/components/ajaxform/action.php) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                                                                                                                              [2017-10-09 23:55:16] (ERROR @ /index.php) [FormIt] Произошла ошибка при попытке отправить почту. Could not instantiate mail function.
                                                                                                                                                              [2017-10-10 00:08:04] (ERROR @ /connectors/index.php) modSystemSetting: Attempt to set NOT NULL field editedon to NULL
                                                                                                                                                              [2017-10-10 00:13:59] (ERROR @ /assets/components/ajaxform/action.php) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                                                                                                                              [2017-10-10 00:13:59] (ERROR @ /index.php) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                                                                                                                              [2017-10-10 00:13:59] (ERROR @ /index.php) [FormIt] Произошла ошибка при попытке отправить почту. Could not instantiate mail function.
                                                                                                                                                              [2017-10-10 00:15:17] (ERROR @ /assets/components/ajaxform/action.php) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                                                                                                                              [2017-10-10 00:15:17] (ERROR @ /index.php) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                                                                                                                              [2017-10-10 00:15:17] (ERROR @ /index.php) [FormIt] Произошла ошибка при попытке отправить почту. Could not instantiate mail function.
                                                                                                                                                              [2017-10-10 00:40:02] (ERROR @ /assets/components/ajaxform/action.php) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                                                                                                                              [2017-10-10 05:40:47] (ERROR @ /index.php) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                                                                                                                              [2017-10-10 05:40:47] (ERROR @ /index.php) [FormIt] Произошла ошибка при попытке отправить почту. Could not instantiate mail function.
                                                                                                                                                              [2017-10-10 09:39:37] (ERROR @ /assets/components/ajaxform/action.php) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.

                                                                                                                                                              Хостер говорит что проблема не у них. Переустанавливать ли сам пакет [FormIt] — наверно нет смысла, потому как мы сайт восстанавливали на ту дату когда бага не было.
                                                                                                                                                              Если кто то сталкивался с подобной проблемой или знает решение — прошу помощи. Заранее благодарен.
                                                                                                                                                              1. Серега
                                                                                                                                                                10 октября 2017, 10:16
                                                                                                                                                                Так у вас же в логах русским языком написано:
                                                                                                                                                                Невозможно запустить функцию mail.
                                                                                                                                                                Так что проблема на хостинге. ФормИт не может запустить функцию mail, попробуйте просто php скриптом ее вызвать и что нибудь отправить. И это вы смотрите в логи сайта, а что пишут логи сервера?
                                                                                                                                                                1. Алекс
                                                                                                                                                                  10 октября 2017, 10:26
                                                                                                                                                                  Хостер накидал ссылок и говорит что у них все норм (не повезло нам как с хостером)

                                                                                                                                                                  в логах сервера вообще дремучий лес, че там тока нет, и адалт и.т.д

                                                                                                                                                                  ModSecurity: Access denied with code 424 (phase 2). Pattern match "(?:(?:g(?:a|u)y|homosexual|bi-?sex(?:ual)?|shemales?|lolitas?|manga|virgins?|teens?|porno?)[ -_.,\\"\\\\'\\\\|](?:beastiality|bestiallity|sex[ -_.,\\"\\\\'\\\\|]scenes?|video|slut|trailer|(?:boy|girl)[ -_.,\\"\\\\'\\\\|](?:pic|video)s?|(?:fuck|shag)ing)|(?:naked|vivi ..." at ARGS:message. [file "/usr/local/apache2/conf/modsecurity/asl/asl.conf"] [line «7729»] [id «300003»] [rev «12»] [msg «RS-2 Antispam: Spam: Adult Video»] [data «porn video „] [severity “WARNING»] [hostname «sotdesign.com»] [uri "/"] [unique_id «WdsvFlvOyZQAC2QqTFcAAACp»]
                                                                                                                                                                  Выключить правило

                                                                                                                                                                  я не очень понимаю откуда это все там(
                                                                                                                                                                  Спасибо
                                                                                                                                                                  1. Алекс
                                                                                                                                                                    10 октября 2017, 13:56
                                                                                                                                                                    Все уже перепробовали, но пишет «Форма содержит ошибки» (( HELP!
                                                                                                                                                                    1. Серега
                                                                                                                                                                      10 октября 2017, 18:42
                                                                                                                                                                      Так подождите, вначале вы говорили что
                                                                                                                                                                      [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                                                                                                                                      Теперь вы говорите что:
                                                                                                                                                                      Все уже перепробовали, но пишет «Форма содержит ошибки»
                                                                                                                                                                      Если такое пишет то значит форма просто напросто не проходит валидацию. Код формы скиньте сюда, вызов и саму форму.
                                                                                                                                                                      1. Алекс
                                                                                                                                                                        10 октября 2017, 21:34
                                                                                                                                                                        Добрый вечер, вот:

                                                                                                                                                                        Вызов:
                                                                                                                                                                        [[!AjaxForm?
                                                                                                                                                                        &snippet=`FormIt`
                                                                                                                                                                        &form=`tpl.AjaxForm.main`
                                                                                                                                                                        &hooks=`email`
                                                                                                                                                                        &placeholderPrefix=`mn.`
                                                                                                                                                                        &emailSubject=`Собщение с сайта Creative Design`
                                                                                                                                                                        &emailTo=`infsot@gmail.com`
                                                                                                                                                                        &emailFrom=`info@sotdesign.com`
                                                                                                                                                                        &emailFromName=`[[++site_name]]`
                                                                                                                                                                        &validate=`name:required,email:required,message:required`
                                                                                                                                                                        &validationErrorMessage=`Форма содержит ошибки!`
                                                                                                                                                                        &successMessage=`Сообщение успешно отправлено`
                                                                                                                                                                        ]]

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




                                                                                                                                                                        Имя
                                                                                                                                                                        <input type=«text» id=«af_name2» name=«name» value="[[+mn.name]]" placeholder="" required />

                                                                                                                                                                        Сообщение
                                                                                                                                                                        [[+mn.message]]





                                                                                                                                                                        Услуга
                                                                                                                                                                        Выберите услугу
                                                                                                                                                                        Создать логотип
                                                                                                                                                                        Разработать фирменный стиль
                                                                                                                                                                        Разработать брендбук
                                                                                                                                                                        Дизайн этикетки / упаковки
                                                                                                                                                                        Дизайн полиграфии
                                                                                                                                                                        Графика
                                                                                                                                                                        Создание Нейминга
                                                                                                                                                                        Разработка Слогана
                                                                                                                                                                        Копирайтинг
                                                                                                                                                                        Интерьер








                                                                                                                                                                        поля, обязательные для заполнения

                                                                                                                                                                        Отправить




                                                                                                                                                                        E-mail*
                                                                                                                                                                        <input type=«email» id=«af_email2» name=«email» value="[[+mn.email]]" placeholder="" required />

                                                                                                                                                                        Телефон
                                                                                                                                                                        <input type=«text» id=«af_phone2» name=«phone» value="[[+mn.phone]]" placeholder="" required />





                                                                                                                                                                        Бриф



                                                                                                                                                                        Скачать бриф

























                                                                                                                                                                        [[+mn.success:is=`1`:then=`
                                                                                                                                                                        [[+fi.successMessage]]
                                                                                                                                                                        `]]
                                                                                                                                                                        [[+mn.validation_error:is=`1`:then=`
                                                                                                                                                                        [[+fi.validation_error_message]]
                                                                                                                                                                        `]]

                                                                                                                                                                        1. Алекс
                                                                                                                                                                          10 октября 2017, 21:36
                                                                                                                                                                          Но валидацию уберали, не помагает(((
                                                                                                                                                              2. Серега
                                                                                                                                                                08 октября 2017, 14:20
                                                                                                                                                                Добрый день. Не подскажите дружит ли AjaxForm с модальными окнами Bootstrap если все делать по вашей инструкции? То бишь создаем шаблон в котором будет вызов AjaxForm и назначаем его ресурсу, но потом выводим этот ресурс в модальном окне Bootstrap. То бишь имеется ссылка с data-target=«наше модальное окно» и href=«ссылка на ресурс с AjaxForm который выводится в модальном окне».
                                                                                                                                                                Просто столкнулся с проблемой: при нажатии на кнопку submit в форме, независимо от того прошли поля валидацию или нет, страница перезагружается, соответственно никаких сообщений об ошибках или успешной отправке не видать. Подозреваю что нужно как-то запретить bootstrap-у перезагружать окно после нажатия клавиши submit, но как это сделать да еще и так чтобы сама кнопка оставалась рабочей, то есть отправляла данные AjaxForm, не приложу ума. Форму копировал прямо с вашей статьи, модальное окно и кнопка оформлены так же по статье на itchief.ru, JQuery подключено и по отдельности все работает. То есть если открыть сам ресурс с аякс формой то все нормально, и сообщения отображаются и письма уходят, как и модальное окно все загружает и нормально открывается — закрывается.
                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                  18 октября 2017, 14:50
                                                                                                                                                                  Добрый день. Bootstrap может закрывать модальное окно, только если у кнопки установлен атрибут data-dismiss=«modal». Уберите его из кнопки и Bootstrap не будет закрывать модальное окно.
                                                                                                                                                                2. Nurik
                                                                                                                                                                  21 сентября 2017, 11:46
                                                                                                                                                                  Добрый день!
                                                                                                                                                                  Написал скрипт
                                                                                                                                                                  $(function(){
                                                                                                                                                                      $(document).on('af_complete', function(event, response) {
                                                                                                                                                                          var form = response.form;
                                                                                                                                                                          // если ответ пришёл успешный
                                                                                                                                                                          if (response.success) {
                                                                                                                                                                              $(".selected").css('display', 'none');
                                                                                                                                                                              $(".popup__footer-button").css('background-color', '#2dcf00').text('Отправлено');
                                                                                                                                                                              $(form).find(".taste__footer-button").css('background-color', '#2dcf00').text('Отправлено');
                                                                                                                                                                          }
                                                                                                                                                                      });
                                                                                                                                                                  });
                                                                                                                                                                  
                                                                                                                                                                  После отправки сообщения стили меняются у всех кнопок что прописаны. Как сделать так чтобы менялись только у использованной формы?
                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                    21 сентября 2017, 16:10
                                                                                                                                                                    Добрый день!
                                                                                                                                                                    Если все элементы расположены в теге form, то так:
                                                                                                                                                                    form.find(".selected").css('display', 'none');
                                                                                                                                                                    form.find(".popup__footer-button").css('background-color', '#2dcf00').text('Отправлено');
                                                                                                                                                                    
                                                                                                                                                                    Если не в форме, то тогда необходимо написать, как их найти относительно текущей формы (form).
                                                                                                                                                                    1. Nurik
                                                                                                                                                                      21 сентября 2017, 18:37
                                                                                                                                                                      Спасибо Шеф!
                                                                                                                                                                  2. Виталий
                                                                                                                                                                    24 августа 2017, 13:03
                                                                                                                                                                    Здравствуйте! Сделал все как в примере. РАботает на страницы обратной связи ок. Теперь появилась необходимость открыть форму в сплывающем окне и чтобы все ошибки валидации и сообщения показывались в нем же и только после отправки форма закрывалась. Как это можно сделать?

                                                                                                                                                                    Сейчас же после нажатия отправить окно закрывается и никакие сообщения не выводятся.
                                                                                                                                                                    И после успешной отправки письмо приходит, но если просто взять обновить страницу сайта, то письмо приходит снова на е-майл и так при каждом обновлении.

                                                                                                                                                                    Скажите пожалуйста куда копать?
                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                      28 августа 2017, 15:31
                                                                                                                                                                      Здравствуйте! Скорее всего, какие-то ошибки допустили в JavaScript. Т.к. форма должна отправляться по AJAX. Проверьте, есть ли ошибки в консоли браузера.
                                                                                                                                                                    2. Павел
                                                                                                                                                                      13 августа 2017, 22:56
                                                                                                                                                                      Вечер добрый шеф!!!
                                                                                                                                                                      Хотел у Вас узнать как можно сделать чтобы всплывающие уведомления (об отправке письма) не показывались в правом углу, а были над формой, как в оригинале Formit без ajax.
                                                                                                                                                                      Заранее благодарю!
                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                        14 августа 2017, 15:22
                                                                                                                                                                        Добрый день!
                                                                                                                                                                        Для этого необходимо:
                                                                                                                                                                        1. Добавить перед формой элемент, в который вы будете выводить сообщения:
                                                                                                                                                                        <div id="form-response"></div>
                                                                                                                                                                        2. Изменить файл default.js, расположенный по сведущему пути:
                                                                                                                                                                        \assets\components\ajaxform\js\default.js
                                                                                                                                                                        А именно, эту строчку
                                                                                                                                                                        AjaxForm.Message.error(response.message);
                                                                                                                                                                        на эту:
                                                                                                                                                                        $('#form-response').html(response.message);
                                                                                                                                                                        А эту:
                                                                                                                                                                        AjaxForm.Message.success(response.message);
                                                                                                                                                                        на следующую:
                                                                                                                                                                        $('#form-response').html(response.message);
                                                                                                                                                                        
                                                                                                                                                                        1. Павел
                                                                                                                                                                          15 августа 2017, 00:49
                                                                                                                                                                          Спасибо вариант работает, извиняюсь за назойливость только стили пропали! Подскажите пожалуйста, как можно решить эту проблему. Заранее спасибо!





                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                            15 августа 2017, 15:08
                                                                                                                                                                            Стили не пропали, их просто нет у элемента .
                                                                                                                                                                            Наиболее просто это сделать посредством добавления класса к элементу в зависимости от результата, который прислал сервер.
                                                                                                                                                                            //...
                                                                                                                                                                            
                                                                                                                                                                            //AjaxForm.Message.error(response.message);
                                                                                                                                                                            $('#form-response').removeClass('success').addClass('error');
                                                                                                                                                                            $('#form-response').html(response.message);
                                                                                                                                                                            
                                                                                                                                                                            //...
                                                                                                                                                                            
                                                                                                                                                                            //AjaxForm.Message.success(response.message);
                                                                                                                                                                            $('#form-response').removeClass('error').addClass('success');
                                                                                                                                                                            $('#form-response').html(response.message);
                                                                                                                                                                            
                                                                                                                                                                            //...
                                                                                                                                                                            
                                                                                                                                                                            После добавления 2 дополнительных строк, которые устанавливают класс элементу, необходимо определить в CSS необходимые стили:
                                                                                                                                                                            #form-response.success {
                                                                                                                                                                              color: green;
                                                                                                                                                                            }
                                                                                                                                                                            #form-response.error {
                                                                                                                                                                              color: red;
                                                                                                                                                                            }
                                                                                                                                                                            
                                                                                                                                                                            Если используете Bootstrap, то можно так:
                                                                                                                                                                            //AjaxForm.Message.error(response.message);
                                                                                                                                                                            $('#form-response').removeClass('alert alert-success').addClass('alert alert-warning');
                                                                                                                                                                            $('#form-response').html(response.message);
                                                                                                                                                                            //...
                                                                                                                                                                            //AjaxForm.Message.success(response.message);
                                                                                                                                                                            $('#form-response').removeClass('alert alert-warning').addClass('alert alert-success');
                                                                                                                                                                            $('#form-response').html(response.message);
                                                                                                                                                                            
                                                                                                                                                                            1. Павел
                                                                                                                                                                              15 августа 2017, 23:42
                                                                                                                                                                              Спасибо шеф за наводку, немного подумав сделал так:

                                                                                                                                                                              Алерт в форме
                                                                                                                                                                              <div  id="form-class" class="alert alert-red alert-dismissible hidden fade in" role="alert">
                                                                                                                                                                              <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
                                                                                                                                                                              <p id="form-response"></p>
                                                                                                                                                                              </div>
                                                                                                                                                                              
                                                                                                                                                                              Меняет код в файле \assets\components\ajaxform\js\default.js

                                                                                                                                                                              //AjaxForm.Message.error(response.message);
                                                                                                                                                                              $('#form-class').removeClass('hidden');
                                                                                                                                                                              $('#form-response').html(response.message);
                                                                                                                                                                              
                                                                                                                                                                              и здесь
                                                                                                                                                                              // AjaxForm.Message.success(response.message);
                                                                                                                                                                              $('#form-class').removeClass('alert-red').addClass('alert-green');
                                                                                                                                                                              $('#form-response').html(response.message);
                                                                                                                                                                              
                                                                                                                                                                      2. Алия
                                                                                                                                                                        07 августа 2017, 15:12
                                                                                                                                                                        Добрый день! Помогите!
                                                                                                                                                                        Чего только не делала, ничего не помогает.
                                                                                                                                                                        При отправке заявки перезагружается страница, сообщение об успешной отправке не появляется, но письмо приходит сразу, причем приходят 2 одинаковых письма (дублируется). Подключен jquery-1.12.3.min.js.
                                                                                                                                                                        В консоли Chrom: Uncaught ReferenceError: AjaxForm is not defined
                                                                                                                                                                        далее
                                                                                                                                                                        <script type="text/javascript">AjaxForm.initialize({"assetsUrl":"\/assets\/components\/ajaxform\/","actionUrl":"\/assets\/components\/ajaxform\/action.php","closeMessage":"\u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435","formSelector":"form.ajax_form","pageId":1});</script> (тут красный крестик)
                                                                                                                                                                        1. Виталий
                                                                                                                                                                          02 октября 2017, 12:45
                                                                                                                                                                          Была такая проблема. Дело может быть в версии jquery (попробуйте более свежую) или как у меня менеджер случайно удалил ссылку
                                                                                                                                                                          <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
                                                                                                                                                                          и стало даже по 4 одинаковых письма приходить
                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                            08 августа 2017, 15:34
                                                                                                                                                                            Не сталкивался с такой проблемой, попробуйте переустановить AjaxForm и FormIt, а также очистить содержимое каталога cache (/core/cache/).
                                                                                                                                                                          2. Андрей
                                                                                                                                                                            28 июля 2017, 19:01
                                                                                                                                                                            У меня никак не получается сделать такую задачу:
                                                                                                                                                                            1. Есть форма на AjaxForm и своем сниппете. назовем его snippet_form
                                                                                                                                                                            2. Форма при отправке заносит некие данные в таблицу БД. Здесь запускается процессор, которые делает различные проверки и все если успешно, то все заносится. Это все стандартно.
                                                                                                                                                                            3. Сейчас появилось желание привязать к форме робокассу. И здесь я вижу 2 пути:
                                                                                                                                                                            а). По отправке формы записать все данные в БД, но с неким значением active = 0, а потом переадресовать из сниппета snippet_form переадресовывать пользователя на страницу оплаты. По завершении оплаты, если все успешно, то у данной записи менять active на 1. Или же переадрсеацию делать из процессора?
                                                                                                                                                                            б). При отправке формы после занесения данных, также с значением active = 0 переадресовывать пользователя на страницу, с кнопкой Оплатить.

                                                                                                                                                                            Мне более по душе вариант 3-а, но вот как сделать так, чтобы после отправки у меня происходил переход на страницу оплаты не пойму.
                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                              29 июля 2017, 15:28
                                                                                                                                                                              Например, можно после получения ответа от процессора, проверить, содержит ли он ошибки. И если нет, то вызвать редирект:
                                                                                                                                                                              $modx->sendRedirect($url);
                                                                                                                                                                              1. Андрей
                                                                                                                                                                                29 июля 2017, 15:42
                                                                                                                                                                                А подскажите, я при редиректе могу передать на страницу какие-либо параметры?
                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                  29 июля 2017, 16:22
                                                                                                                                                                                  Можно так:
                                                                                                                                                                                  $data = array('key1' => 'value1','key2'=>'value2');
                                                                                                                                                                                  $queryString = http_build_query($data);
                                                                                                                                                                                  $url = 'https://domain.com?'.$queryString;
                                                                                                                                                                                  $modx->sendRedirect($url);
                                                                                                                                                                                  
                                                                                                                                                                                  1. Андрей
                                                                                                                                                                                    31 июля 2017, 08:57
                                                                                                                                                                                    Александр, я попробовал сделать редирект, но получаю в консоли 302 ответ у файла action.php в котором он перенаправляет на нужную страницу. Но все происходит в AJAX без физической переадресации. А мне нужно, чтобы у меня произошел переход физически на страницу. Может какие-то параметры нужно передать?
                                                                                                                                                                                    Может быть нужно использовать callback для данной формы. Например так:

                                                                                                                                                                                    $(document).on('af_complete', function(event, response) {
                                                                                                                                                                                        var form = response.form;
                                                                                                                                                                                        if (form.attr('id') == '#form') {
                                                                                                                                                                                    	   window.location.href = "http://нужный адрес"
                                                                                                                                                                                        }
                                                                                                                                                                                    });
                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                      31 июля 2017, 16:24
                                                                                                                                                                                      Да, необходимо ещё добавить дополнительный параметр:
                                                                                                                                                                                      $modx->sendRedirect($url,array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
                                                                                                                                                                                      
                                                                                                                                                                                      1. Андрей
                                                                                                                                                                                        31 июля 2017, 16:30
                                                                                                                                                                                        Добавил, но физически страница не открывается. Она появляется в вкладке Network. А мне нужен физический переход на страницу.
                                                                                                                                                                                        В тоже время консоль ругается так:
                                                                                                                                                                                        XMLHttpRequest cannot load auth.robokassa.ru/Merchant/Index.aspx… Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header has a value 'https://auth.robokassa.local' that is not equal to the supplied origin. Origin 'https://site.ru' is therefore not allowed access.
                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                          31 июля 2017, 17:05
                                                                                                                                                                                          Да, если вы используете AJAX, тогда просто вместе с успешным ответом, верните клиенту URL, на который он должен перейти. Метод sendRedirect использовать не надо.
                                                                                                                                                                                          А в JavaScript используйте код, который вы писали выше, только не забудьте проверить успешность ответа:
                                                                                                                                                                                          if (response.success) {
                                                                                                                                                                                            document.location.href = response.url;
                                                                                                                                                                                          }
                                                                                                                                                                                          
                                                                                                                                                                                    2. Андрей
                                                                                                                                                                                      29 июля 2017, 17:50
                                                                                                                                                                                      Класс. Спасибо большое.
                                                                                                                                                                              2. kalisto
                                                                                                                                                                                30 июня 2017, 11:06
                                                                                                                                                                                Прошу вашей помощи.
                                                                                                                                                                                Добавила во все формы checkbox в связи с законом ФЗ-152 к примеру здесь
                                                                                                                                                                                <div class="checkbox">
                                                                                                                                                                                    <label>
                                                                                                                                                                                      <input type="checkbox" name="fz152" required> <span>Ставя отметку, я даю согласие на обработку моих персональных данных в соотвествии с законом №152-ФЗ «О персональных данных» от 27.07.2006 и принимаю условия <a href="assets/themekalisto-design/pk.pdf" target="_blank">Пользовательского соглашения</a></span>
                                                                                                                                                                                    </label>
                                                                                                                                                                                    <span class="error_email">[[+fi.error.fz152]]</span>
                                                                                                                                                                                  </div>
                                                                                                                                                                                Делаю в вызове ajaxForm проверку
                                                                                                                                                                                &validate=`name:required:minLength=`2`,
                                                                                                                                                                                                   email:email:required,
                                                                                                                                                                                                   checkbox:required,
                                                                                                                                                                                                   message:required:stripTags`
                                                                                                                                                                                И письма на почту не уходят и в админке не добавляются в Formit
                                                                                                                                                                                Также сменилось стандарный вывод форма отправлена, а не текст из &successMessage
                                                                                                                                                                                В админке выдается ошибка.Как исправить все это?
                                                                                                                                                                                (ERROR @ ...core/xpdo/om/xpdoquery.class.php : 704) Error parsing condition with key 0: 
                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                  30 июня 2017, 15:48
                                                                                                                                                                                  Для этого надо добавить к кнопке атрибут disabled:
                                                                                                                                                                                  <input type="checkbox" name="fz152" id="fz152">
                                                                                                                                                                                  <input type="submit" id="my-submit" disabled="disabled">
                                                                                                                                                                                  
                                                                                                                                                                                  Добавить JavaScript на страницу:
                                                                                                                                                                                  $('#fz152').change(function(){
                                                                                                                                                                                    if(this.checked) {
                                                                                                                                                                                      $('#my-submit').prop('disabled',false);
                                                                                                                                                                                    } else {
                                                                                                                                                                                      $('#my-submit').prop('disabled',true);
                                                                                                                                                                                    }
                                                                                                                                                                                  });
                                                                                                                                                                                  
                                                                                                                                                                                  При этом в ajaxForm добавлять ничего не надо.
                                                                                                                                                                                  1. kalisto
                                                                                                                                                                                    30 июня 2017, 20:12
                                                                                                                                                                                    Александр! Все работает в случае одной формы, а на странице бывает до 8 форм на главной к примеру и не работает выбор кнопки отправить. Как исправить?
                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                      01 июля 2017, 16:15
                                                                                                                                                                                      Тогда не надо привязываться к кнопке и написать так:
                                                                                                                                                                                      $('input[name="fz152"]').change(function(){
                                                                                                                                                                                        if(this.checked) {
                                                                                                                                                                                          $(this).closest('form').find('[type="submit"]').prop('disabled',false);
                                                                                                                                                                                        } else {
                                                                                                                                                                                          $(this).closest('form').find('[type="submit"]').prop('disabled',true);
                                                                                                                                                                                        }
                                                                                                                                                                                      });
                                                                                                                                                                                      
                                                                                                                                                                                      1. kalisto
                                                                                                                                                                                        03 июля 2017, 21:14
                                                                                                                                                                                        Александр! Спасибо Вам за помощь и поддержку!
                                                                                                                                                                                    2. kalisto
                                                                                                                                                                                      30 июня 2017, 16:04
                                                                                                                                                                                      Огромное спасибо Александр! Сейчас буду пробовать.
                                                                                                                                                                                  2. kalisto
                                                                                                                                                                                    21 июня 2017, 18:45
                                                                                                                                                                                    Здравствуйте Александр!
                                                                                                                                                                                    Есть калькулятор на ajaxForm. Прошу вашей помощи
                                                                                                                                                                                    На главной калькулятор работает
                                                                                                                                                                                    skrinshoter.ru/s/210617/iOjEGYHt
                                                                                                                                                                                    А на отдельной странице идет обнуление html, тот же калькулятор не работает.
                                                                                                                                                                                    Как мне исправить?
                                                                                                                                                                                    А 2-й вопрос как мне передать не емейл введенные данные radio? Их несколько в форме типа таких
                                                                                                                                                                                    Я в чанке пишу
                                                                                                                                                                                    Сообщение с сайта [[!++site_url]]От кого: [[+name:default=`Не заполнено`]]
                                                                                                                                                                                    Email: [[+email:default=`Не заполнено`]]
                                                                                                                                                                                    Тип кухни: [[+kitchen-type:default=`Не заполнено`]]
                                                                                                                                                                                    Длина кухонного гарнитура в метрах: [[+kitchen-length:default=`Не заполнено`]]
                                                                                                                                                                                    Фасады(дверцы): [[+kitchen-facade:default=`Не заполнено`]]
                                                                                                                                                                                    Фурнитура: [[+kitchen-furniture:default=`Не заполнено`]]
                                                                                                                                                                                    Сообщение: [[+message:default=`Не заполнено`]]
                                                                                                                                                                                    И не передаются radio — Тип кухни, Длина кухонного гарнитура в метрах и т.д.
                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                      22 июня 2017, 16:06
                                                                                                                                                                                      Здравствуйте. На странице калькулятора необходимо искать ошибку в JavaScript сценариях.
                                                                                                                                                                                      Данные радиокнопок у вас не отправляются на сервер, т.к. при их выборе, к ним не добавляется атрибут checked.
                                                                                                                                                                                      1. kalisto
                                                                                                                                                                                        23 июня 2017, 21:00
                                                                                                                                                                                        Спасибо Александр!
                                                                                                                                                                                        ошибку в js исправила
                                                                                                                                                                                        Прошу помощи. калькулятор на странице.
                                                                                                                                                                                        Там блоки в форме типа
                                                                                                                                                                                        <div class="inputs kitchen-furniture" id=""kitchen-furniture>
                                                                                                                                                                                                            <div class="input-item">
                                                                                                                                                                                                              <input type="radio" name="kitchen-furniture" id="boyard" value="boyard" [[!+fi.kitchen-furniture:FormItIsChecked=`boyard`]]>
                                                                                                                                                                                                              <label for="boyard">
                                                                                                                                                                                                                <span class="furniture-info">
                                                                                                                                                                                                                  <span class="furniture-desc">
                                                                                                                                                                                                                    Отечественная без доводчиков
                                                                                                                                                                                                                  </span>
                                                                                                                                                                                                                </span>
                                                                                                                                                                                                              </label>
                                                                                                                                                                                                            </div>
                                                                                                                                                                                                            <div class="input-item">
                                                                                                                                                                                                              <input type="radio" name="kitchen-furniture" id="blum" value="Blum" [[!+fi.kitchen-furniture:FormItIsChecked=`Blum`]]>
                                                                                                                                                                                                              <label for="blum">
                                                                                                                                                                                                                <img src="assets/themekalisto-design/img/calc/blum.png" width="72" alt="">
                                                                                                                                                                                                                <span class="furniture-info">
                                                                                                                                                                                                                  <span>Blum</span>
                                                                                                                                                                                                                  <span class="furniture-desc">
                                                                                                                                                                                                                    Австрийская с доводчиками
                                                                                                                                                                                                                  </span>
                                                                                                                                                                                                                </span>
                                                                                                                                                                                                              </label>
                                                                                                                                                                                                            </div>
                                                                                                                                                                                                          </div>
                                                                                                                                                                                        Как мне вывести в консоле результат input?
                                                                                                                                                                                        Пробовала по-разному и не получается
                                                                                                                                                                                        К примеру так
                                                                                                                                                                                        <script type="text/javascript">
                                                                                                                                                                                          $(document).ready(function() {
                                                                                                                                                                                          	 $("input[name=kitchen-furniture").live("change", function() {
                                                                                                                                                                                          	    var field;
                                                                                                                                                                                          	    var checkElements=document.getElementsByName("kitchen-furniture");
                                                                                                                                                                                            		for(var i=0; i<checkElements.length; i++) {
                                                                                                                                                                                            		  //alert('Мы вошли сюда!');
                                                                                                                                                                                                  checkElement = checkElements[i];
                                                                                                                                                                                            			if (checkElement.checked==1) {
                                                                                                                                                                                                    field = checkElement.value;
                                                                                                                                                                                                    console.log($("input[name=kitchen-furniture]"));
                                                                                                                                                                                            			}  
                                                                                                                                                                                            		}
                                                                                                                                                                                          		});                               
                                                                                                                                                                                        	});
                                                                                                                                                                                        </script>
                                                                                                                                                                                        И 2-й вопрос
                                                                                                                                                                                        Как лучше мне сделать?
                                                                                                                                                                                        На последнем 5-м шаге идет попап-форма отправки на емейл стоимости в зависимости от выбора опций.
                                                                                                                                                                                        То есть форма в форме.
                                                                                                                                                                                        Попап форма — использую ajaxForm, а как из 1-й формы передать выбранные опции в попап форму для отправки на емейл всех введенных данных?
                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                          27 июня 2017, 17:27
                                                                                                                                                                                          Если вы хотите вывести значение input в консоль, то можно так:
                                                                                                                                                                                          $('input[name="kitchen-furniture"').on('change', function() {
                                                                                                                                                                                            console.log($('input[name="kitchen-furniture"]:checked').val());
                                                                                                                                                                                          });
                                                                                                                                                                                          
                                                                                                                                                                                          Передать данные первой формы во вторую можно посредством вставки в неё скрытых полей. Т.е. написать JavaScript сценарий, который будет это выполнять при нажатии на кнопку «Узнать стоимость».
                                                                                                                                                                                          1. kalisto
                                                                                                                                                                                            29 июня 2017, 20:38
                                                                                                                                                                                            js форму здесь добавлются
                                                                                                                                                                                            <input type="hidden" id="kitchen-type" name="kitchen-type" value="Прямая(к примеру)">
                                                                                                                                                                                            в console.log вижу выбранное значение
                                                                                                                                                                                            Но на почту пустые поля идут
                                                                                                                                                                                            <p><strong>Тип кухни: </strong>[[+kitchen-type:default=`Не заполнено`]]</p>
                                                                                                                                                                                            , как исправить?
                                                                                                                                                                                            hook
                                                                                                                                                                                            &hooks=`spam,FormItSaveForm,calculatorHook,email`
                                                                                                                                                                                            Снипет calculatorHook
                                                                                                                                                                                            <?php
                                                                                                                                                                                            $valueKuxniType = $hook->getValue('kitchen-type');
                                                                                                                                                                                            $hook->setValue('kitchen-type', $valueKuxniType);
                                                                                                                                                                                            return true;
                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                              30 июня 2017, 15:36
                                                                                                                                                                                              Вам необходимо добавить в форму, посредством которой вы отправляете данные на сервер скрытые поля:
                                                                                                                                                                                              <input type="hidden" id="kitchenType" name="kitchen-type" value="">
                                                                                                                                                                                              ...
                                                                                                                                                                                              
                                                                                                                                                                                              Далее при нажатию на кнопку «Узнать стоимость», например, повесить обработчик, который будет устанавливать значения скрытых полей на основании выбранных опций:
                                                                                                                                                                                              $('a[href="#free-coast"]').click(function(){
                                                                                                                                                                                                $('#kitchenType').val($('input[name="kitchen-type"]:checked').val());
                                                                                                                                                                                                ...
                                                                                                                                                                                              });
                                                                                                                                                                                              
                                                                                                                                                                                              Никаких хуков писать не надо, все переданные поля будут доступны в шаблоне письма.

                                                                                                                                                                                              Посмотреть отправляемые данные можно, например, в браузере Chrome на вкладке Network.
                                                                                                                                                                                              1. kalisto
                                                                                                                                                                                                30 июня 2017, 16:06
                                                                                                                                                                                                Огромное спасибо Александр, сейчас все буду пробовать.
                                                                                                                                                                                            2. kalisto
                                                                                                                                                                                              29 июня 2017, 10:08
                                                                                                                                                                                              Огромное Вам спасибо, Александр!
                                                                                                                                                                                      2. Вадим
                                                                                                                                                                                        19 июня 2017, 03:31
                                                                                                                                                                                        Здравствуйте.
                                                                                                                                                                                        Подскажите, пожалуйста, в чем может быть дело.

                                                                                                                                                                                        Почему-то при успешной отправке формы вместо текста `Сообщение успешно отправлено` пишет «Форма успешно отправлена».

                                                                                                                                                                                        На сайте использую FormIt и AjaxForm.
                                                                                                                                                                                        Значение register_globals стоит OFF

                                                                                                                                                                                        Параметры вызова:
                                                                                                                                                                                        [[!AjaxForm?
                                                                                                                                                                                        	&snippet=`FormIt`
                                                                                                                                                                                        	&form=`tpl.AjaxForm`
                                                                                                                                                                                        	&hooks=`email`
                                                                                                                                                                                        	&emailSubject=`Письмо с сайта`
                                                                                                                                                                                        	&emailTo=`info@мой_домен.ru`
                                                                                                                                                                                        	&validate=`name:required,message:required,e-mail:required`
                                                                                                                                                                                        	&validationErrorMessage=`В форме содержатся ошибки!`
                                                                                                                                                                                        	&successMessage=`Сообщение успешно отправлено`
                                                                                                                                                                                        ]]
                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                          19 июня 2017, 14:30
                                                                                                                                                                                          Здравствуйте. Не знаю, ни разу с таким не сталкивался. Попробуйте очистить кэш MODX и запустить страницу в браузере в режиме инкогнито.
                                                                                                                                                                                          1. Вадим
                                                                                                                                                                                            19 июня 2017, 21:28
                                                                                                                                                                                            Куки почистил. Скорее всего, в них дело было. Спасибо.
                                                                                                                                                                                            Еще подскажите, пожалуйста, фон и цвет текста всплывающего сообщения в каком файле правится?
                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                              20 июня 2017, 14:51
                                                                                                                                                                                              По умолчанию стили всплывающих сообщений находятся в файле \assets\components\ajaxform\css\defaults.css.
                                                                                                                                                                                              Но вы можете сделать это и в своём файле CSS:
                                                                                                                                                                                              .af-message-success {
                                                                                                                                                                                                background-color: green !important;
                                                                                                                                                                                                color: #fff !important;
                                                                                                                                                                                              }
                                                                                                                                                                                              .af-message-error {
                                                                                                                                                                                                background-color: brown !important;
                                                                                                                                                                                                color: #fff !important;
                                                                                                                                                                                              }
                                                                                                                                                                                              .af-message-info {
                                                                                                                                                                                                background-color: black !important;
                                                                                                                                                                                                color: #fff !important;
                                                                                                                                                                                              }
                                                                                                                                                                                              
                                                                                                                                                                                              1. Вадим
                                                                                                                                                                                                23 июня 2017, 01:53
                                                                                                                                                                                                Спасибо большое за помощь
                                                                                                                                                                                        2. Evgenij
                                                                                                                                                                                          19 мая 2017, 10:29
                                                                                                                                                                                          Александр здравствуйте!
                                                                                                                                                                                          Подскажите пожалуйста что нужно сделать, чтобы при проверке (валидации) формы поле textarea не очищалось. А то получается человек навводил, например, текста, ошибся в одном-двух символах, проверку форма не проходит и весь текст очищается. Нехорошо. Как это исправить? Использую ajax+formit. Ниже код поля ввода текста и условия валидации при вызове сниппета:
                                                                                                                                                                                          <div class="form-group has-feedback">
                                                                                                                                                                                                                 <label class="control-label" for="af_message">Напишите Ваш вопрос</label>
                                                                                                                                                                                                                 <div class="controls">
                                                                                                                                                                                                                 <textarea class="form-control" id="af_message" name="message" rows="3" value="[[!+fi.message]]" placeholder="Введите Ваш вопрос"></textarea>
                                                                                                                                                                                                                 <span class="error_message">[[!+fi.error.message]]</span>
                                                                                                                                                                                                                 </div>
                                                                                                                                                                                                                </div>
                                                                                                                                                                                          &validate=`name:required,phone:required:isNumber:maxLength=12,email:email:required,message:required:stripTags`
                                                                                                                                                                                          1. Evgenij
                                                                                                                                                                                            19 мая 2017, 10:51
                                                                                                                                                                                            Вопрос отпал. Все нормально.
                                                                                                                                                                                          2. Anton
                                                                                                                                                                                            17 мая 2017, 12:55
                                                                                                                                                                                            Добрый день. А подскажите пожалуйста, есть ли у FormIt ограничение на количество вводимых в текст сообщения символов, по достижении которого сообщение не отправится? Можно-ли средствами modx реализовать подсчёт введённых сиволов, или для этой цели нужен отдельный js скрипт?
                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                              17 мая 2017, 15:34
                                                                                                                                                                                              Сейчас большинство браузеров позволяют проверять формы. Для этого необходимо к элементу добавить атрибут maxlength:
                                                                                                                                                                                              <textarea name="message" class="form-control" rows="3" maxlength="50"></textarea>
                                                                                                                                                                                              
                                                                                                                                                                                              Но всё что делается на стороне клиента можно обойти. Поэтому это необходимо обязательно проверять на стороне сервера (для FormIt):
                                                                                                                                                                                              &validate=`name:required,email:required,message:maxLength=^50^`
                                                                                                                                                                                              
                                                                                                                                                                                              А если нужно проверять минимальное и максимальное количество символов (например, у поля message), то так:
                                                                                                                                                                                              &validate=`name:required,email:required,message:minLength=^6^:maxLength=^12^`
                                                                                                                                                                                              
                                                                                                                                                                                              1. Anton
                                                                                                                                                                                                17 мая 2017, 16:15
                                                                                                                                                                                                Спасибо
                                                                                                                                                                                            2. AntonFix
                                                                                                                                                                                              28 апреля 2017, 18:27
                                                                                                                                                                                              Спасибо большое за сайт!
                                                                                                                                                                                              Скажите, пожалуйста, как сообщить пользователю что сообщение отправлено успешно на том же месте, где форма (а ее скрыть)?
                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                01 мая 2017, 14:18
                                                                                                                                                                                                Добавить на страницу JavaScript сценарий:
                                                                                                                                                                                                $(function(){
                                                                                                                                                                                                  $(document).on('af_complete', function(event, response) {
                                                                                                                                                                                                    var form = response.form;
                                                                                                                                                                                                    // если ответ пришёл успешный
                                                                                                                                                                                                    if (response.success) {
                                                                                                                                                                                                      var successMessage = '<p class="alert alert-success">Сообщение отправлено.</p>';
                                                                                                                                                                                                      $(form).hide();
                                                                                                                                                                                                      $(form).after(successMessage);
                                                                                                                                                                                                    }
                                                                                                                                                                                                  });  
                                                                                                                                                                                                });
                                                                                                                                                                                                
                                                                                                                                                                                                1. AntonFix
                                                                                                                                                                                                  01 мая 2017, 14:54
                                                                                                                                                                                                  Спасибо большое!
                                                                                                                                                                                                  Мое мнение: такой функционал надо включить сразу в Ajaxform, как параметр (типа &jGrowl=`0`), тогда вывод ответа вместо формы.
                                                                                                                                                                                              2. lecksys
                                                                                                                                                                                                22 апреля 2017, 00:21
                                                                                                                                                                                                День добрый. Делал по вашим урокам. аджакс работает, валидация отрабатывает. и письма приходят, а в формит заполненные формы не видно. Подскажите куда копать?
                                                                                                                                                                                                1. lecksys
                                                                                                                                                                                                  22 апреля 2017, 00:28
                                                                                                                                                                                                  разобрался. Название шаблона формы было на русском языке
                                                                                                                                                                                                2. Наталья
                                                                                                                                                                                                  12 апреля 2017, 12:12
                                                                                                                                                                                                  Добрый день!
                                                                                                                                                                                                  Прошу помощи у знатоков (ответ разжуйте пож-та, я новичок!!!):
                                                                                                                                                                                                  Создаю форму с вложением — tpl.FormOrder
                                                                                                                                                                                                  <form action="[[~[[*id]]]]" method="post" enctype="multipart/form-data">
                                                                                                                                                                                                         <input type="file" name="attachment" value="[[!+fi.attachment]]"/>
                                                                                                                                                                                                  </form>
                                                                                                                                                                                                  
                                                                                                                                                                                                  Вывод на странице выглядит так:
                                                                                                                                                                                                  [[!AjaxForm?
                                                                                                                                                                                                         &snippet=`FormIt`
                                                                                                                                                                                                         &form=`tpl.FormOrder`
                                                                                                                                                                                                         &hooks=`spam,FormItSaveForm,email`
                                                                                                                                                                                                         &emailSubject=`Новый заказ на сайте`
                                                                                                                                                                                                         &emailTo=`мой email`
                                                                                                                                                                                                         &emailFrom=`от кого email`
                                                                                                                                                                                                         &emailTpl=`tpl.FormEmail`
                                                                                                                                                                                                         &validate=`name:minLength=^3^,email:email:required,message:minLength=^3^,workemail:blank`
                                                                                                                                                                                                        &validationErrorMessage=`В форме содержатся ошибки!`
                                                                                                                                                                                                        &successMessage=`Заказ успешно отправлен!`
                                                                                                                                                                                                  ]]
                                                                                                                                                                                                  
                                                                                                                                                                                                  Письмо отправляется отлично, поля очищаются, сообщение появляется, все ок!
                                                                                                                                                                                                  НО — поле с файлом так и содержит название загруженной картинки!!!

                                                                                                                                                                                                  В верстке используется плагин для стилизации — jQuery Form Styler, на выходе он прячет input type=«file» в opacity: 0 и добавляет контейнеры (div) для стилизации
                                                                                                                                                                                                  <div class="jq-file" style="display: inline-block; position: relative; overflow: hidden;">
                                                                                                                                                                                                      <div class="jq-file__name">Загрузить файлы</div>
                                                                                                                                                                                                      <div class="jq-file__browse">Обзор...</div>
                                                                                                                                                                                                      <input name="attachment" value="" style="opacity: 0;" type="file">
                                                                                                                                                                                                  </div>
                                                                                                                                                                                                  
                                                                                                                                                                                                  Где — .jq-file__name — является контейнером для названия файла и имеет цвет текста как у плейсхолдера.
                                                                                                                                                                                                  Когда файл загружен, добавляется класс .changed, который меняет цвет текста у контейнера .jq-file__name на черный и код выглядит так:
                                                                                                                                                                                                  <div class="jq-file changed" style="display: inline-block; position: relative; overflow: hidden;">
                                                                                                                                                                                                      <div class="jq-file__name">123.jpg</div>
                                                                                                                                                                                                      <div class="jq-file__browse">Обзор...</div>
                                                                                                                                                                                                      <input name="attachment" value="" style="opacity: 0;" type="file">
                                                                                                                                                                                                  </div>
                                                                                                                                                                                                  
                                                                                                                                                                                                  МНЕ НУЖНО — после отправки формы — вернуть все в исходное положение — удалить класс .changed и заменить у контейнера .jq-file__name текст на изначальный — «Загрузить файлы»
                                                                                                                                                                                                  Предполагаю, что нужно создать сниплет и подключить его к AjaxForm — с подключением я наверное справлюсь — а вот с php не знакома, да и modx для меня в новинку — что нужно написать в этом сниплете? Если можно — подробнее, как для чайника…
                                                                                                                                                                                                  И что делать — если на странице будет несколько таких форм?
                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                    12 апреля 2017, 13:17
                                                                                                                                                                                                    Здравствуйте.
                                                                                                                                                                                                    Тут достаточно будет скрипта JavaScript. Данный скрипт необходимо разместить в шаблоне после подключения библиотеки jQuery. Он будет после отправки формы восстанавливать её первоначальное состояние.
                                                                                                                                                                                                    <script>
                                                                                                                                                                                                    $(function(){
                                                                                                                                                                                                      $(document).on('af_complete', function(event, response) {
                                                                                                                                                                                                        var form = response.form;
                                                                                                                                                                                                        if ($(form).hasClass('ajaxform')) {
                                                                                                                                                                                                          $(form).html('<div class="jq-file" style="display: inline-block; position: relative; overflow: hidden;">'+
                                                                                                                                                                                                            '<div class="jq-file__name">Загрузить файлы</div>'+
                                                                                                                                                                                                            '<div class="jq-file__browse">Обзор...</div>'+
                                                                                                                                                                                                            '<input name="attachment" value="" style="opacity: 0;" type="file">'+
                                                                                                                                                                                                          '</div>');
                                                                                                                                                                                                        }
                                                                                                                                                                                                      });  
                                                                                                                                                                                                    });
                                                                                                                                                                                                    </script>
                                                                                                                                                                                                    
                                                                                                                                                                                                    Для идентификации нужных форм добавьте к ним класс ajaxform:
                                                                                                                                                                                                    <form class="ajaxform" action="[[~[[*id]]]]" method="post" enctype="multipart/form-data">
                                                                                                                                                                                                      ...
                                                                                                                                                                                                    </form>
                                                                                                                                                                                                    
                                                                                                                                                                                                    1. Наталья
                                                                                                                                                                                                      12 апреля 2017, 13:32
                                                                                                                                                                                                      Хм, данный метод не подходит:
                                                                                                                                                                                                      1. Он не проверяет отправку формы! Если форма еще не отправлена и заполнена с ошибками — ваш скрипт срабатывает! а еще рано))))
                                                                                                                                                                                                      2. Для каждой формы на странице писать весь изначальный код в скрипте??? ооо, это не просто костыль, это еще хуже))
                                                                                                                                                                                                      Было бы лучше наверное прикрепить вот это для нужной формы:
                                                                                                                                                                                                      $(".jq-file").removeClass("changed");
                                                                                                                                                                                                      $(".jq-file__name").html('Файлы для верстки');
                                                                                                                                                                                                      
                                                                                                                                                                                                      то есть после отправки — для этой формы удалить класс .changed и заменить текст в контейнере…
                                                                                                                                                                                                      Но опять же — могу объяснить на пальцах что хочу — а как применить это чтобы все работало на php или в скрипте — не знаю!
                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                        12 апреля 2017, 15:39
                                                                                                                                                                                                        Ну да, ещё на успешность отправки необходимо проверить:
                                                                                                                                                                                                        $(function(){
                                                                                                                                                                                                          $(document).on('af_complete', function(event, response) {
                                                                                                                                                                                                            var form = response.form;
                                                                                                                                                                                                            // если ответ пришёл успешный
                                                                                                                                                                                                            if (response.success) {
                                                                                                                                                                                                              if ($(form).hasClass('ajaxform')) {
                                                                                                                                                                                                                $(form).find('.jq-file').removeClass('changed');
                                                                                                                                                                                                                $(form).find('.jq-file__name').text('Загрузить файлы');
                                                                                                                                                                                                              }
                                                                                                                                                                                                            }
                                                                                                                                                                                                          });  
                                                                                                                                                                                                        });
                                                                                                                                                                                                        
                                                                                                                                                                                                        1. Наталья
                                                                                                                                                                                                          12 апреля 2017, 16:42
                                                                                                                                                                                                          Спасибо огромное! Заработало!!!
                                                                                                                                                                                                  2. Юрий
                                                                                                                                                                                                    31 марта 2017, 11:48
                                                                                                                                                                                                    Здравствуйте, подскажите пожалуйста. Такая ситуация, есть 10 услуг на ленде (без отдельных страниц, просто перечень itchief.ru/assets/uploadify/a/1/b/a1bee03a48ef4fa1333ef0fec3926955.png ), под каждой есть кнопка со всплывающей формой, для того, чтобы определить из какой услуги пришла заявка, нужно создавать под каждую услугу свою форму с темой (чтобы за счет темы определить)/
                                                                                                                                                                                                    Можно ли сделать так, чтобы в тему например подтягивалось из названия услуги или любого другого элемента в другой ситуации, например если этот элемент выводится через ТВ поле [[*tvname]]?
                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                      01 апреля 2017, 06:44
                                                                                                                                                                                                      Здравствуйте, наиболее просто это сделать с помощью JavaScript. Если у Вас все формы одинаковые, то можете создать скрытое поле, для хранения в нём название услуги. При нажатии на кнопку изменять его значение (название услуги) в соответствии со значением data-атрибута кнопки (например, data-subject).
                                                                                                                                                                                                      Скрытое поле в форме:
                                                                                                                                                                                                      <input type="hidden" name="subject" id="subject" value="">
                                                                                                                                                                                                      
                                                                                                                                                                                                      Кнопки для открытия модального окна:
                                                                                                                                                                                                      <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal" data-subject="Услуга 1">
                                                                                                                                                                                                        Получить консультацию
                                                                                                                                                                                                      </button>
                                                                                                                                                                                                      <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal" data-subject="Услуга 2">
                                                                                                                                                                                                        Получить консультацию
                                                                                                                                                                                                      </button>
                                                                                                                                                                                                      
                                                                                                                                                                                                      Скрипт, который будет изменять значение скрытого поля:
                                                                                                                                                                                                      <script>
                                                                                                                                                                                                      $(function(){
                                                                                                                                                                                                        $('button[data-target="#myModal"]').click(function(){
                                                                                                                                                                                                          $('#subject').val($(this).attr('data-subject'));
                                                                                                                                                                                                        });
                                                                                                                                                                                                      });
                                                                                                                                                                                                      
                                                                                                                                                                                                      1. Юрий
                                                                                                                                                                                                        03 апреля 2017, 17:13
                                                                                                                                                                                                        Спасибо, с этим немного разобрался! Есть еще такие вопросы:
                                                                                                                                                                                                        1. А как например быть в случае с открытой формой? Предположим у формы есть заголовок или у блока в котором находится форма, можно ли в таком случае подтянуть название формы скриптом? Например название формы <div class=«bl-1-titl-1» ТОЛЬКО СЕЙЧАС </div (не получается в комменте нормально вставить теги, у Вас наверное очистка стоит). Чтобы это название пришло в письме.
                                                                                                                                                                                                        2. Вы оставляете значение value="" пустым, можно его вообще в таком случае удалять для всех полей, если они не заполняются?
                                                                                                                                                                                                        3. Можно ли как то сделать чтобы из поля &emailFrom=`mymail@mail.ru` подтягивался не имейл а название компании к примеру. Потому что не оч. смотрится во входящих просто имейл отправителя, по нормальному должно указываться название отправителя, например «Компания Бла-бла»
                                                                                                                                                                                                        4. Как автоматически отправлять благодарственное письмо клиенту (Простой вариант, Спасибо за Ваше сообщение, наш менеджер свяжется с Вами как можно быстрее.) и как создать шаблон письма в таком случае… у разных форм, могут быть разные благодарственные письма
                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                          05 апреля 2017, 15:39
                                                                                                                                                                                                          Название формы можно добавлять и скриптом JavaScript. Т.е. делайте, так как вам нравится.
                                                                                                                                                                                                          Для указания названия компании используйте параметр emailFromName:
                                                                                                                                                                                                          &emailFromName=`Название компании`
                                                                                                                                                                                                          
                                                                                                                                                                                                          Для отправки благодарственного скрипта необходимо создать хук. Как это сделать, можно посмотреть в этом комментарии:
                                                                                                                                                                                                          itchief.ru/lessons/modx-revo/modx-contact-form#comment-3652
                                                                                                                                                                                                          Если вам необходимо отдавать разные благодарственные письма, то вам необходимо, например, создать ассоциативный массив в этом хуке. В этом массиве назначить каждой форме соответствующий шаблон. После этого определять какая эта форма и соответственно отдавать тот или иной шаблон письма.
                                                                                                                                                                                                          1. Юрий
                                                                                                                                                                                                            05 апреля 2017, 16:54
                                                                                                                                                                                                            С названием понял, спасибо большое). Со скриптом так и не разобрался как подтянуть название формы…
                                                                                                                                                                                                            Насчет itchief.ru/lessons/modx-revo/modx-contact-form#comment-3652, не получается, в том примере, что Вы сбросили, там с чекбоксом, а у меня без и я не пойму как сделать…
                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                              08 апреля 2017, 06:27
                                                                                                                                                                                                              Написания скрипта осуществляется на основании HTML структуры, которую вы организовали на странице. Здесь сложно что-то подсказать…
                                                                                                                                                                                                              Могу предложить такое решение:
                                                                                                                                                                                                              <form id="id-1" action="" method="post" class="ajax_form af_example form-horizontal">
                                                                                                                                                                                                                ...
                                                                                                                                                                                                              </form>
                                                                                                                                                                                                              ...
                                                                                                                                                                                                              <form id="id-2" action="" method="post" class="ajax_form af_example form-horizontal">
                                                                                                                                                                                                                ...
                                                                                                                                                                                                              </form>
                                                                                                                                                                                                              
                                                                                                                                                                                                              ...
                                                                                                                                                                                                              <script>
                                                                                                                                                                                                              // описываете все формы, их id и темы
                                                                                                                                                                                                              var forms = [
                                                                                                                                                                                                                {
                                                                                                                                                                                                                  id : 'id-1',
                                                                                                                                                                                                                  subject: 'Тема 1'
                                                                                                                                                                                                                },
                                                                                                                                                                                                                {
                                                                                                                                                                                                                  id : 'id-2',
                                                                                                                                                                                                                  subject: 'Тема 2'
                                                                                                                                                                                                                }      
                                                                                                                                                                                                              ];
                                                                                                                                                                                                              // перебираем все формы
                                                                                                                                                                                                              $('form').each(function(){
                                                                                                                                                                                                                for (var i=0; i<= forms.length; i++) {
                                                                                                                                                                                                                  if (forms[i]['id'] == $(this).attr('id')) {
                                                                                                                                                                                                                    // добавляем тему
                                                                                                                                                                                                                    $(this).prepend('<input type="hidden" name="subject" value="'+forms[i]['subject']+'">');
                                                                                                                                                                                                                    // идентификатор формы
                                                                                                                                                                                                                    $(this).prepend('<input type="hidden" name="id" value="'+forms[i]['id']+'">');          
                                                                                                                                                                                                                    break;
                                                                                                                                                                                                                  }
                                                                                                                                                                                                                }
                                                                                                                                                                                                              });
                                                                                                                                                                                                              </script>
                                                                                                                                                                                                              
                                                                                                                                                                                                              После этого у форм появляются необходимые скрытые поля.

                                                                                                                                                                                                              Хук для отправки разных благодарственных писем будет очень похожий на указанный, хотя и не точно такой. На основании него вы можете разработать то, что вам необходимо. Если вам необходимо вместо чекбокса получить другое значение, то это делается так:
                                                                                                                                                                                                              $idForm = $hook->getValue('id');
                                                                                                                                                                                                              
                                                                                                                                                                                                              После этого вам нужно будет использовать данное значение для того, чтобы выбрать необходимый шаблон (чанк) благодарственного письма.
                                                                                                                                                                                                    2. Ник
                                                                                                                                                                                                      31 марта 2017, 09:51
                                                                                                                                                                                                      Александр, здравствуйте. У меня такая же проблема как и у некоторых здесь: не работают уведомления jGrowl. Проблема оказалась в нестыковке этого плагина с новыми версиями Jquery. Проверял на двух сайтах. У меня версия 3.1.1. При изменении версии, например, на 1.12.4 или 1.10.2 проблем никаких не возникает, все работает. К сожалению для корректной работы моего сайта, нужна последняя версия Jquery.
                                                                                                                                                                                                      Проблема поднималась здесь: modx.pro/help/10208/
                                                                                                                                                                                                      И здесь: modx.pro/help/10255/
                                                                                                                                                                                                      Но ничего не помогло. Редактировал jquery.jgrowl.min.js, подгружал вручную стили ajax — ничего.
                                                                                                                                                                                                      Вот ошибки в консоли:
                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                        01 апреля 2017, 12:19
                                                                                                                                                                                                        Обновить компонент AjaxForm до версии 1.1.8. В этой версии плагин jGrowl обновлён до 1.4.5 (который корректно работает с jQuery 3). Или обновить данный плагин (jQuery jGrowl) до этой версии вручную. Находится jquery.jgrowl.min.js в каталоге /assets/components/ajaxform/js/lib.
                                                                                                                                                                                                        Сслыка для скачивания: github.com/stanlemon/jGrowl
                                                                                                                                                                                                        1. Ник
                                                                                                                                                                                                          02 апреля 2017, 00:08
                                                                                                                                                                                                          Благодарю за совет, но увы… Попробовал сначала просто обновить файл jquery.jgrowl.min.js (раньше это тоже делал), потом снес старую версию AjaxForm, поставил последнюю 1.1.8, как было рекомендовано. Но картинка все та же: со старыми версиями jQuery работает, с новой — нет. Ошибки консоли те же. Есть еще варианты куда обратить внимание?
                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                            02 апреля 2017, 02:01
                                                                                                                                                                                                            Попробуйте очистить кэш в MODX и открыть страницу в режиме инкогнито. Скорее всего у вас используются закэшированные браузером версии файлов.
                                                                                                                                                                                                            Проверил, на тестовом сайте проблем нет. Версия AjaxForm 1.1.8 (jGrowl 1.4.5) со связкой с jQuery 3.2.0. Всё работает отлично.
                                                                                                                                                                                                            1. Ник
                                                                                                                                                                                                              02 апреля 2017, 01:00
                                                                                                                                                                                                              Проблема решилась. Добавил в head файл «jquery-migrate-1.4.1.min.js» и все заработало.
                                                                                                                                                                                                              Однако, странно, в чем все таки проблема?
                                                                                                                                                                                                                  <!-- jQuery -->
                                                                                                                                                                                                                  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
                                                                                                                                                                                                                  <script src="/assets/js/jquery-migrate-1.4.1.min.js"></script>
                                                                                                                                                                                                              
                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                02 апреля 2017, 02:03
                                                                                                                                                                                                                jquery-migrate содержит просто дополнительные функции 1 и 2 версии, которые в 3 версии jQuery были удалены.
                                                                                                                                                                                                                1. Ник
                                                                                                                                                                                                                  02 апреля 2017, 02:31
                                                                                                                                                                                                                  Александр, спасибо за помощь! Все заработало корректно, когда убрал сниппет Orphoman. Он у меня стоял в head.
                                                                                                                                                                                                        2. Антон
                                                                                                                                                                                                          30 марта 2017, 11:24
                                                                                                                                                                                                          Привет, отличный Вас блог. У меня возник вопрос по аякс форме, все сделал по уроку вашему, но при отправке сообщения ругается на адресс почты который вводится в форме, а в журнале ошибок пишет: core/components/formit/model/formit/fihooks.class.php: 570) [FormIt] An error occurred while trying to send the email. Пустое сообщение
                                                                                                                                                                                                          Как решить проблему?)
                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                            30 марта 2017, 16:40
                                                                                                                                                                                                            Привет, спасибо. Проверьте, указал ли ты в вызове сниппета AjaxForm (FormIt) параметр emailTpl:
                                                                                                                                                                                                            &emailTpl=`tpl.email`
                                                                                                                                                                                                            
                                                                                                                                                                                                            А также наличия чанка, указанного в параметре. Ну и содержимого в нём.
                                                                                                                                                                                                          2. Kira
                                                                                                                                                                                                            22 марта 2017, 16:57
                                                                                                                                                                                                            Здравствуйте!
                                                                                                                                                                                                            В комментариях уже рассматривался вопрос отправки формы на разные почтовые адреса в зависимости от одного из выбранных параметров (на примере radio кнопок). Описанный в ответе подход понятен, но можно ли это как-то реализовать без прописывания почты напрямую в javascript, где-то в более глубокой обработке?
                                                                                                                                                                                                            Спасибо
                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                              24 марта 2017, 15:55
                                                                                                                                                                                                              Здравствуйте! В этом случае их можно просто указать через запятую прямо в параметрах сниппета. Как это сделать можете посмотреть в этом комментарии: itchief.ru/lessons/modx-revo/modx-contact-form#comment-3122
                                                                                                                                                                                                              1. Kira
                                                                                                                                                                                                                27 марта 2017, 16:24
                                                                                                                                                                                                                И еще вопрос:
                                                                                                                                                                                                                для параметра &emailTo получается подставить значения из поля ввода, но если так же сделать для &emailFrom — то письмо не приходит
                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                  27 марта 2017, 17:32
                                                                                                                                                                                                                  В &emailFrom указывается адрес от имени которого будет отправляться письмо. Если указать какой-то любой адрес (не соответствующий адресу домена сайта), то хостер вам просто это не позволит сделать (его не пропустит фильтр).
                                                                                                                                                                                                                2. Kira
                                                                                                                                                                                                                  27 марта 2017, 10:57
                                                                                                                                                                                                                  Да, перечисление почтовых адресов я знаю. Но нужно не отправить сразу на несколько, а отправить на тот или иной адрес в зависимости от выбранного значения из списка select.
                                                                                                                                                                                                              2. Михаил
                                                                                                                                                                                                                28 февраля 2017, 23:43
                                                                                                                                                                                                                Здравствуйте. Спасибо за блог. Очень помогает. Скажите, а как сделать проверку поля с телефоном? Цифры, пробелы, +-, ( ) или исключить буквы?
                                                                                                                                                                                                                Нашел только: regexp= но как правильно задать условие?
                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                  07 марта 2017, 16:59
                                                                                                                                                                                                                  Здравствуйте, наиболее просто это осуществить посредством создания пользовательского валидатора.
                                                                                                                                                                                                                  Создать сниппет isPhone:
                                                                                                                                                                                                                  <?php
                                                                                                                                                                                                                  //получить номер телефона (цифры) из строки
                                                                                                                                                                                                                  $phone = preg_replace('/\D/', '', $value);
                                                                                                                                                                                                                  // проверка номера телефона регулярному выражению
                                                                                                                                                                                                                  if (!preg_match('/^(8|7)(\d{10})$/', $phone)) {
                                                                                                                                                                                                                    $validator->addError($key,'Не корректный номер телефона!');
                                                                                                                                                                                                                    return false;
                                                                                                                                                                                                                  }
                                                                                                                                                                                                                  return false;
                                                                                                                                                                                                                  ?>
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  В вызов сниппета AjaxForm или FormIt добавить параметры:
                                                                                                                                                                                                                  [[!AjaxForm?
                                                                                                                                                                                                                    ...
                                                                                                                                                                                                                    &customValidators=`isPhone`
                                                                                                                                                                                                                    &validate=`phone:isPhone`
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  Блок для вставки телефона в HTML форму:
                                                                                                                                                                                                                  <div class="form-group">
                                                                                                                                                                                                                    <label class="control-label" for="af_phone">Телефон:</label>
                                                                                                                                                                                                                    <div class="controls">
                                                                                                                                                                                                                      <input type="text" id="af_phone" name="phone" value="[[+fi.phone]]" placeholder="" class="form-control"/>
                                                                                                                                                                                                                      <span class="error_phone">[[+fi.error.phone]]</span>
                                                                                                                                                                                                                    </div>
                                                                                                                                                                                                                  </div>
                                                                                                                                                                                                                  
                                                                                                                                                                                                                2. Sergey
                                                                                                                                                                                                                  28 февраля 2017, 15:57
                                                                                                                                                                                                                  Здравствуйте. Подскажите пожалуйста, как сделать, чтобы в сообщение которое приходит на почту, было указано название страницы?
                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                    07 марта 2017, 15:42
                                                                                                                                                                                                                    Добавить в HTML форму скрытое поле:
                                                                                                                                                                                                                    <input type="hidden" name="url" value="">
                                                                                                                                                                                                                    
                                                                                                                                                                                                                    Добавить на страницу скрипт, который будет задавать значение вышеуказанного поля:
                                                                                                                                                                                                                    <script>
                                                                                                                                                                                                                    $(function(){
                                                                                                                                                                                                                        $('[name="url"]').val(window.location);
                                                                                                                                                                                                                    });
                                                                                                                                                                                                                    </script>
                                                                                                                                                                                                                    В чанке, используемом для формирования тела письма вставить строчку:
                                                                                                                                                                                                                    <p>Адрес страницы: [[+url]]</p>
                                                                                                                                                                                                                    
                                                                                                                                                                                                                  2. Демьян Золин
                                                                                                                                                                                                                    04 января 2017, 18:48
                                                                                                                                                                                                                    Здравствуйте.
                                                                                                                                                                                                                    На kprf-omsk.ru/priyomnaya форма обратной связи с аяксом работает.
                                                                                                                                                                                                                    На astrotsentr.su просто [[!FormIt?… ]] отправляет, а [[!AjaxForm?… ]] нет. Сообщения об ошибке валидации есть, сообщение об отправке есть. А сообщения ни в почте, ни в панеле управления нет.
                                                                                                                                                                                                                    Первый сайт в корне.
                                                                                                                                                                                                                    На втором сайте тема themePure.
                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                      06 января 2017, 07:06
                                                                                                                                                                                                                      Здравствуйте. Для работы AjaxForm необходимо наличие подключённой библиотеки jQuery. Всё работу по отправке формы на сервер выполняет скрипт default.js, который расположен по умолчанию в /assets/components/ajaxform/js. Проверьте, возникают ли у вас ошибки при работе с данным скриптом.
                                                                                                                                                                                                                      Если FormIt отправляет, то и AjaxForm должен работать. Т.к. по умолчанию он просто является AJAX обёрткой данного сниппета.
                                                                                                                                                                                                                    2. Зора
                                                                                                                                                                                                                      28 декабря 2016, 07:56
                                                                                                                                                                                                                      Добрый день, Александр. Спасибо за статью.

                                                                                                                                                                                                                      Совершенно уперлась в стену с AjaxForm. Пока не заменила jquery growl на отдельно скачанные — не запускалось вообще. После форма постоянно ругается только на валидацию поля email. При любом значении. Если из вызова убрать hooks: email, то не ругается вообще ни на что, даже на пустую форму, показывает зеленое окошко и отправляет якобы форму, но письмо не приходит.
                                                                                                                                                                                                                      Quickmail успешно все отправляет, так что почта работает. Переустанавливала все не раз.
                                                                                                                                                                                                                      Подскажите, что это все за чертовщина.
                                                                                                                                                                                                                      Так выглядит вызов:

                                                                                                                                                                                                                      [[!AjaxForm? 
                                                                                                                                                                                                                            &form=`FORM` 
                                                                                                                                                                                                                            &snippet=`FormIt` 
                                                                                                                                                                                                                            &hooks=`FormItSaveForm, email`
                                                                                                                                                                                                                            &emailSubject=`Тестовое сообщение`
                                                                                                                                                                                                                            $emailTo=`req@multidelo.ru`
                                                                                                                                                                                                                            &emailFrom=`req@multidelo.ru`
                                                                                                                                                                                                                            &emailTpl=`tpl.email`
                                                                                                                                                                                                                            &validate=`name:required`
                                                                                                                                                                                                                            &validationErrorMessage=`В форме содержатся ошибки!`
                                                                                                                                                                                                                            &successMessage=`Сообщение успешно отправлено`
                                                                                                                                                                                                                          ]]
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      В журнале Formit постоянно выдается строка
                                                                                                                                                                                                                      [FormIt] Please specify a recipient or recipients for the email.
                                                                                                                                                                                                                      1. Зора
                                                                                                                                                                                                                        28 декабря 2016, 11:31
                                                                                                                                                                                                                        опечатка $emailTo=`req@multidelo.ru`
                                                                                                                                                                                                                        смена на &emailTo=`req@multidelo.ru`не меняет ничего, он все равно ругается на поле емайл
                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                          28 декабря 2016, 13:42
                                                                                                                                                                                                                          Здравствуйте. Попробуйте проверить, имеется ли у вас чанк tpl.email и подключена ли библиотека jQuery. После исправления опечатки, какая у вас сейчас выводится ошибка? А также есть ли у вас запись в диалоговом окне FormIt (Приложение -> FormIt)?
                                                                                                                                                                                                                          1. Зора
                                                                                                                                                                                                                            28 декабря 2016, 13:49
                                                                                                                                                                                                                            Чанк имеется. Библиотека тоже подключается. Формит записывает все данные к себе, даже если валидация красная.
                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                              28 декабря 2016, 14:21
                                                                                                                                                                                                                              Попробуйте сначала настроить форму только с помощью FormIt, т.е. без AjaxForm.
                                                                                                                                                                                                                              1. Зора
                                                                                                                                                                                                                                28 декабря 2016, 15:01
                                                                                                                                                                                                                                Без аякса формит стал отправлять, если убрать validate из вызова. Однако, если заполнить поле email не происходит редикректа на спасибо-страницу и, следовательно, отправки письма. Если оставить его пустым, то письмо приходит и форма отправляется.
                                                                                                                                                                                                                      2. Елена
                                                                                                                                                                                                                        18 декабря 2016, 09:40
                                                                                                                                                                                                                        Добрый день!
                                                                                                                                                                                                                        Спасибо большое за Ваши уроки!
                                                                                                                                                                                                                        Подскажите, пожалуйста, каким образом в данной форме можно реализовать отправку благодарственного письма отправителю?
                                                                                                                                                                                                                        Например, пользователь заполняет форму.
                                                                                                                                                                                                                        Снизу формы есть галочка «Отправить копию письма мне» и поле для ввода адреса эл. почты.
                                                                                                                                                                                                                        После нажатия «Отправить» он получает письмо с отправленными данными и плюс дополнительный текст «Спасибо, что отправили заявку… „
                                                                                                                                                                                                                        Заранее благодарю!
                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                          19 декабря 2016, 14:42
                                                                                                                                                                                                                          Здравствуйте, спасибо за ваш отзыв. Такой функционал можно реализовать, например, с помощью хука FormIt.
                                                                                                                                                                                                                          Для этого необходимо:
                                                                                                                                                                                                                          1. Добавить в форму необходимые поля:
                                                                                                                                                                                                                          <!-- Чекбокс (name = sendemailto) -->
                                                                                                                                                                                                                          <div class="checkbox" form="af_sendemailto">
                                                                                                                                                                                                                            <label>
                                                                                                                                                                                                                              <input type="checkbox" id="af_sendemailto" name="sendemailto"> Отправить копию письма мне
                                                                                                                                                                                                                            </label>
                                                                                                                                                                                                                          </div>
                                                                                                                                                                                                                          <!-- Поле для ввода адреса электронной почты (name = emailto) -->
                                                                                                                                                                                                                          <div class="form-group">
                                                                                                                                                                                                                            <label class="control-label" for="af_emailto">[[%af_label_email]]</label>
                                                                                                                                                                                                                            <div class="controls">
                                                                                                                                                                                                                              <input type="email" id="af_emailto" name="emailto" value="[[+fi.emailto]]" placeholder="" class="form-control"/>
                                                                                                                                                                                                                              <span class="error_email">[[+fi.error.emailto]]</span>
                                                                                                                                                                                                                            </div>
                                                                                                                                                                                                                          </div>
                                                                                                                                                                                                                          
                                                                                                                                                                                                                          2. Добавить скрипт js, который будет делать доступным адрес электронной почты только если чекбокс находится во включенном состоянии.
                                                                                                                                                                                                                          3. Создать хук (сниппет, например, с именем emailTo), которой будет проверять состояние чекбокса и отправлять письмо на указанный адрес.
                                                                                                                                                                                                                          <?php
                                                                                                                                                                                                                          // получаем значение чекбокса
                                                                                                                                                                                                                          $sendEmailTo = $hook->getValue('sendemailto');
                                                                                                                                                                                                                          // если он установлен, то
                                                                                                                                                                                                                          if ($sendEmailTo) {
                                                                                                                                                                                                                            // Активируем почтовый сервис MODX
                                                                                                                                                                                                                            $modx->getService('mail', 'mail.modPHPMailer');
                                                                                                                                                                                                                            $modx->mail->set(modMail::MAIL_FROM, 'no-reply@mysite.com');
                                                                                                                                                                                                                            $modx->mail->set(modMail::MAIL_FROM_NAME, 'Имя сайта');
                                                                                                                                                                                                                            // Получаем с формы адрес электронной почты
                                                                                                                                                                                                                            $emailTo = $hook->getValue('emailto');
                                                                                                                                                                                                                            // Указываем кому отправить письмо
                                                                                                                                                                                                                            $modx->mail->address('to', $emailTo);
                                                                                                                                                                                                                            // Заголовок сообщения
                                                                                                                                                                                                                            $modx->mail->set(modMail::MAIL_SUBJECT, 'Форма обратной связи');
                                                                                                                                                                                                                            // Получаем чанк, содержащий необходимый текст письма и передаём ему параметры
                                                                                                                                                                                                                            $modx->mail->set(modMail::MAIL_BODY, $modx->getChunk('tpl.email2',
                                                                                                                                                                                                                              array(
                                                                                                                                                                                                                                'name' => $hook->getValue('name'),
                                                                                                                                                                                                                                'email' => $hook->getValue('email'),
                                                                                                                                                                                                                                'message' => $hook->getValue('message')
                                                                                                                                                                                                                              )
                                                                                                                                                                                                                            ));
                                                                                                                                                                                                                            // отправляем письмо
                                                                                                                                                                                                                            $modx->mail->setHTML(true);
                                                                                                                                                                                                                            if (!$modx->mail->send()) {
                                                                                                                                                                                                                              $modx->log(modX::LOG_LEVEL_ERROR,'Произошла ошибка при отправке письма: '.$modx->mail->mailer->ErrorInfo);
                                                                                                                                                                                                                            }
                                                                                                                                                                                                                            $modx->mail->reset();
                                                                                                                                                                                                                          }
                                                                                                                                                                                                                          return true;
                                                                                                                                                                                                                          
                                                                                                                                                                                                                          4. Создать шаблон письма (чанк с именем tpl.email2):
                                                                                                                                                                                                                          Спасибо, что отправили заявку…
                                                                                                                                                                                                                          <h3>Сообщение</h3>
                                                                                                                                                                                                                          <p>От кого: [[+name]]</p>
                                                                                                                                                                                                                          <p>E-mail: [[+email]]</p>
                                                                                                                                                                                                                          <p>Телефон: [[+phone]]</p>
                                                                                                                                                                                                                          <p>Сообщение: [[+message]]</p>
                                                                                                                                                                                                                          
                                                                                                                                                                                                                          5. Добавить в вызов сниппета AjaxForm (FormIt) только что созданный хук:
                                                                                                                                                                                                                          &hooks=`email,emailTo`
                                                                                                                                                                                                                          
                                                                                                                                                                                                                          6. Также можно добавить валидацию (проверку) поля с адресом электронной почты.
                                                                                                                                                                                                                          1. Елена
                                                                                                                                                                                                                            19 декабря 2016, 14:47
                                                                                                                                                                                                                            Спасибо! Попробую реализовать!
                                                                                                                                                                                                                        2. Василий
                                                                                                                                                                                                                          08 ноября 2016, 12:21
                                                                                                                                                                                                                          Доброго дня, Шеф!
                                                                                                                                                                                                                          Вопрос не по теме немного.
                                                                                                                                                                                                                          Можно ли в modx по получении email запускать какой-то сниппет, своего рода обработчик почты?
                                                                                                                                                                                                                          Если можно, то как это реализовать? Я не представляю
                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                            08 ноября 2016, 13:13
                                                                                                                                                                                                                            Здравствуйте. Необходимо написать свой хук и указать его в качестве параметра сниппета FormIt hooks.
                                                                                                                                                                                                                            1. Василий
                                                                                                                                                                                                                              10 ноября 2016, 09:12
                                                                                                                                                                                                                              Не встречались готовые решения? Откровенно говоря, программист из меня никакой((
                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                12 ноября 2016, 07:04
                                                                                                                                                                                                                                Это зависит от того, что вы хотите сделать. Может быть, есть и готовые примеры…
                                                                                                                                                                                                                                Общий принцип такой:
                                                                                                                                                                                                                                1. Создаёте новый сниппет.
                                                                                                                                                                                                                                2. Для получения email используйте в нём следующую строчку:
                                                                                                                                                                                                                                $email = $hook->getValue('email');
                                                                                                                                                                                                                                
                                                                                                                                                                                                                                3. Далее пишите код, клоторый будет выполнять необходимые действия.
                                                                                                                                                                                                                                4. Подключаете сниппет к вызову сниппета FormIt как хук (hook):
                                                                                                                                                                                                                                [[!FormIt?
                                                                                                                                                                                                                                  &hooks=`myhook,email`
                                                                                                                                                                                                                                  ...
                                                                                                                                                                                                                                
                                                                                                                                                                                                                          2. qurusan
                                                                                                                                                                                                                            11 октября 2016, 10:06
                                                                                                                                                                                                                            Вопрос посложнее. Как подключить несколько форм на странице через аяксформ, при этом в каждой форме находится reCaptcha от гугл? Существует ли такой способ вообще?
                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                              11 октября 2016, 11:26
                                                                                                                                                                                                                              Да, Google reCaptcha позволяет это сделать. Но, не знаю поддерживают ли какие-то компоненты MODX (например, ReCaptchaV2) это. Надо, проверить…

                                                                                                                                                                                                                              Если нет, то это придётся реализовать самостоятельно. Сам принцип как это сделать можно посмотреть здесь: itchief.ru/lessons/php/how-to-install-recaptcha-on-website#comment-2852
                                                                                                                                                                                                                            2. kalisto
                                                                                                                                                                                                                              27 сентября 2016, 08:28
                                                                                                                                                                                                                              Александр! Каким образом включить задержку всплывающего сообщения или вообще включить возможность закрытия попапа самому поль-лю?
                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                27 сентября 2016, 09:24
                                                                                                                                                                                                                                Для отображение сообщений дополнение ajaxForm использует jQuery плагин jGrowl.
                                                                                                                                                                                                                                В этом дополнение настройка сообщения осуществляется в файле default.js, который находится в директории /assets/components/ajaxform/js.
                                                                                                                                                                                                                                Для этого необходимо открыть его и внести необходимые изменения:
                                                                                                                                                                                                                                //...
                                                                                                                                                                                                                                //noinspection JSUnusedGlobalSymbols
                                                                                                                                                                                                                                AjaxForm.Message = {
                                                                                                                                                                                                                                    success: function (message, sticky) {
                                                                                                                                                                                                                                        if (message) {
                                                                                                                                                                                                                                            if (!sticky) {
                                                                                                                                                                                                                                                sticky = false;
                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                            $.jGrowl(message, {theme: 'af-message-success', sticky: sticky});
                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                    },
                                                                                                                                                                                                                                    error: function (message, sticky) {
                                                                                                                                                                                                                                        if (message) {
                                                                                                                                                                                                                                            if (!sticky) {
                                                                                                                                                                                                                                                sticky = false;
                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                            $.jGrowl(message, {theme: 'af-message-error', sticky: sticky});
                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                    },
                                                                                                                                                                                                                                    info: function (message, sticky) {
                                                                                                                                                                                                                                        if (message) {
                                                                                                                                                                                                                                            if (!sticky) {
                                                                                                                                                                                                                                                sticky = false;
                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                            $.jGrowl(message, {theme: 'af-message-info', sticky: sticky});
                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                    },
                                                                                                                                                                                                                                //...
                                                                                                                                                                                                                                
                                                                                                                                                                                                                                Устаноить время задержки осуществляется с помощью параметра life.
                                                                                                                                                                                                                                Например, для сообщения успеха (success) установим задержку 10сек (10000):
                                                                                                                                                                                                                                //...
                                                                                                                                                                                                                                    success: function (message, sticky) {
                                                                                                                                                                                                                                        if (message) {
                                                                                                                                                                                                                                            if (!sticky) {
                                                                                                                                                                                                                                                sticky = false;
                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                            $.jGrowl(message, {theme: 'af-message-success', sticky: sticky, life: 10000});
                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                //...
                                                                                                                                                                                                                                
                                                                                                                                                                                                                                Для того чтобы пользователь сам мог бы закрывать сообщение, параметру sticky необходимо установить значение true.
                                                                                                                                                                                                                                Например, для успешного сообщения:
                                                                                                                                                                                                                                //...
                                                                                                                                                                                                                                    success: function (message, sticky) {
                                                                                                                                                                                                                                        if (message) {
                                                                                                                                                                                                                                            if (!sticky) {
                                                                                                                                                                                                                                                sticky = false;
                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                            $.jGrowl(message, {theme: 'af-message-success', sticky: true});
                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                //...
                                                                                                                                                                                                                                
                                                                                                                                                                                                                                1. kalisto
                                                                                                                                                                                                                                  27 сентября 2016, 12:02
                                                                                                                                                                                                                                  Спасибо Вам большое!!!
                                                                                                                                                                                                                              2. Natalia
                                                                                                                                                                                                                                26 сентября 2016, 20:45
                                                                                                                                                                                                                                Добрый день,

                                                                                                                                                                                                                                у меня сайт на openserver. Сделала форму по Вашим инструкциям и при заполнении и отправке заполненной формы не выходит сообщение что сообщение успешно отправлено/не отправлено и соответственно письма на ящик не приходят. В админке modx отправленные сообщения есть. В openserver настройку на отправку писем с ящика сделала и все равно без толку. Пожалуйста, можете подсказать в каком направлении искать решение проблемы, Спасибо
                                                                                                                                                                                                                                1. kalisto
                                                                                                                                                                                                                                  27 сентября 2016, 08:26
                                                                                                                                                                                                                                  Письма в openserver смотрите в папке ваш_диск:\OpenServer\userdata\temp\email — они туда складываются в виде *.txt файла
                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                    27 сентября 2016, 00:39
                                                                                                                                                                                                                                    Здравствуйте. Насчёт openserver не подскажу, т.к. с ним не знаком. Но подобный локальный веб-сервер, например, denwer (денвер), их не отправляет, а использует заглушку (т.е. складывает их в директорию sendmail в виде файлов). Скорее тоже самое делает и openserver. Если Вы хотите по-настоящему отправлять почту, то необходимо использовать реальный веб-сервер.
                                                                                                                                                                                                                                    1. Natalia
                                                                                                                                                                                                                                      27 сентября 2016, 10:43
                                                                                                                                                                                                                                      Александр, спасибо за ответ, а в денвере при отправке формы появляется окно об успешной отправке? Дело в том, что я настроила в openserver отправку писем через smtp и по идее письма должны отправляться. Вот я и пытаюсь понять, то ли у меня ошибка в форме, то ли не получается настроить сервер на отправку почты
                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                        27 сентября 2016, 13:22
                                                                                                                                                                                                                                        В Denwer появляются сообщение об успешной отправке, но письма отправляются в файл. Т.е. они складываются в директорию !sendmail, которая находится в каталоге tmp. В Denwer нет Mail Server, поэтому они физически не могут быть отправлены на реальную почту. В openserver тоже наверно нет Mail Server. Чтобы это осуществить необходимо либо установить сервер, либо использовать удалённый сервер. Посмотрите может в настройках openserver есть возможность выбрать использование удалённого SMTP сервера. Если есть, то сделайте необходимые настройки и перезапустите openserver.
                                                                                                                                                                                                                                        Чтобы не мучить FormIt сначала попробуйте использовать дополнение для MODX Revolution QuickEmail. Он предназначен для проверки отправки сообщений на почту. Как только настроите почту, перейдёте к FormIt.
                                                                                                                                                                                                                                  2. Kirill
                                                                                                                                                                                                                                    01 сентября 2016, 19:36
                                                                                                                                                                                                                                    Александр добрый день! Подскажите пожалуйста, бьюсь 3-ий день как сделать, чтобы письмо с формы отправлялось разным получателям. Например у меня есть radio
                                                                                                                                                                                                                                    Черный белый и красный
                                                                                                                                                                                                                                    При выборе разного цвета уходит на разные почты
                                                                                                                                                                                                                                    И также чтобы в почте в пиьме цвета остались
                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                      03 сентября 2016, 09:42
                                                                                                                                                                                                                                      Необходимо сделать следующее:
                                                                                                                                                                                                                                      1. В чанке tpl.AjaxForm добавить поле (адрес для отправки) и радиопереключатели (цвета и адреса для отправки в виде data-атрибутов):
                                                                                                                                                                                                                                      <input type="text" id="af_addressTo" name="addressTo" hidden>
                                                                                                                                                                                                                                      <div class="radio">
                                                                                                                                                                                                                                        <label>
                                                                                                                                                                                                                                          <input type="radio" name="color[]" value="black" data-address-to="black@mail.ru" checked [[!+fi.color:FormItIsChecked=`blue`]]>
                                                                                                                                                                                                                                          Чёрный
                                                                                                                                                                                                                                        </label>
                                                                                                                                                                                                                                      </div>
                                                                                                                                                                                                                                      <div class="radio">
                                                                                                                                                                                                                                        <label>
                                                                                                                                                                                                                                          <input type="radio" name="color[]" value="white" data-address-to="white@mail.ru" [[!+fi.color:FormItIsChecked=`blue`]]>
                                                                                                                                                                                                                                          Белый
                                                                                                                                                                                                                                        </label>
                                                                                                                                                                                                                                      </div>
                                                                                                                                                                                                                                      <div class="radio">
                                                                                                                                                                                                                                        <label>
                                                                                                                                                                                                                                          <input type="radio" name="color[]" value="red" data-address-to="red@mail.ru" [[!+fi.color:FormItIsChecked=`blue`]]>
                                                                                                                                                                                                                                          Красный
                                                                                                                                                                                                                                        </label>
                                                                                                                                                                                                                                      </div>
                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                      2. В чанк tpl.AjaxForm добавить ещё скрипт, который будет в поле addressTo подставлять значение из радиокнопок:
                                                                                                                                                                                                                                      <script>
                                                                                                                                                                                                                                      jQuery(function(){
                                                                                                                                                                                                                                        $('#af_addressTo').val($('input[name="color[]"]:checked').attr('data-address-to'));
                                                                                                                                                                                                                                        $('input[name="color[]"]').change(function(){
                                                                                                                                                                                                                                          $('#af_addressTo').val($('input[name="color[]"]:checked').attr('data-address-to'));
                                                                                                                                                                                                                                          console.log($('#af_addressTo').val());
                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                      });
                                                                                                                                                                                                                                      </script>
                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                      3. В качестве значения параметра emailTo установить имя поля, содержащего адрес для отправки:
                                                                                                                                                                                                                                      [[!AjaxForm? 
                                                                                                                                                                                                                                        &form=`tpl.AjaxForm` 
                                                                                                                                                                                                                                        &snippet=`FormIt` 
                                                                                                                                                                                                                                        &hooks=`FormItSaveForm,email`
                                                                                                                                                                                                                                        &emailSubject=`Тестовое сообщение`
                                                                                                                                                                                                                                        &emailTo=`[[+addressTo]]`
                                                                                                                                                                                                                                        &emailFrom=`no-reply@mysite.com`
                                                                                                                                                                                                                                        emailFromName=`Мой сайт`
                                                                                                                                                                                                                                        &emailTpl=`tpl.email`
                                                                                                                                                                                                                                        &validate=`name:minLength=^2^,email:email:required,message:minLength=^10^`
                                                                                                                                                                                                                                        &validationErrorMessage=`В форме содержатся ошибки!`
                                                                                                                                                                                                                                        &successMessage=`Сообщение успешно отправлено`
                                                                                                                                                                                                                                      ]]
                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                      4. В чанк email.tpl (шаблон письма) добавить строчку:
                                                                                                                                                                                                                                      <p>Цвет: [[+color]]</p>
                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                    2. Growing
                                                                                                                                                                                                                                      21 августа 2016, 12:23
                                                                                                                                                                                                                                      Доброго времени суток, Александр!
                                                                                                                                                                                                                                      Спасибо за урок, очень доступно.
                                                                                                                                                                                                                                      Подскажите пожалуйста, если форма построена на связке ajax+formIt, как можно передать значение селектбокса из одной формы в другую? Т.е. необходимо сделать так, чтобы выбранный в одной форме после отправки первой формы стал активным во второй?
                                                                                                                                                                                                                                      В сообществе обсуждения подобных решений не нашёл…
                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                        23 августа 2016, 14:33
                                                                                                                                                                                                                                        При отправке формы сохраняйте значение в переменную и если ответ пришёл успешный, то проводите операции во второй форме (делайте элемент активным и устанавливайте ему значение из переменной):
                                                                                                                                                                                                                                        // переменная, которая будет использоваться для хранения значения селектбокса
                                                                                                                                                                                                                                        var valueFromForm1;
                                                                                                                                                                                                                                        // при отправке формы
                                                                                                                                                                                                                                        $(document).on('submit', '.ajax_form1', function() {
                                                                                                                                                                                                                                          // сохраняем значение селектбокса
                                                                                                                                                                                                                                          valueFromForm1 = $('#myselect').val();
                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                        // при получении ответа от сервера
                                                                                                                                                                                                                                        $(document).on('af_complete', function(event, response) {
                                                                                                                                                                                                                                          if (response.success==true && valueFromForm1) {
                                                                                                                                                                                                                                            //... здесь прописывайте ваши действия для второй формы
                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                        </script>
                                                                                                                                                                                                                                        1. Growing
                                                                                                                                                                                                                                          23 августа 2016, 15:10
                                                                                                                                                                                                                                          Принцип дошёл, как всегда всё доступно)
                                                                                                                                                                                                                                          Спасибо, Шеф.
                                                                                                                                                                                                                                      2. Игорь
                                                                                                                                                                                                                                        16 августа 2016, 22:40
                                                                                                                                                                                                                                        Здравствуйте.
                                                                                                                                                                                                                                        Может Вы сможете мне помочь? голову сломал уже.
                                                                                                                                                                                                                                        Поставил обратную связь с помощью ajaxForm письма отправляются, но при этом перезагружается страница и не появляются оповещения об успешном отправлении. Неудобно тем что форма внизу сайта, а после перезагрузки возвращается вверх.
                                                                                                                                                                                                                                        в консоли ошибка default.js:11 Uncaught TypeError: $ is not a function
                                                                                                                                                                                                                                        1. Евгений
                                                                                                                                                                                                                                          16 августа 2016, 23:00
                                                                                                                                                                                                                                          Эта ошибка означает, что вы вызываете jquery до того, как его подключили. Проверьте очерёдность подключения скриптов. Что бы страница не обновлялась нужно сделать следущее: повесим на форму id=«send_form», предотвратить обновление можно например так
                                                                                                                                                                                                                                          $(function(){
                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                          $('#send_form').on('submit', function(e){
                                                                                                                                                                                                                                          	e.preventDefault();
                                                                                                                                                                                                                                          	тут ваш код - обработчик
                                                                                                                                                                                                                                          });	
                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                          });
                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                        2. Игорь Денисов
                                                                                                                                                                                                                                          15 августа 2016, 16:01
                                                                                                                                                                                                                                          Здравствуйте Александр!
                                                                                                                                                                                                                                          Что-то я прям все никак не могу подружиться с формой обратной связи!)
                                                                                                                                                                                                                                          Теперь у меня почему-то перестала работать форма
                                                                                                                                                                                                                                          В логе пишет вот что:
                                                                                                                                                                                                                                          (ERROR @ .../core/components/formit/model/formit/fihooks.class.php : 552) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                                                                                                                                                                                                          На поддержке у хостинга создал тикет, объяснил им что так-то так-то, ошибку из лога и все такое им написал. Они мне отправили библиотеку PHPMailer и установки которые нужно прописать в feedback.php который лежит по адресу вместе со всеми остальными его файлами /core/model/modx/mail/phpmailer/
                                                                                                                                                                                                                                          Вроде бы сделал все как сказали, но увы не помогло, может я что не так делаю…
                                                                                                                                                                                                                                          Может быть Вы мне сможете помочь, уже второй день бьюсь над этой проблемой!
                                                                                                                                                                                                                                          Заранее спасибо!
                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                            17 августа 2016, 13:11
                                                                                                                                                                                                                                            Это ошибка означает, что у Вас на хостинге не поддерживается функция mail. Библиотека PHPMailer работает на основе функции mail.
                                                                                                                                                                                                                                          2. Игорь Денисов
                                                                                                                                                                                                                                            31 июля 2016, 11:49
                                                                                                                                                                                                                                            Здравствуйте Александр!
                                                                                                                                                                                                                                            Наверное, Вы лишний раз здесь вставили email:
                                                                                                                                                                                                                                            [[!AjaxForm?
                                                                                                                                                                                                                                                &validate=`name:minLength=^2^,email:email:required,message:minLength=^10^`
                                                                                                                                                                                                                                            ]]
                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                            Или я что-то путаю?)
                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                              31 июля 2016, 12:41
                                                                                                                                                                                                                                              Здравствуйте, Игорь.
                                                                                                                                                                                                                                              Первый email — это имя поля. Второй — это валидатор, который проверяет имеет ли это поле валидный email адрес. Третии параметр (required) — указывает, что это поле является обязательным, т.е. не может содержать пустое значение.
                                                                                                                                                                                                                                              1. Игорь Денисов
                                                                                                                                                                                                                                                01 августа 2016, 07:43
                                                                                                                                                                                                                                                Извиняюсь… думал опечатка ))
                                                                                                                                                                                                                                                Спасибо Вам, сейчас у себя тоже поправлю!
                                                                                                                                                                                                                                            2. Виталий
                                                                                                                                                                                                                                              28 июля 2016, 11:56
                                                                                                                                                                                                                                              Здравствуйте, Александр.

                                                                                                                                                                                                                                              Обращаюсь за помощью к Вам, т.к. в нете ничего не нашел или никому это не нужно?

                                                                                                                                                                                                                                              У меня простая форма без Ajax с редиректом.
                                                                                                                                                                                                                                              При наличии ошибок в заполненной форме появляются соответствующие подсказки «Это поле обязательно для заполнения.» и т.п., но при этом страница прокручивается к самому верху, а если страница длинная и форма в самом низу, то посетитель может просто подумать, что все отправилось и пойти дальше.
                                                                                                                                                                                                                                              Как сделать, чтобы форма при наличии ошибок оставалась на месте?

                                                                                                                                                                                                                                              И параллельно второй вопрос. Форма находится в модальном окне Bootstrap 3. При наличии ошибок в форме модальное окно закрывается и узнать о наличии ошибок можно только повторно нажав на кнопку вызова модального окна.
                                                                                                                                                                                                                                              Соответственно вопрос — как сделать, чтобы при наличии ошибок в форме окно не закрывалось до из исправления.

                                                                                                                                                                                                                                              Спасибо!
                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                28 июля 2016, 13:53
                                                                                                                                                                                                                                                Это делается очень просто. Только Вы не можете оставить её на месте, необходимо прокрутить до неё. Для этого необходимо нужному элементу создать идентификатор (id) и указать его в параметре action через #:
                                                                                                                                                                                                                                                <form id="formit" action="[[~[[*id]]]]#formit" method="post" class="form">
                                                                                                                                                                                                                                                ...
                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                Для решения второго вопроса лучше использовать AJAX. Без него только перезагрузка. Единственное что можно сделать — это прокрутить до нужного места на странице и открыть модальное окно с помощью JavaScript. Но данное решение будет выглядеть для посетителя как-то странно, поэтому его лучше не использовать.
                                                                                                                                                                                                                                                1. Виталий
                                                                                                                                                                                                                                                  28 июля 2016, 14:21
                                                                                                                                                                                                                                                  Александр, огромное спасибо за оперативный ответ. Со статичной формой все получилось, сейчас модальной займусь.
                                                                                                                                                                                                                                                  Отдельное огромное спасибо за сайт вообще. Сейчас активно осваиваю Bootstrap3 и где-то 70-80% информации беру именно с Вашего сайта.
                                                                                                                                                                                                                                              2. Алексей
                                                                                                                                                                                                                                                24 июля 2016, 21:17
                                                                                                                                                                                                                                                Здравствуйте Александр.
                                                                                                                                                                                                                                                Вопрос не совсем по теме, но очень для меня актуальный.
                                                                                                                                                                                                                                                Подскажите, как вывести на сайте чекбокс, при активации которого должно передаваться значение в дополнительное TV (я уже создал TV с значениями: значение==up и значением по умолчаниюзначение==down) и менять его значение которое затем должно передаваться в шаблоны и чанки изменяя значения в TV. И соответственно, измененные значения TV должны повлечь изменение в выводимых на фронтэнд данных. И нужно, чтоб отправка данных в TV происходила сразу после активации чакбокса или селекта, без кнопки «отправить форму».
                                                                                                                                                                                                                                                Спасибо.
                                                                                                                                                                                                                                                1. Алексей
                                                                                                                                                                                                                                                  10 июля 2016, 09:40
                                                                                                                                                                                                                                                  Добрый день! Форму подключил, все работает. Только, возникла проблема со спамом. Подскажите как защитить форму от спам роботов. Капчу ставить не вариант. И еще вопрос по теме — спам также лезет в виде СМС, (номер телефона реализован через ссылку «tel»). Как защититься? Спасибо!
                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                    10 июля 2016, 12:03
                                                                                                                                                                                                                                                    Здраствуйте. Добавить любое невидимое поле. Например:
                                                                                                                                                                                                                                                    <input type="hidden" name="workemail" value="">
                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                    В FormIt добавить проверку, т.е. проверить что оно является пустое:
                                                                                                                                                                                                                                                    [[!FormIt? &validate=`workemail:blank`]]
                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                    Спам робот будет его заполнять, а в FormIt валидация такого поля не пройдёт.
                                                                                                                                                                                                                                                    Но некоторые спам роботы такое поле могут видетm. В этом случае его можно сделать обычным полем, а скрыть с помощью CSS:
                                                                                                                                                                                                                                                    <input type="text" id="workemail" name="workemail" value="">
                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                    #workemail {
                                                                                                                                                                                                                                                      display:none;
                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                    Можно ещё использовать хук spam:
                                                                                                                                                                                                                                                    [[!FormIt? &hooks=`spam` &spamCheckIp=`true`]]
                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                    Не совсем понял про номер телефона, но можно его указывать не в HTML. А сделать так, чтобы он показывался посредством JavaScript.
                                                                                                                                                                                                                                                    1. Алексей
                                                                                                                                                                                                                                                      10 июля 2016, 16:06
                                                                                                                                                                                                                                                      Спасибо. Дополнения внес буду надеяться, что защитит.
                                                                                                                                                                                                                                                      А телефон сделан так:
                                                                                                                                                                                                                                                      <a href="tel:+788888888"> ПОЗВОНИТЬ </a>
                                                                                                                                                                                                                                                      на мобильных устройствах при нажатии набирается номер. Вот, я думаю через эту ссылку и приходят СМС. Как закрыть ссылку от роботов не знаю. Подскажите решение.
                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                        13 июля 2016, 12:48
                                                                                                                                                                                                                                                        Попробуйте убрать номер телефона из HTML. Т.е. сделать как-то так:
                                                                                                                                                                                                                                                        <a id="tel" href="#"> ПОЗВОНИТЬ </a>
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        А при нажатии на ссылку, перехватывать это событие с помощью JavaScript (jQuery) и подставлять в неё необходимый номер телефона. Дополнительно номер телефона можно закодировать с помощью btoa:
                                                                                                                                                                                                                                                        $('#tel').click(function(){
                                                                                                                                                                                                                                                          $(this).attr('href',window.atob('dGVsOis3ODg4ODg4ODg='));
                                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        1. Алексей
                                                                                                                                                                                                                                                          13 июля 2016, 17:39
                                                                                                                                                                                                                                                          Большое спасибо за ответ. Буду пробовать
                                                                                                                                                                                                                                                  2. Владимир
                                                                                                                                                                                                                                                    16 июня 2016, 16:21
                                                                                                                                                                                                                                                    а в сниппетах formIt и AjaxForm ее нет? Тогда как ее подключить?
                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                      16 июня 2016, 23:43
                                                                                                                                                                                                                                                      Её подключать не надо. Вы ж не настраиваете серевер, а покупаете хостинг. Посмотрите поддерживает ли хостинг библиотеку phpMailer и функцию mail.
                                                                                                                                                                                                                                                      1. Владимир
                                                                                                                                                                                                                                                        17 июня 2016, 19:11
                                                                                                                                                                                                                                                        Спасибо! Причина нашлась. В техподдержке ответили, что с одного из сайтов аккаунта была обнаружена рассылка спама, поэтому отключили функцию. Надо проверить на вирусы и вредоносный код.
                                                                                                                                                                                                                                                    2. Владимир
                                                                                                                                                                                                                                                      13 июня 2016, 20:05
                                                                                                                                                                                                                                                      Версия MODX Revolution 2.5.0-pl
                                                                                                                                                                                                                                                      Пробовал несколько раз с разными формами отправки.
                                                                                                                                                                                                                                                      Делал на Openserver ошибки нет, но и писем тоже ))
                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                        14 июня 2016, 12:45
                                                                                                                                                                                                                                                        Надо проверять на сервере. На openserver может использоваться заглушка (например, на Denwer все отправленные письма сохраняются в виде файлов с расширением eml в каталог tmp/!sendmail/..).
                                                                                                                                                                                                                                                        Сначала лучше проверить работает ли вообще отправка почты. Для этого можно воспользоваться сниппетом QuickEmail.
                                                                                                                                                                                                                                                        1. Владимир
                                                                                                                                                                                                                                                          16 июня 2016, 13:40
                                                                                                                                                                                                                                                          Установил на сервере сниппет QuickEmail. Вызываю кодом:
                                                                                                                                                                                                                                                          [[!QuickEmail?
                                                                                                                                                                                                                                                          	&debug=`1`
                                                                                                                                                                                                                                                          	&to=`твойEmail`
                                                                                                                                                                                                                                                          ]]
                                                                                                                                                                                                                                                          На страничке пишет:
                                                                                                                                                                                                                                                          Send Failed
                                                                                                                                                                                                                                                          Mailer error info: Невозможно запустить функцию mail.
                                                                                                                                                                                                                                                          Я новичок в modx. Так думаю настройки почты не сделаны. Где их делать?
                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                            16 июня 2016, 14:00
                                                                                                                                                                                                                                                            Тут дело не в настройках. У Вас на сервере нет php-функции mail с помощью которой можно было бы отправлять почту.
                                                                                                                                                                                                                                                            1. Владимир
                                                                                                                                                                                                                                                              16 июня 2016, 18:12
                                                                                                                                                                                                                                                              Это надо в техподдержку хостинга обращаться?
                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                16 июня 2016, 23:36
                                                                                                                                                                                                                                                                Да.
                                                                                                                                                                                                                                                      2. Владимир
                                                                                                                                                                                                                                                        12 июня 2016, 19:36
                                                                                                                                                                                                                                                        Добрый день. Сделал форму отправки через AjaxForm все, как сказано. Выдает сообщение «форма содержит ошибку» и в поле email адрес подсвечивается красным. Указывал емейл рабочий свой. в форме emailTo указал емейл созданный на хостинге. В чем может быть проблема?
                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                          14 июня 2016, 12:50
                                                                                                                                                                                                                                                          В emailTo необходимо указывать адрес куда Вы хотите отправить. Для начало проверьте, вообще работает ли отправка почты с сайта на Вашем хостинге.
                                                                                                                                                                                                                                                          1. Владислав
                                                                                                                                                                                                                                                            06 октября 2016, 12:21
                                                                                                                                                                                                                                                            здравствуйте, уважаемый Александр!
                                                                                                                                                                                                                                                            Подскажите пожалуйста, что необходимо изменить в вызове формы, чтобы письмо переадресовывалось на несколько адресов? Спасибо.
                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                              06 октября 2016, 13:11
                                                                                                                                                                                                                                                              Это делается через запятую:
                                                                                                                                                                                                                                                              &emailTo=`mail1@email.com,mail2@email.com,mail3@email.com`
                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                              Если Вам необходим переслать копию письма, то через emailCC:
                                                                                                                                                                                                                                                              &emailCC=`email4@domain.com,email5@domain.com`
                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                              А также если необходимо отправить копии скрытым адресатам, адреса которых не показываются другим участникам отправки:
                                                                                                                                                                                                                                                              &emailBCC=`email6@domain.com,email7@domain.com`
                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                        2. Алексей
                                                                                                                                                                                                                                                          01 июня 2016, 07:06
                                                                                                                                                                                                                                                          Добрый день.
                                                                                                                                                                                                                                                          Делаю всё по вашему уроку, но у меня при правильном заполнении формы, при нажатии отправить поля и кнопки становятся не активными, и форма виснет, вверху справа никаких сообщений не выходит, только рядом с полями если не заполнено. В head страницы AjaxForm не прописывает assets/components/ajaxform/js/default.js прописывает только файл стилей, так и должно быть? пробывал в ручную указать default.js — не помогло. В чём может быть дело?
                                                                                                                                                                                                                                                          1. Александр
                                                                                                                                                                                                                                                            02 июня 2016, 13:29
                                                                                                                                                                                                                                                            Проверяйте что делали, потому что я 5 минут назад по этой инструкции сделал форму и всё работает.
                                                                                                                                                                                                                                                          2. Anton
                                                                                                                                                                                                                                                            12 мая 2016, 08:20
                                                                                                                                                                                                                                                            Здравствуйте, давно читаю ваш сайт, очень много полезной информации, спасибо за ваш труд) Такой вопрос подскажите как реализовать связанные списки при изпользовании Formit, например в первом списке выбираем город, а во втором списке выводится список районов этого города?! Использую просто вызов формит на странице без ajax. Спасибо.
                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                              12 мая 2016, 13:29
                                                                                                                                                                                                                                                              Здравствуйте.
                                                                                                                                                                                                                                                              Без ajax это можно сделать через отдельный файл js, который использовать для хранения необходимых данных в виде массива json. После этого на JavaScript необходимо написать скрипт, который будет при выборе города выбирать из этого массива необходимые данные и отображать их во втором списке.
                                                                                                                                                                                                                                                              Что-то наподобие этого: itchief.ru/lessons/bootstrap-3/bootstrap-3-modal-window#comment-827
                                                                                                                                                                                                                                                            2. Сергей
                                                                                                                                                                                                                                                              11 мая 2016, 11:49
                                                                                                                                                                                                                                                              И не подскажите как сделать как у вас систему комментирования… оч понарвилась)
                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                11 мая 2016, 12:19
                                                                                                                                                                                                                                                                С помощью сниппета TicketComments.
                                                                                                                                                                                                                                                                Как это сделать рассмотрено в этой статье:
                                                                                                                                                                                                                                                                MODX — Создание шаблона для постов.
                                                                                                                                                                                                                                                              2. Сергей
                                                                                                                                                                                                                                                                11 мая 2016, 11:49
                                                                                                                                                                                                                                                                А как прикрутить reCaptche от google?
                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                  11 мая 2016, 12:16
                                                                                                                                                                                                                                                                  Как это сделать расскажу в отдельной статье.
                                                                                                                                                                                                                                                                  1. Сергей
                                                                                                                                                                                                                                                                    11 мая 2016, 12:35
                                                                                                                                                                                                                                                                    Спасибо Вам, будем ждать!
                                                                                                                                                                                                                                                                2. Миха
                                                                                                                                                                                                                                                                  29 апреля 2016, 09:19
                                                                                                                                                                                                                                                                  Добрый день, подскажите пож-та как сделать переадресацию на страницу «Спасибо ...» вместо появления сообщения «форма отправлена успешно». Очень надо для настройки целей в Гугл Аналитике, т.к. я не понимаю как подвязать такой тип события в Гугл Аналитике как цель конверсии… :(

                                                                                                                                                                                                                                                                  Спасибо!
                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                    30 апреля 2016, 04:39
                                                                                                                                                                                                                                                                    Найдите на сервере файл assets/components/ajaxform/js/default.js.
                                                                                                                                                                                                                                                                    Добавьте строчку
                                                                                                                                                                                                                                                                    window.location = "http://mysite.ru/";
                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                    перед строчкой
                                                                                                                                                                                                                                                                    AjaxForm.Message.success(response.message);
                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                  2. Роман
                                                                                                                                                                                                                                                                    19 апреля 2016, 22:58
                                                                                                                                                                                                                                                                    Подскажите пожалуйста, как сделать так, чтобы все работало если при условии я убираю поле для ввода сообщения, оставляю только первые три.
                                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                                      30 апреля 2016, 11:41
                                                                                                                                                                                                                                                                      1. Убрать в форме соответствующий блок
                                                                                                                                                                                                                                                                      2. В вызове сниппета в параметре validate убрать проверку поля message:
                                                                                                                                                                                                                                                                      &validate=`name:minLength=^2^,email:email:required`
                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                    2. петрович
                                                                                                                                                                                                                                                                      09 апреля 2016, 13:33
                                                                                                                                                                                                                                                                      На скрине в письме есть IP пользователя, чем такое реализовать?
                                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                                        10 апреля 2016, 09:11
                                                                                                                                                                                                                                                                        1. Добавить в вызов сниппета AjaxForm новый хук (например, customHook):
                                                                                                                                                                                                                                                                        &hooks=`customHook,FormItSaveForm,email`
                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                        2. Добавить скрытое поле в форму (tpl.AjaxForm):
                                                                                                                                                                                                                                                                        <input type="hidden" name="remote_addr" id="remote_addr" value="[[+fi.remote_addr]]">
                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                        3. Создать сниппет customHook:
                                                                                                                                                                                                                                                                        <?php
                                                                                                                                                                                                                                                                        $hook->setValue('remote_addr', $_SERVER['REMOTE_ADDR']);
                                                                                                                                                                                                                                                                        return true;
                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                        4. В чанке tpl.email добавить строчку:
                                                                                                                                                                                                                                                                        <p>IP адрес: [[+remote_addr]]</p>
                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                      2. Юрий
                                                                                                                                                                                                                                                                        27 марта 2016, 18:18
                                                                                                                                                                                                                                                                        Александр, не подскажете, как сделать форму с возможностью прикрепления и отправки файла? Например, для службы поддержки, чтобы пользователь мог отправить скриншоты или вордовский или екселевский файл?
                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                          03 апреля 2016, 14:16
                                                                                                                                                                                                                                                                          Попробуй добавить к форме атрибут:
                                                                                                                                                                                                                                                                          enctype="multipart/form-data"
                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                        2. Anna
                                                                                                                                                                                                                                                                          22 февраля 2016, 18:32
                                                                                                                                                                                                                                                                          Пишет вот такую ошибку, кажется что то с джеквери ???
                                                                                                                                                                                                                                                                          Uncaught TypeError: jQuery.curCSS is not a functionz.getValues @ VM71:1jQuery.extend.fxe @ VM71:1(anonymous function) @ VM71:1jQuery.extend.dequeue @ jquery-2.1.4.js:3931(anonymous function) @ jquery-2.1.4.js:3973jQuery.extend.each @ jquery-2.1.4.js:376jQuery.fn.jQuery.each @ jquery-2.1.4.js:141jQuery.fn.extend.queue @ jquery-2.1.4.js:3966jQuery.fn.extend.animate @ VM71:1(anonymous function) @ jquery.jgrowl.min.js:1jQuery.event.dispatch @ jquery-2.1.4.js:4437elemData.handle @ jquery-2.1.4.js:4123jQuery.event.trigger @ jquery-2.1.4.js:4352(anonymous function) @ jquery-2.1.4.js:4903jQuery.extend.each @ jquery-2.1.4.js:376jQuery.fn.jQuery.each @ jquery-2.1.4.js:141jQuery.fn.extend.trigger @ jquery-2.1.4.js:4902(anonymous function) @ jquery.jgrowl.min.js:1jQuery.event.dispatch @ jquery-2.1.4.js:4437elemData.handle @ jquery-2.1.4.js:4123jQuery.event.trigger @ jquery-2.1.4.js:4352(anonymous function) @ jquery-2.1.4.js:4903jQuery.extend.each @ jquery-2.1.4.js:376jQuery.fn.jQuery.each @ jquery-2.1.4.js:141jQuery.fn.extend.trigger @ jquery-2.1.4.js:4902e.extend.render @ jquery.jgrowl.min.js:1e.extend.update @ jquery.jgrowl.min.js:1(anonymous function) @ jquery.jgrowl.min.js:1
                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                            24 февраля 2016, 12:25
                                                                                                                                                                                                                                                                            Попробуй подключить библиотеку jQuery в разделе head, до вызова других js-скриптов.
                                                                                                                                                                                                                                                                            1. Анна
                                                                                                                                                                                                                                                                              27 февраля 2016, 19:26
                                                                                                                                                                                                                                                                              jquery в head стоит выше других скриптов, если убрать или поставить выше файл interface.js в котором находится функция evаl (я в ней ничего не понимаю), форма работает отлично, но тогда не работают другие элементы сайта, без которых теряется вся идея сайта, как их совместить?
                                                                                                                                                                                                                                                                          2. Anna
                                                                                                                                                                                                                                                                            18 февраля 2016, 23:46
                                                                                                                                                                                                                                                                            Здравствуйте! подскажите пожалуйста, у меня все работает, и сообщения приходят, только не появляются всплывающие аjax-сообщения типа «сообщение отправлено», пересматривала все вроде правильно не могу разобратся
                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                              21 февраля 2016, 06:34
                                                                                                                                                                                                                                                                              Здравствуйте.
                                                                                                                                                                                                                                                                              Для начала проверьте, есть ли в консоли ошибки.
                                                                                                                                                                                                                                                                            2. Алексей
                                                                                                                                                                                                                                                                              17 января 2016, 11:40
                                                                                                                                                                                                                                                                              Подскажи, где может быть ошибка. Код полностью скопировал с твоей статьи. Компонент выдаёт сообщение «Форма содержит ошибки».
                                                                                                                                                                                                                                                                              В журнале ошибок такая запись:
                                                                                                                                                                                                                                                                              [2016-01-17 11:35:40] (ERROR @ /assets/components/ajaxform/action.php) [FormIt] Произошла ошибка при попытке отправить почту. Пустое тело сообщения
                                                                                                                                                                                                                                                                              Не пойму куда копать.

                                                                                                                                                                                                                                                                              До этого сам настраивал через Ajax, ошибок нигде нет, но письма не приходят.
                                                                                                                                                                                                                                                                              Пробовал отдельно через FormIt делать. Письма отправляются, но приходят в таком виде:
                                                                                                                                                                                                                                                                              [[+name]] прислал сообщение:
                                                                                                                                                                                                                                                                              [[+message]]
                                                                                                                                                                                                                                                                              Ответить [[+name]] на почту [[+email]].
                                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                                17 января 2016, 12:28
                                                                                                                                                                                                                                                                                1. Проверьте параметр &emailTpl — он должен содержать чанк, содержащий тело сообщение.
                                                                                                                                                                                                                                                                                [[!AjaxForm? 
                                                                                                                                                                                                                                                                                  &emailTpl=`tpl.email`
                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                2. Проверьте, чтобы у формы был метод отправки (POST) и она имела класс ajax_form:
                                                                                                                                                                                                                                                                                <form action="" method="post" class="ajax_form af_example form-horizontal">\
                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                1. Алексей
                                                                                                                                                                                                                                                                                  17 января 2016, 15:11
                                                                                                                                                                                                                                                                                  Заработало после того как сделал так
                                                                                                                                                                                                                                                                                  form action="/[[~[[*id]]]]"
                                                                                                                                                                                                                                                                                  Теперь вот не могу понять, почему с моей формой отправки, которая взята из шаблона не приходят письма и ошибок нет…
                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                    20 января 2016, 16:51
                                                                                                                                                                                                                                                                                    Не знаю чем Вам помочь, но при отправке формы через AJAX значение атрибута action не должно играть ни какой роли. Т.к. настройка, куда отправить форму уже определяется в коде JavaScript в качестве параметра метода jQuery post().
                                                                                                                                                                                                                                                                              2. Александр
                                                                                                                                                                                                                                                                                16 января 2016, 17:45
                                                                                                                                                                                                                                                                                Спасибо за консультации!
                                                                                                                                                                                                                                                                                124print.ru/about.html
                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                  17 января 2016, 10:37
                                                                                                                                                                                                                                                                                  Спасибо, Александр.
                                                                                                                                                                                                                                                                                2. Паевл
                                                                                                                                                                                                                                                                                  12 января 2016, 19:51
                                                                                                                                                                                                                                                                                  Добрый вечер Шеф!!! Давно пользуюсь вашим сайтом, очень многое здесь узнал, и много нашел ответов на свои вопросы!!! Хотел задать вопрос по этой теме:

                                                                                                                                                                                                                                                                                  Как можно сделать чтобы окно об успешной отправки сообщения появлялась по середине страницы. И как можно сделать так чтобы в окне об успешной отправки были включены данные введенные в форму, то есть в input. пример (). Может нужно какой та плейсхолдер, и как его правильно применить.

                                                                                                                                                                                                                                                                                  Заранее спасибо!
                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                    14 января 2016, 12:39
                                                                                                                                                                                                                                                                                    Здравствуйте!
                                                                                                                                                                                                                                                                                    Для этого Вам необходимо открыть файл default.js, находящийся в каталоге /assets/components/ajaxform/js/ и произвести в нём следующие изменения:
                                                                                                                                                                                                                                                                                    1. Добавить строчку ($.jGrowl.defaults.position = 'center'):
                                                                                                                                                                                                                                                                                    $(document).ready(function() {
                                                                                                                                                                                                                                                                                      $.jGrowl.defaults.closerTemplate = '<div>[ '+afConfig.closeMessage+' ]</div>';
                                                                                                                                                                                                                                                                                      // настраиваем позицию
                                                                                                                                                                                                                                                                                      $.jGrowl.defaults.position = 'center';
                                                                                                                                                                                                                                                                                    });
                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                    2. Можно чтобы не гонять их обратно с сервера, при нажатию на кнопку «Отправить» сохранить их, а потом если с сервера пришёл ответ success, добавить их к сообщению:
                                                                                                                                                                                                                                                                                    2.1. Получаем нужные данные:
                                                                                                                                                                                                                                                                                    $(document).on('submit', afConfig.formSelector, function(e) {
                                                                                                                                                                                                                                                                                      // получить значение поля name
                                                                                                                                                                                                                                                                                      name = $('.ajax_form input[name="name"]').val();
                                                                                                                                                                                                                                                                                      ...
                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                    2.2. Добавляем их к сообщению:
                                                                                                                                                                                                                                                                                    AjaxForm.Message = {
                                                                                                                                                                                                                                                                                      success: function(message, sticky) {
                                                                                                                                                                                                                                                                                        if (message) {
                                                                                                                                                                                                                                                                                          if (!sticky) {sticky = false;}
                                                                                                                                                                                                                                                                                          // Добавляем данные формы к сообщению (message)
                                                                                                                                                                                                                                                                                          $.jGrowl(message + "Имя: " + name, {theme: 'af-message-success', sticky: sticky});
                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                      ,error: function(message, sticky) {
                                                                                                                                                                                                                                                                                      ...
                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                    1. Павел
                                                                                                                                                                                                                                                                                      14 января 2016, 23:37
                                                                                                                                                                                                                                                                                      Спасибо огромное ШЕФ все сработало!!!

                                                                                                                                                                                                                                                                                      Хотел только еще спросить одну деталь, как сделать чтоб имя (name) в окне (af-message-success) как то выделялось например красным цветом, как ему присвоить стиль CSS в скрипте???
                                                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                                                        15 января 2016, 15:25
                                                                                                                                                                                                                                                                                        Ну также как и обычно.
                                                                                                                                                                                                                                                                                        1. С помощью атрибута style (не рекомендуется).
                                                                                                                                                                                                                                                                                        // Добавляем данные формы к сообщению (message)
                                                                                                                                                                                                                                                                                        message += '<span style="color:red">Имя: ' + name + '</span>';
                                                                                                                                                                                                                                                                                        $.jGrowl(message + "Имя: " + name, {theme: 'af-message-success', sticky: sticky});
                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                        2. С помощью класса (рекомендуется).
                                                                                                                                                                                                                                                                                        // Добавляем данные формы к сообщению (message)
                                                                                                                                                                                                                                                                                        message += '<span class="red">Имя: ' + name + '</span>';
                                                                                                                                                                                                                                                                                        $.jGrowl(message + "Имя: " + name, {theme: 'af-message-success', sticky: sticky});
                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                        После этого необходимо добавить в CSS:
                                                                                                                                                                                                                                                                                        .red {
                                                                                                                                                                                                                                                                                          color: red;
                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                        1. Павел
                                                                                                                                                                                                                                                                                          15 января 2016, 21:26
                                                                                                                                                                                                                                                                                          Еше раз большое спасибо ШЕФ!!! За ваш сайт и вашу помощь!!!
                                                                                                                                                                                                                                                                                  Войдите, пожалуйста, в аккаунт, чтобы оставить комментарий.