Обработка формы обратной связи в MODX с помощью FormIt

Александр Мальцев
Александр Мальцев
102K
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.07.2021, 16:58
    Можешь подсказать как исправить я все перепробовал что знаю. на сайте ugavto-rostov.ru горизонтальная промотка из за галереи думаю.в адаптивной верстке. косяк в том что когда открываешь галерею правая стрелка промотки настроена на конец окна, и ее не видно так как окно больше экрана из за промотки, я нашел как стрелочку подвинуть но промотка останется.Буду безгранично благодарен если скажешь как исправить это увеличит мои знания.
    1. Сергей
      Сергей
      17.07.2021, 16:47
      ну когда с права на пустом месте от фото нажимаешь. то открывается фото. тоесть блок шире почемуто. что легче поменять галерею? нужно убрать горизонтальную прокрутку на мобильных устройствах, а просто адоптивная верстка не показывает пркрутку, только когда выбераешь модель любого телефона.
    2. Сергей
      Сергей
      08.07.2021, 08:01
      подскажите пожалуйста как дополнительные поля сделать отображение не во вкладке доп поля а на вкладке документ как на скриншоте itchief.ru/assets/uploadify/0/f/f/0ffc19dd1dc230c2b6c0e233817d572c.jpg
      1. Александр Мальцев
        Александр Мальцев
        08.07.2021, 14:31
        Это осуществляется через настройку форм в админке.
        1. Сергей
          Сергей
          08.07.2021, 14:59
          получилось спасибо
      2. Сергей
        Сергей
        08.07.2021, 07:58
        Подскажите пожалуйста как увеличить memory_limit для сайта
        1. Александр Мальцев
          Александр Мальцев
          08.07.2021, 14:26
          Попробуйте добавить в конец файла «.htaccess» следующую строку:
          php_value memory_limit 100M
          1. Сергей
            Сергей
            08.07.2021, 14:59
            поставил но незнаю как проверить
            1. Александр Мальцев
              Александр Мальцев
              09.07.2021, 05:12
              Можно с помощью phpinfo().
              1. Сергей
                Сергей
                09.07.2021, 10:05
                получилось посмотреть местное значение Local Value 400м главное значение Master Value 128м, это значит поменялось или не совсем?
                1. Александр Мальцев
                  Александр Мальцев
                  11.07.2021, 14:44
                  Можно так:
                  <?php
                  exit(ini_get('memory_limit'));
                  1. Сергей
                    Сергей
                    11.07.2021, 14:48
                    простите а это куда вставлять? и сколько (м) оно даст?
                    1. Александр Мальцев
                      Александр Мальцев
                      11.07.2021, 14:59
                      Создать php-файл на сервере, скопировать в него это содержимое и открыть его в браузере.
                      1. Сергей
                        Сергей
                        11.07.2021, 15:09
                        сделал показывает 400м, это только просмотривать такой способ? но Master Value 128м так и остался неизменным. Чему верить? Master Value это не важно считать что memory_limit равен 400м?
                        1. Александр Мальцев
                          Александр Мальцев
                          11.07.2021, 15:35
                          Это локальное (конечное) значение, используется именно оно.
                          Master Value – это первоначальное (глобальное) значение (установлено в «php.ini»), которое затем вы переопределили в «.htaccess». Значение переопределённое в «.htaccess» — это локальное значение (Local Value).
                          1. Сергей
                            Сергей
                            11.07.2021, 15:42
                            понял большое спасибо!!!
                            1. Сергей
                              Сергей
                              11.07.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.07.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.07.2021, 15:41
                                  Спасибо за ответ, лучше не буду лезть туда.
        2. Сергей
          Сергей
          07.07.2021, 13:33
          здравствуйте не к кому обратиться форма работает отправляет письма на почту mail.ru, но когда меняешь на почту yandex.ru форма пишет ошибку, подскажите как подключить почту на yandex.ru. буду очень благодарен если поможете, спасибо.
          1. Александр Мальцев
            Александр Мальцев
            07.07.2021, 15:11
            Здравствуйте! Для этого нужно использовать не обычный пароль от почты, а создать отдельный для приложений. Выполняется это на странице «Пароль для почты» (открывается она при нажатии на ссылку «пароли приложений», расположенной в меню: Настройки -> Безопасность).
            Создайте отдельных паролей Яндекс Почты для приложений
            1. Сергей
              Сергей
              07.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.07.2021, 15:43
                При отправке корректно заполненной формы возвращается ошибка:
                email: "<span class=\"error\"> </span>"
                message: "Форма содержит ошибки"
                success: false
                1. Александр Мальцев
                  Александр Мальцев
                  07.07.2021, 15:36
                  Так всё корректно, только в поле mail_smtp_hosts прописываю так: smtp.yandex.ru:465
                  1. Сергей
                    Сергей
                    07.07.2021, 15:51
                    И как мне исправить эти ошибки, какие данные вам скинуть?
                    1. Сергей
                      Сергей
                      07.07.2021, 16:06
                      может потому что я сначала аджаксформ установил а потом форм айти, может из за этого?
                      1. Александр Мальцев
                        Александр Мальцев
                        07.07.2021, 16:11
                        Наврядли, попробуйте без валидации данных.
                        1. Сергей
                          Сергей
                          07.07.2021, 16:21
                          убрал строчку &validate=`name:required,email:email:required,telefon:required` таже ошибка высвечивается (. хук емайл убераю пишет что отправлено тока на почту нечего не приходит
                          1. Сергей
                            Сергей
                            07.07.2021, 16:40
                            у меня указано вот такое сообщение об ошибке &validationErrorMessage=`Пожалуйста, исправьте ошибки!` а на сайте приходит другое сообщение.
                            1. Сергей
                              Сергей
                              07.07.2021, 18:06
                              вы еще подумаете как мне помочь, у вас на сайтах яндекс почта работает? или мне не ждать ответа?
                              1. Александр Мальцев
                                Александр Мальцев
                                08.07.2021, 01:14
                                Использую Яндекс Почту для домена. Она работает. На рабочем проекте не могу экспериментировать, попробую настроить отправку почты через личный аккаунт Яндекс Почты на тестовом проекте и напишу результат.
                                1. Сергей
                                  Сергей
                                  08.07.2021, 07:55
                                  написал в техподдержку яндекса они сказали поставить галочки вот тут mail.yandex.ru/#setup/client и форма заработала.
                                  1. Александр Мальцев
                                    Александр Мальцев
                                    08.07.2021, 14:22
                                    Отлично!
            2. Сергей
              Сергей
              11.06.2021, 23:55
              подскажите как сделать так чтоб модальное окно не закрывалось при нажатии на кнопку формы отправить, только при втором нажатии на модальное окно видно сообщении что форма отправилась корректно.использую formit на modx revo.
              1. Александр Мальцев
                Александр Мальцев
                07.07.2021, 15:13
                Для этого уберите или закомментируйте код закрывающий модальное окно при нажатии на кнопку.
              2. Maxim Sokolkov
                Maxim Sokolkov
                12.05.2021, 11:35
                Добрый день. Подскажите, пожалуйста, почему могли сломаться выводы &validationErrorMessage и &successMessage?
                Раньше они открывались в модальном окне, сейчас же они на секунду появляются под футером и исчезают. Сообщения при этом уходят нормально. Как будто какой то css не отрабатывает, но не могу понять какой.

                i.imgur.com/mYDYMEr.png
                1. Вадим
                  Вадим
                  06.04.2021, 11:27
                  Добрый день Александр, вопрос такой. Есть форма на сайте, все работает и письмо отправляется, но не могу разобраться с правами пользователей. Суперадмин видит кнопку FormIt в админке и видит заполненные формы, а Manager видит кнопку FormIt, но списка заполненных форм нет, может подскажете в чем проблема, где я мог ошибиться в настройках пользователя?
                  1. Вадим
                    Вадим
                    06.04.2021, 11:35
                    Все разобрался, после перехода сайта на https протокол, если в админку зайти по http протоколу многое работает некорректно.
                  2. Александр Сидоров
                    Александр Сидоров
                    23.03.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.03.2021, 14:54
                      Привет! Попробуйте убрать у поля атрибут disabled, значение таких полей скорее всего не передаются на сервер. Используйте, если нужно hidden или readonly.
                      1. Александр Сидоров
                        Александр Сидоров
                        24.03.2021, 15:09
                        Благодарю за ответ, к этому времени разобрал проблему, да именно в disabled она и была.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                          1. Александр Мальцев
                            Александр Мальцев
                            24.03.2021, 16:14
                            Начните с разметки. Откройте валидатор (https://validator.w3.org/) и исправьте все ошибки, которые у вас имеются в разметке, потом двигайтесь дальше.
                            1. Александр Сидоров
                              Александр Сидоров
                              24.03.2021, 17:08
                              Помогите с задачкой Александр. В долгу не останусь, труд оплачу.
                              1. Александр Сидоров
                                Александр Сидоров
                                24.03.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.03.2021, 15:52
                              Добавьте к input name:
                              <input name="form-1" type="submit" value="Отправить" />
                              В вызове сниппета добавьте параметр submitVar:
                              &submitVar=`form-1`
                              
                              1. Александр Сидоров
                                Александр Сидоров
                                24.03.2021, 15:45
                                Проблема решилась после того, как убрал хуки
                                &hooks=`FormItSaveForm,spam,email`

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

                                Но теперь по 3 письма одинаковых приходит(
                          2. Дмитрий
                            Дмитрий
                            04.03.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.01.2021, 12:15
                              Здравствуйте! Подскажите, пожалуйста, как указать страницу, с которой отправили сообщение. Если оставляю emailTpl по умолчанию, то id страницы приходит, а если пишу свой чанк как у вас с добавлением id: [[+id]], то номера нет, а так [[+id]] остается в сообщении.
                              1. Татьяна
                                Татьяна
                                18.01.2021, 12:25
                                Все, разобралась сама. Нужно указать скрытое поле с name=«имя» value="[[*id]]", а в чанке подставить [[+имя]]. Подсмотрела в комментариях.
                              2. Сергей
                                Сергей
                                19.10.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.10.2020, 15:14
                                  Здравствуйте! Отправляет AjaxForm или нет можно посмотреть в браузере, используя инструменты разработчика.
                                  1. Сергей
                                    Сергей
                                    20.10.2020, 15:51
                                    это я знаю, я уже все там просмотрел все работало и отправляло. Если вкратце причина была в то что [[!AjaxForm?]] был два раза подключен.
                                2. Фунтик
                                  Фунтик
                                  27.07.2020, 18:59
                                  Здравствуйте, пытаюсь изменить successMessage, но оно не хочет меняться. В чем проблема?
                                  1. Александр Мальцев
                                    Александр Мальцев
                                    28.07.2020, 15:54
                                    Здравствуйте! А что у вас в successMessage?
                                    1. Фунтик
                                      Фунтик
                                      28.07.2020, 20:29
                                      Уже решил)
                                  2. Maxim Sokolkov
                                    Maxim Sokolkov
                                    31.05.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.05.2020, 00:46
                                      Добрый вечер! Интересует вопрос, а возможно ли средствами formit и modx делать следующее: как только отправили форму post запросом и выполнили redirect скажем на страницу благодарности, то после этого кликом мыши на перезагрузку в браузере переадресовать страницу на главную (такой не стандартный немного вариант) и чтоб на эту страницу нельзя было повторно попасть по истории ( стрелка влево и вправо в браузере), а если мы пытаемся попасть на нее прямым запросом то нас опять же редиректит на главную?

                                      Я знаю что можно через куки — записав куки страницы потом обнулить их и получается что в рамках одной сессии можно попасть один раз, а вот средствами только modx и formit это возможно?
                                      1. Сергей
                                        Сергей
                                        07.05.2020, 13:15
                                        Еще хотел добавить — это вроде называется паттерн PRG (POST/REDIRECT/GET)
                                        1. Александр Мальцев
                                          Александр Мальцев
                                          09.05.2020, 16:27
                                          Добрый день! Но этот паттерн не совсем то, что вы хотите сделать.
                                          Это можно выполнить через сессионные переменные. Например, в FormIt создать хук в котором в некоторую сессионную переменную записывать какое-то определенное значение. Кроме этого к FormIt через redirectTo установить id страницы благодарности. На страницу благодарности добавить некоторый сниппет. В этом сниппете проверять наличие этой сессионной переменной. Если её нет, то выполнять редирект на главную страницу. В противном случае удалять её. В этом случае при повторной загрузке страницы сессионой переменной уже не будет и попасть на неё не получится. Следовательно, сниппет на этой странице выполнит редирект на главную страницу.
                                      2. Александр С
                                        Александр С
                                        20.04.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.04.2020, 15:44
                                          Здравствуйте! Посмотрите, есть ли ошибки в логах и журнале MODX. Если нет, то можете попробовать начать создавать форму с одного поля, постепенно добавляя новые. Обратите внимание, что в форме у вас несколько полей с name="name".
                                        2. Венера
                                          Венера
                                          28.02.2020, 23:59
                                          Здравствуйте! Описанная вами форма отображается корректно во всех версиях? Имею ввиду ПК, мобильная. Дали под редактирование сайт на modx, там установлена форма, которая на ПК отображается корректно, но на мобильной версии не отображается совсем. Куда посмотреть и что изменить подскажите пожалуйста.
                                          1. Александр Мальцев
                                            Александр Мальцев
                                            29.02.2020, 09:16
                                            Здравствуйте! Посмотрите стили, может она просто скрыта на мобильных устройствах.
                                          2. Мансур Латыпов
                                            Мансур Латыпов
                                            27.02.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.02.2020, 09:22
                                              Проверьте, есть ли ошибки в журнале ошибок MODX. Также следует проверить настройки почты в системных настройках MODX. Отправка почты выполняется в соответствии с ними. Для этого в админке нажмите на значок шестеренки, выберите пункт «Системный настройки». На открывшейся странице выберите раздел «core» и подраздел «Почта» и посмотрите что у вас там настроено.
                                              1. Sergey Net
                                                Sergey Net
                                                27.06.2020, 22:10
                                                Здравствуйте Александр!
                                                А не могли бы вы рассказать немного подробнее — как именно там (core — почта) все должно быть настроено?
                                                1. Александр Мальцев
                                                  Александр Мальцев
                                                  28.06.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
                                                    Sergey Net
                                                    28.06.2020, 19:33
                                                    Спасибо Александр! Да, почта работает.
                                                    Респект вам и уважуха! вы прям как добрый самаритянин помогающий путникам:)
                                                    Сейчас таких днем с огнем не сыщешь!
                                                    Если вам нужно будет где-то на каком-то сервисе поставить отзыв, то киньте ссылку — поставлю:)

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

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

                                              Возникает вопрос, как заставить FormIt сохранять данные формы?
                                              1. Александр Мальцев
                                                Александр Мальцев
                                                08.02.2020, 15:00
                                                Здравствуйте.
                                                Если вы используете AjaxForm, то атрибут action не используется, т.к. форма отправляется на сервер через AJAX. Если использовать просто FormIt без AjaxForm, то action должен указывать на ресурс, в котором расположен вызов сниппета FormIt чтобы он мог получить данные и обработать их.
                                                1. Zulya
                                                  Zulya
                                                  08.02.2020, 20:23
                                                  Здравствуйте, Александр!
                                                  Да, используется просто FormIt без AjaxForm. А возможно ли написать вспомогательный сниппет, который будет сохранять данные формы FormIt в базе и тем самым передавать данные формы на страницу 1006?
                                                  1. Александр Мальцев
                                                    Александр Мальцев
                                                    10.02.2020, 06:21
                                                    Здравствуйте!
                                                    Данные же хранятся в базе. Вам нужно просто написать хук для FormIt, который будет получать данные с формы и заносить их в базу для ресурса 1006, и если нужно делать редирект на этот ресурс. При этом в action должна быть ссылка на ресурс, в котором находится вызов сниппета FormIt, который всё это будет делать. Если он находится на 1006, то оставляйте это значение.
                                                    1. Zulya
                                                      Zulya
                                                      10.02.2020, 12:49
                                                      Спасибо!
                                              2. Антон
                                                Антон
                                                06.02.2020, 12:58
                                                Добрый день Александр. Прошу вашей помощи, при отправки формы страница перезагружается и прокручивается на верх, то есть Ajax не срабатывает. При этом письмо отправляется и благополучно приходит на почту. Сделано все по инструкции с этой статьи, JQuery подключен, версия MODX последняя, никаких ошибок в консоли нет — только в разделе «VERBOSE» выдает следующие сообщения:
                                                [Violation] Avoid using document.write(). и [Violation] Parser was blocked due to document.write(
                                                1. Александр Мальцев
                                                  Александр Мальцев
                                                  06.02.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.02.2020, 13:50
                                                    Александр спасибо за доступное объяснение, Вы абсолютно правы по каким-то причинам Chrome не хотел подключать скрипты. Так же еще пришлось перенести script подключения jquery в раздел head (изначально был подключен перед закрывающим тегом body) и все заработало.
                                                2. Паша
                                                  Паша
                                                  06.02.2020, 07:02
                                                  На хостинге работает отправка почты с сайта только при помощи функции PHP mail(). При отправке заявки появляется надпись «Форма успешно отправлена». Хотя в &successMessage указан другой текст. На почту заявки не приходят. В файлах логов появляется "/core/components/formit/src/FormIt/Hook/Email.php: 322) [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail." Подскажите, пожалуйста, как настроить отправку при помощи функции PHP mail().
                                                  1. Александр Мальцев
                                                    Александр Мальцев
                                                    06.02.2020, 13:33
                                                    По сообщению, которое выдаёт компонент FormIt, у вас на хостинге просто не подключена функция mail. Он её не может запустить, и, следовательно отправить письмо.
                                                    1. Паша
                                                      Паша
                                                      06.02.2020, 08:20
                                                      Хостинг ответил «Попытка отправки письма со стороны Вашего сайта обрывается еще до связи с почтовым сервером».
                                                    2. Саша
                                                      Саша
                                                      24.01.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.01.2020, 09:47
                                                        Здравствуйте! Если отсутствует код вызова сниппета AjaxForm, то его нужно добавить или откатить сайт на предыдущую дату, где он присутствовал.
                                                        Настройки почты находятся в системных настройках в разделе «Почта».
                                                      2. Ivan
                                                        Ivan
                                                        22.01.2020, 00:45
                                                        Здравствуйте! не подскажете, на сайте такая проблема: настроили отправку формы обратной связи через AjaxForm по SMTP на MODx Revo. Письмо отправляется, только при этом сама форма подвисает и сообщение об отправке не выводится. На почту при этом всё приходит. Ошибок в логах нигде никаких нет — ни на сервере, ни в консоли хрома, ни в админке Модх. Всё уже перерыли, даже не знаю куда копать дальше) Буду благодарен за любой совет, заранее, спасибо!
                                                        1. Ivan
                                                          Ivan
                                                          22.01.2020, 15:26
                                                          Разобрался) Если кому интересно, помогло обновление движка до актуальной версии ;)
                                                          1. Александр Мальцев
                                                            Александр Мальцев
                                                            23.01.2020, 14:57
                                                            Отлично!
                                                        2. Елена Туркина
                                                          Елена Туркина
                                                          26.12.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.12.2019, 08:40
                                                            Для отправки писем необходимо наличие php функции mail. Если хостинг бесплатный, то они обычно отключают возможность отправки писем. Если хостинг платный, то напишите в техподдержку, чтобы вам включили данную функцию.
                                                            1. Елена Туркина
                                                              Елена Туркина
                                                              26.12.2019, 11:45
                                                              Спасибо)
                                                          2. Людмила
                                                            Людмила
                                                            25.12.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
                                                              Nik
                                                              25.12.2019, 14:43
                                                              Попробуйте заменить $(document).ready(function(){ , в вашем скрипте убирающем конфликты на это — jQuery(function($){
                                                              возможно поможет. Ну и посмотрите что консоль показывает, какие ошибки
                                                              1. Людмила
                                                                Людмила
                                                                25.12.2019, 20:57
                                                                Благодарю за ответ. Не успела написать, помогло убрать обертку jQuery.noConflict(); (jQuery);
                                                                И конфликты вроде не появились, всё работает.
                                                            2. IbraimVeliiev
                                                              IbraimVeliiev
                                                              11.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.11.2019, 02:06
                                                                Привет!
                                                                Если учётные данные SMTP сервиса корректные, то обратитесь в техподдержку.
                                                              2. Артем
                                                                Артем
                                                                22.10.2019, 15:56
                                                                Александр, добрый день.
                                                                А подскажите мне пожалуйста. Настроил Fomit + FormitSaveForm.
                                                                Мне необходимо что эта сохраненная форма отправлялась на email в виде csv таблицы. Как это лучше реализовать?
                                                                1. Александр Мальцев
                                                                  Александр Мальцев
                                                                  23.10.2019, 14:32
                                                                  Привет! Для этого нужно создать хук для FormIt. В этом хуке написать запрос для выборки данных из таблицы formit_forms. После этого посредством перебора данных сформировать из них csv. Затем написать код для отправки csv на почту.
                                                                2. Виктор
                                                                  Виктор
                                                                  13.10.2019, 21:53
                                                                  Сделал Форму с полями. Все работает хорошо, отправляет, проходит проверку (валидацию), выводит сообщение об ошибках.
                                                                  Единственно, если в какие-то поля не заполнены, страница как-бы перезагружается. И если форма была внизу странице, то для того чтобы увидеть сообщения об ошибках, нужно прокрутить страницу вниз. У пользователя может создаться впечатление, что отправка прошла успешно, если он не прокрутит страницу вниз.
                                                                  Как сделать, чтоб фокус оставался на форме?
                                                                  1. Александр Мальцев
                                                                    Александр Мальцев
                                                                    14.10.2019, 13:50
                                                                    Если форму реализовали с использованием AjaxForm, то страница не должна перезагружаться. Если страница перезагружается, то необходимо проверить может где-то что-то пропустили.
                                                                    1. Виктор
                                                                      Виктор
                                                                      14.10.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.10.2019, 13:58
                                                                        В коде нет подключения библиотеки jQuery, а AjaxForm от неё зависит.
                                                                        1. Людмила
                                                                          Людмила
                                                                          24.12.2019, 12:31
                                                                          Александр, а у меня такая же проблема, но jQuery подключен, и не решается.
                                                                          Вот здесь: _https://copy.oartemi-slovo.ru/f1.html
                                                                          1. Александр Мальцев
                                                                            Александр Мальцев
                                                                            24.12.2019, 12:58
                                                                            У вас к странице не корректно подключен javascript-файл компонента AjaxForm (_https://copy.oartemi-slovo.ru/assets/components/ajaxform/js/default.js). Такая же проблема и с CSS-файлом этого компонента.
                                                                            1. Людмила
                                                                              Людмила
                                                                              24.12.2019, 13:43
                                                                              0:/oartemi-slovo.ru/htdocs/copy/core/components/ajaxform/ здесь у меня устанавливается ajaxform, но в этой директории нет директории js и никаких js скриптов и css нет. AjaxForm с modstore.pro ничем не отличается от моего, с modx.com.
                                                                              1. Александр Мальцев
                                                                                Александр Мальцев
                                                                                24.12.2019, 14:04
                                                                                А при чём тут core? Эта же ссылка на клиентскую часть компонента. Откройте в браузере инструменты разработчика и посмотрите на вкладке Elements или Network, что js-скрипт отдаётся с кодом 404, т.е. не найден.
                                                                                1. Людмила
                                                                                  Людмила
                                                                                  24.12.2019, 14:11
                                                                                  Так и я про то же: у меня нет этого скрипта default.js, как и всей папки ajaxform в assets/components. Конечно будет 404, если их нет. Но как такое может быть? При установке AjaxForm на домен oartemi-slovo.ru есть и папка, и скрипты. Вручную разве перекинуть их на поддомен copy?
                                                                                  1. Александр Мальцев
                                                                                    Александр Мальцев
                                                                                    24.12.2019, 14:28
                                                                                    Проверьте, может вы что-то не учли при создании поддомена для разработки сайта.
                                                                                    1. Александр Мальцев
                                                                                      Александр Мальцев
                                                                                      24.12.2019, 14:28
                                                                                      Проверьте, может вы что-то не учли при создании поддомена для разработки сайта.
                                                                                      1. Людмила
                                                                                        Людмила
                                                                                        24.12.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.12.2019, 15:11
                                                                                          Если у вас при установке компонента он устанавливается в основной сайт, значит нужно просто настроить MODX для правильной работе на этом поддомене и только потом уже устанавливать компоненты.
                                                                                          1. Людмила
                                                                                            Людмила
                                                                                            24.12.2019, 15:45
                                                                                            oartemi-slovo.ru/uchimsya.html вот на домене такая же ошибка.
                                                                                  2. Людмила
                                                                                    Людмила
                                                                                    24.12.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.10.2019, 20:28
                                                                                  Спасибо! Помогли, получилось.
                                                                          2. Дмитрий
                                                                            Дмитрий
                                                                            09.10.2019, 14:36
                                                                            Добрый день. Подскажите пожалуйста куда нужно вписать email админа на который должны приходить письма, ато не приходят.
                                                                            1. Александр Мальцев
                                                                              Александр Мальцев
                                                                              09.10.2019, 15:30
                                                                              Если письма всё равно не будут приходить, то необходимо настроить почту в MODX. Осуществляется это с помощью настройки системных параметров в админке. Все настройки собраны в разделе core -> Почта.
                                                                              1. Александр Мальцев
                                                                                Александр Мальцев
                                                                                09.10.2019, 14:47
                                                                                Привет!
                                                                                Это определяется в параметре emailTo:
                                                                                &emailTo=`myemail@mail.ru`
                                                                                
                                                                              2. Карен Григорян
                                                                                Карен Григорян
                                                                                26.08.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
                                                                                  Vasily
                                                                                  03.04.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.04.2019, 14:15
                                                                                    Лучше откатить версию FormIt на предыдущую.
                                                                                    1. Vasily
                                                                                      Vasily
                                                                                      03.04.2019, 14:42
                                                                                      То есть я установил MODX v2.7.1, загрузил FormIt, далее надо где-то искать/вытаскивать старую версию 4.1.0? А можно без откатов, а то в новой версии есть и улучшения, но вот то, что ID убрали — беда
                                                                                      1. Александр Мальцев
                                                                                        Александр Мальцев
                                                                                        03.04.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
                                                                                          Vasily
                                                                                          03.04.2019, 16:04
                                                                                          В новой начитается с Name. ID нет. :(

                                                                                          А в старой ID, FORM, Значения, Дата, HASH Key
                                                                                          1. Александр Мальцев
                                                                                            Александр Мальцев
                                                                                            04.04.2019, 14:57
                                                                                            Не знаю что у вас с таблицей formit_forms. FormIt 4.2.1 совместима с MODX 2.7. Установил MODX 2.7.1, FormIt 4.2.1 — всё отлично работает. Никаких name нет в базе данных. Скриншот структуры таблицы.
                                                                                            1. Vasily
                                                                                              Vasily
                                                                                              04.04.2019, 17:58
                                                                                              А form в БД разве не Имя формы? Интересует как раз ID в самой CMS. Спасибо
                                                                                              1. Александр Мальцев
                                                                                                Александр Мальцев
                                                                                                08.04.2019, 15:20
                                                                                                Разобрался с данной проблемой. Для того чтобы перейти на FormIt 4 сначала необходимо поставить FormIt 3 версии (например, 3.0.3). В этой версии имеет код, который обновляет структуру таблицы formit_forms и др. После этого можно установить FormIt 4 версии, и все записи в таблице formit_forms будут отображаться на вкладке «Формы» страницы «FormIt».
                                                                                                1. Vasily
                                                                                                  Vasily
                                                                                                  08.04.2019, 16:05
                                                                                                  Шеф, сделал всё по вашей инструкции (даже начиная с версии formit-2.2.6), но это не решило данную проблему
                                                                                                  1. Александр Мальцев
                                                                                                    Александр Мальцев
                                                                                                    12.04.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
                                                                                              Vasily
                                                                                              03.04.2019, 16:15
                                                                                              Будем, ждать_
                                                                                    2. anton
                                                                                      anton
                                                                                      19.03.2019, 11:59
                                                                                      Здравствуйте!

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

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

                                                                                          Как подставить значение в зависимости от какого поля идет ошибка?
                                                                                          1. Александр Мальцев
                                                                                            Александр Мальцев
                                                                                            20.03.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.02.2019, 14:39
                                                                                        Приветствую!
                                                                                        В форме есть 2 обязательных поля.
                                                                                        При заполнении одного из полей, второе должно становится не обязательным.
                                                                                        Как такое можно сделать?
                                                                                        1. Александр Мальцев
                                                                                          Александр Мальцев
                                                                                          02.03.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.02.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.02.2019, 15:49
                                                                                            Здравствуйте!
                                                                                            Проверьте, нет ли ошибок в журнале ошибок MODX. А также стоит обратить внимание на папку спам, может туда письма попадают.
                                                                                            1. Паша
                                                                                              Паша
                                                                                              15.02.2019, 11:56
                                                                                              Спасибо за данный материал и ваш ответ. Попробовал перенести сайт на другой домен и хостинг — там все работает хорошо. Значит проблема не в коде. А хостинге.
                                                                                          2. Игорь
                                                                                            Игорь
                                                                                            08.02.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.02.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.02.2019, 21:00
                                                                                                Понял, спасибо за помощь
                                                                                            2. IbraimVeliiev
                                                                                              IbraimVeliiev
                                                                                              06.02.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.02.2019, 15:07
                                                                                                Так что-то сложно посоветовать, посмотрите может ошибки есть в журнале MODX.
                                                                                                1. IbraimVeliiev
                                                                                                  IbraimVeliiev
                                                                                                  07.02.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.02.2019, 14:02
                                                                                                    Так в логах же всё написано. Ошибка у вас заключается в том, что php не удалось создать экземпляр функции mail. Вместо xampp поставьте локальный веб-сервер, который поддерживает отправку email писем или хотя бы имеет заглушку. Ну, или попробуйте настроить xampp, если в нём это есть.
                                                                                              2. Aleksandr Ustinov
                                                                                                Aleksandr Ustinov
                                                                                                30.01.2019, 21:11
                                                                                                Доброго времени шеф! Подскажите пожалуйста, для своих полей, в частности как в примере номер телефона, как добавить валидацию, в каком файле? И ещё вопрос, если добавляю родной чанк форма отправляется, а если изменяю форму в дизайн сайта, то форма сообщение что форма отправилась, но на самом деле не отправляется.
                                                                                                1. Александр Мальцев
                                                                                                  Александр Мальцев
                                                                                                  31.01.2019, 13:24
                                                                                                  Доброго!
                                                                                                  Как сделать валидацию номера телефона приведено в этом комментарии.
                                                                                                  Второй вопрос попробуйте решить посредством очистки кэша.
                                                                                                  1. Aleksandr Ustinov
                                                                                                    Aleksandr Ustinov
                                                                                                    01.02.2019, 14:39
                                                                                                    Спасибо шеф! Ещё одна проблема. Перенес сайт с локального сервера в интернет, и теперь при отправки — ошибка валидации, форма не отправляется. На локальном сервере форма отправлялась письмо приходило.
                                                                                                    1. Александр Мальцев
                                                                                                      Александр Мальцев
                                                                                                      04.02.2019, 15:08
                                                                                                      Проверьте почтовые настройки в MODX (Шестерёнка -> Системные настройки -> фильтр «Почта»), а также, чтобы значение email адреса (имя домена) в параметре &emailFrom совпадала с вашим именем домена. Кроме этого стоит проверить поддерживает ли ваш тарифный план хостинга вообще отправку писем.
                                                                                                      1. Aleksandr Ustinov
                                                                                                        Aleksandr Ustinov
                                                                                                        01.02.2019, 17:00
                                                                                                        Дополнение: в админке сообщение появляется…
                                                                                                  2. Иван
                                                                                                    Иван
                                                                                                    18.01.2019, 01:27
                                                                                                    Добрый день!
                                                                                                    При выводе формы у меня все на сайте отображается. В чем причина?

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


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

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


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

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


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

                                                                                                        В этом случае нужно написать свой хук для FormIt. Пример хука для отправки email приведено в этом комментарии.
                                                                                                        1. Vasily
                                                                                                          Vasily
                                                                                                          12.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.12.2018, 13:47
                                                                                                            Что вы хотите отправить пользователю, который заполнил форму. То же самое письмо, которое вы отправляете на &emailTo?
                                                                                                            1. Vasily
                                                                                                              Vasily
                                                                                                              13.12.2018, 13:56
                                                                                                              Нет, у меня через хук FormItAutoResponder идёт другой чанк. Но даже если его не использовать и по обычному вызвать то так же в поле Вам «пусто»

                                                                                                              Хочу после успешной отправки формы пользователем получить в поле Вам его email. Как показано на img.1 (Пример с инет-магазина) с желтым рубиком, а ниже 2 изображения, которые получилось сделать у меня, загвоздка в том что у меня ещё стоят настройки smtp
                                                                                                              1. Александр Мальцев
                                                                                                                Александр Мальцев
                                                                                                                13.12.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
                                                                                                                  Vasily
                                                                                                                  13.12.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.12.2018, 15:10
                                                                                                                    Не надо ничего добавлять, попробуйте убрать лишнее. Должно и так всё работать.

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

                                                                                                            Есть ли решение этой скрипке?
                                                                                                            1. Александр Мальцев
                                                                                                              Александр Мальцев
                                                                                                              13.12.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
                                                                                                                Vasily
                                                                                                                12.12.2018, 10:26
                                                                                                                В чанке самой формы имеются поля:
                                                                                                                Array
                                                                                                                (
                                                                                                                    [name] => 
                                                                                                                    [email] => 
                                                                                                                    [phone] => 
                                                                                                                    [text] => 
                                                                                                                )
                                                                                                                
                                                                                                                Тут попробовал address заменить на email, тоже не получилось.
                                                                                                                $modx->mail->email('to', $emailTo);
                                                                                                                Или же надо в скрипку добавить $hook->getValue('sendemailto');?
                                                                                                          3. Александр Малагор
                                                                                                            Александр Малагор
                                                                                                            09.10.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.10.2018, 16:02
                                                                                                              Добрый! В чанк тоже можно передавать параметры.
                                                                                                              Например:
                                                                                                              [[$tpl.AjaxForm? &textSubmit=`Позвоните мне`]]
                                                                                                              
                                                                                                              Код чанка tpl.AjaxForm:
                                                                                                              ...
                                                                                                              <button type="submit" class="orange-button">[[+textSubmit]]</button>
                                                                                                              ...
                                                                                                              
                                                                                                              1. Александр Малагор
                                                                                                                Александр Малагор
                                                                                                                23.10.2018, 10:51
                                                                                                                Благодарю за ответ.
                                                                                                                Мне подсказали еще один способ, который позволяет передавать разные параметры из сниппета в чанки.
                                                                                                                Цитирую:
                                                                                                                1. Делаем копию сниппета. В моем случае это AjaxForm. Для примера я оставил оригинал сниппета, но лучше делать на своей копии.
                                                                                                                2. Открываем на редактирование и вставляем переменную ('Send form' < — значение по умолчанию)


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


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

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

                                                                                                              Никак неполучается распечатать её на экран после успешной отправки :(
                                                                                                              Буду Вам очень благодарен за решение :)
                                                                                                              1. Александр Мальцев
                                                                                                                Александр Мальцев
                                                                                                                04.10.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
                                                                                                                  Vasily
                                                                                                                  05.04.2019, 12:03
                                                                                                                  Попробовал вывести в alert, при этом отключив JGrowl, но вывод ID формы не срабатывает. Суть в том, что надо в AjaxForm &form=«сюда вывести в какой нибудь плейсхолдер ID сохранённой формы», надо ли ещё какой хук добавлять для этого?
                                                                                                                  1. Александр Мальцев
                                                                                                                    Александр Мальцев
                                                                                                                    11.04.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
                                                                                                                      Vasily
                                                                                                                      11.04.2019, 15:36
                                                                                                                      Спасибо Шеф, такого я ещё не пробовал. Попробую — отпишусь, но будет ли &where=`{«FormItForm.id»: «1»}` выводить номер последний формы, когда человек нажмёт на type=«submit»? (там надо же в &sortdir=`DESC` вроде &limit=`1`)
                                                                                                                      1. Александр Мальцев
                                                                                                                        Александр Мальцев
                                                                                                                        12.04.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
                                                                                                                          Vasily
                                                                                                                          12.04.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.04.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
                                                                                                                        Vasily
                                                                                                                        08.04.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
                                                                                                                      Vasily
                                                                                                                      06.10.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.10.2018, 14:45
                                                                                                                        А если заменить {$site_url} на [[++site_url]].
                                                                                                                        1. Vasily
                                                                                                                          Vasily
                                                                                                                          10.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.10.2018, 15:37
                                                                                                                            Параметр fiarFrom по умолчанию берёт имя пользователя из системного параметра emailsender. Если значение emailsender установить, равное параметру mail_smtp_user, то fiarFrom можно не устанавливать.
                                                                                                                            1. Vasily
                                                                                                                              Vasily
                                                                                                                              06.12.2018, 16:31
                                                                                                                              Всё дело было в версии php. У меня стояла 5.4, поставил 5.6 всё стало работать )

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

                                                                                                                                У меня в чанке tpl.backToUser используются строки:
                                                                                                                                {var $site_url = ('site_url' | option) | preg_replace : '#/$#' : ''}
                                                                                                                                {var $assets_url = 'assets_url' | option}
                                                                                                                                Может в них всё дело?
                                                                                                                    4. Дмитрий
                                                                                                                      Дмитрий
                                                                                                                      04.09.2018, 20:55
                                                                                                                      А как сделать и где прописывать перенаправление на другую страницу после заполнения формы клиентом (например на страницу благодарности) для создание целей в рекламных кампаниях?
                                                                                                                      1. Александр Мальцев
                                                                                                                        Александр Мальцев
                                                                                                                        06.09.2018, 14:01
                                                                                                                        id ресурса, на который нужно перейти после успешной отправки, можно реализовать с помощью параметра redirectTo:
                                                                                                                        [[!AjaxForm?
                                                                                                                          ...
                                                                                                                          &redirectTo=`5`
                                                                                                                          ...
                                                                                                                        
                                                                                                                        1. Дмитрий
                                                                                                                          Дмитрий
                                                                                                                          06.09.2018, 14:26
                                                                                                                          это я делал, не помогло
                                                                                                                          1. Александр Мальцев
                                                                                                                            Александр Мальцев
                                                                                                                            06.09.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
                                                                                                                        Binom
                                                                                                                        12.08.2018, 13:52
                                                                                                                        Добрый день, Шэф! Пытаюсь настроить форму, она у меня во всплывашке, html формы в чанке, во всплывашке контент пуст
                                                                                                                        1. Александр Мальцев
                                                                                                                          Александр Мальцев
                                                                                                                          13.08.2018, 15:31
                                                                                                                          Добрый! В чанке должна находиться только HTML форма. Вызов AjaxForm — внутри HTML кода модального окна.
                                                                                                                        2. Aleksandr Ustinov
                                                                                                                          Aleksandr Ustinov
                                                                                                                          17.07.2018, 12:09
                                                                                                                          Ещё раз Спасибо за оперативность ответов, изучаю revo совсем недавно. Работаю на evo. Возник такой вопрос
                                                                                                                          <p>Можно использовать ссылку для ответа: <a href="mailto:[+email+]?subject=RE:[+subject+]">[+email+]</a></p>
                                                                                                                          
                                                                                                                          — Это строчка из чанка-шаблона посылаемого снипеттом eForm в evo. Атеперь вопрос, как сделать тоже в рэво?
                                                                                                                          1. Александр Мальцев
                                                                                                                            Александр Мальцев
                                                                                                                            17.07.2018, 14:13
                                                                                                                            Вот так:
                                                                                                                            <p>Можно использовать ссылку для ответа: <a href="mailto:[[+emailFrom]]?subject=RE:[[+emailSubject]]">[[+emailFrom]]</a></p>
                                                                                                                            1. Aleksandr Ustinov
                                                                                                                              Aleksandr Ustinov
                                                                                                                              17.07.2018, 23:20
                                                                                                                              Ещё вопрос такой: В эво в настройках есть параметр который отвечает за «Обратный адрес e-mail:» А в рево есть такой параметр?
                                                                                                                              1. Aleksandr Ustinov
                                                                                                                                Aleksandr Ustinov
                                                                                                                                17.07.2018, 19:51
                                                                                                                                Спасиб огромное!
                                                                                                                            2. Aleksandr Ustinov
                                                                                                                              Aleksandr Ustinov
                                                                                                                              16.07.2018, 17:26
                                                                                                                              Добрый день шеф. Сделал не один проект на основе ваших уроков бутстрапа, изучаю теперь revo подскажите в уроке мы добавили поле ввода телефона а вот проверку нет. Сделал все по уроку, форма уходит без ввода номера телефона
                                                                                                                              1. Aleksandr Ustinov
                                                                                                                                Aleksandr Ustinov
                                                                                                                                16.07.2018, 14:24
                                                                                                                                Добрый день шеф. Сделал не один проект на основе ваших уроков бутстрапа, изучаю теперь revo подскажите в уроке мы добавили поле ввода телефона а вот проверку нет. Сделал все по уроку, форма уходит без ввода номера телефона
                                                                                                                                1. Александр Мальцев
                                                                                                                                  Александр Мальцев
                                                                                                                                  16.07.2018, 15:06
                                                                                                                                  Добрый! Уже был такой вопрос.
                                                                                                                                  1. Aleksandr Ustinov
                                                                                                                                    Aleksandr Ustinov
                                                                                                                                    16.07.2018, 17:40
                                                                                                                                    Спасибо
                                                                                                                                2. kalisto
                                                                                                                                  kalisto
                                                                                                                                  12.07.2018, 12:55
                                                                                                                                  Доброго часа Шеф!!!
                                                                                                                                  Прошу подсказать — в чем проблема — при вводе в поле input не могу взять уже введенные данные, форма закрывается ()в меню справа вверху заказать звонок. Как-то все время идет пляска то исчезает при вводе поля, то ждет ввода.
                                                                                                                                  http://mfgost.tw1.ru/catalog/hallways/
                                                                                                                                  1. Александр Мальцев
                                                                                                                                    Александр Мальцев
                                                                                                                                    12.07.2018, 16:48
                                                                                                                                    Добрый! Сделайте отображение формы не при наведении на «Заказать звонок», а при клике на него.
                                                                                                                                    1. kalisto
                                                                                                                                      kalisto
                                                                                                                                      18.07.2018, 10:34
                                                                                                                                      Огромное спасибо IT шеф — помогло.
                                                                                                                                  2. Алексей
                                                                                                                                    Алексей
                                                                                                                                    06.06.2018, 09:43
                                                                                                                                    Доброго дня, уточните пожалуйста, как можно вывести дату публикации сниппета formit? Тоесть на сайте сделана на formit форма вопрос-ответ, где публикуется вопрос и ответ с помощью сниппета formit. В документации к formit не нашёл (
                                                                                                                                    1. Александр Мальцев
                                                                                                                                      Александр Мальцев
                                                                                                                                      11.06.2018, 05:44
                                                                                                                                      У сниппетов нет даты публикации, такое поле только есть у ресурсов. Получить дату публикации текущего ресурса можно так: [[*publishedon]]
                                                                                                                                    2. kalisto
                                                                                                                                      kalisto
                                                                                                                                      19.04.2018, 16:55
                                                                                                                                      Здравствуйте!
                                                                                                                                      Все [[+fi.error.*]] вместо английского русский язык?
                                                                                                                                      Здесь скриншот
                                                                                                                                      1. Александр Мальцев
                                                                                                                                        Александр Мальцев
                                                                                                                                        20.04.2018, 13:40
                                                                                                                                        Здравствуйте! За язык отвечает параметр cultureKey в системных настройках.
                                                                                                                                        1. kalisto
                                                                                                                                          kalisto
                                                                                                                                          23.04.2018, 18:39
                                                                                                                                          Спасибо!
                                                                                                                                      2. Amsterdam
                                                                                                                                        Amsterdam
                                                                                                                                        18.04.2018, 06:56
                                                                                                                                        Доброго дня

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

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

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

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

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

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

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

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

                                                                                                                                                Если же форма работает без перезагрузки страницы (с помощью AJAX), то, конечно эти действия не выполняются (страница заново не формируется сервером). Эти плейсхолдеры просто не нужны.
                                                                                                                                              2. павел
                                                                                                                                                павел
                                                                                                                                                24.01.2018, 20:23
                                                                                                                                                Здравствуйте. Можете помочь с бедой? Перестали работать все формы на сайте. Выдает( произошла ошибка попробуйте позже) и т.д. Если потребуется для проверки могу скинуть сайт…
                                                                                                                                                1. Павел
                                                                                                                                                  Павел
                                                                                                                                                  17.01.2018, 12:16
                                                                                                                                                  Здравствуйте. Подскажите… на странице несколько форм (3) и при отправке с одной из них на почту поступают 4 одинаковых сообщения, как это исправить? Заранее благодарен.
                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                    Александр Мальцев
                                                                                                                                                    18.01.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.01.2018, 15:42
                                                                                                                                                      Здравствуйте. Спасибо за ответ. Делал и так но все равно шлет кучу одинаковых писем на почту, и что интересно формы 3 штуки а писем шлет 4 :)
                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                        Александр Мальцев
                                                                                                                                                        18.01.2018, 16:04
                                                                                                                                                        Проверьте ваши формы, каждая форма должна начинаться с тега form и заканчиваться им. Может что у вас с разметкой.
                                                                                                                                                        Отправку писем осуществляет сниппет FormIt. Если указан параметр submitVar, то он проверяет есть ли в массиве $_POST указанный ключ. И если есть, то обрабатывает её. А иначе нет.
                                                                                                                                                        1. Павел
                                                                                                                                                          Павел
                                                                                                                                                          18.01.2018, 16:16
                                                                                                                                                          У меня как у вас AjaxForm + FormIt
                                                                                                                                                          Вот делать?
                                                                                                                                                          [[!AjaxForm?
                                                                                                                                                          &snippet=`FormIt`
                                                                                                                                                          &submitVar=`form1`
                                                                                                                                                          Ну и кнопку потом поправить…
                                                                                                                                                          1. Павел
                                                                                                                                                            Павел
                                                                                                                                                            18.01.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.02.2018, 15:54
                                                                                                                                                              А у вас формы расположены в чанках или вместе с вызовом сниппета AjaxForm?
                                                                                                                                                  2. tristshestilap
                                                                                                                                                    tristshestilap
                                                                                                                                                    09.12.2017, 04:47
                                                                                                                                                    Шеф, прошу помощи!
                                                                                                                                                    Сделал все по статье, но при корректно заполненных полях и отправке пишет «Сообщение успешно отправлено». Письма на почте нет, а в ошибках modx
                                                                                                                                                    .../httpdocs/core/components/pdotools/model/pdotools/pdotools.class.php: 344) [pdoTools] Could not load snippet "!AddComparison"

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

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

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

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

                                                                                                                                                            Могут эти 2 явления быть связаны?
                                                                                                                                                            И где вообще искать проблему. Все перепроверил — ничего не нашел. До переноса работало…
                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                              Александр Мальцев
                                                                                                                                                              18.10.2017, 14:46
                                                                                                                                                              Здравствуйте!
                                                                                                                                                              Сложно сказать, ошибок в MODX и в логах нет? Можно попробывать переустановить компоненты.
                                                                                                                                                            2. Алекс
                                                                                                                                                              Алекс
                                                                                                                                                              10.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.10.2017, 10:16
                                                                                                                                                                Так у вас же в логах русским языком написано:
                                                                                                                                                                Невозможно запустить функцию mail.
                                                                                                                                                                Так что проблема на хостинге. ФормИт не может запустить функцию mail, попробуйте просто php скриптом ее вызвать и что нибудь отправить. И это вы смотрите в логи сайта, а что пишут логи сервера?
                                                                                                                                                                1. Алекс
                                                                                                                                                                  Алекс
                                                                                                                                                                  10.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.10.2017, 13:56
                                                                                                                                                                    Все уже перепробовали, но пишет «Форма содержит ошибки» (( HELP!
                                                                                                                                                                    1. Серега
                                                                                                                                                                      Серега
                                                                                                                                                                      10.10.2017, 18:42
                                                                                                                                                                      Так подождите, вначале вы говорили что
                                                                                                                                                                      [FormIt] Произошла ошибка при попытке отправить почту. Невозможно запустить функцию mail.
                                                                                                                                                                      Теперь вы говорите что:
                                                                                                                                                                      Все уже перепробовали, но пишет «Форма содержит ошибки»
                                                                                                                                                                      Если такое пишет то значит форма просто напросто не проходит валидацию. Код формы скиньте сюда, вызов и саму форму.
                                                                                                                                                                      1. Алекс
                                                                                                                                                                        Алекс
                                                                                                                                                                        10.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.10.2017, 21:36
                                                                                                                                                                          Но валидацию уберали, не помагает(((
                                                                                                                                                              2. Серега
                                                                                                                                                                Серега
                                                                                                                                                                08.10.2017, 14:20
                                                                                                                                                                Добрый день. Не подскажите дружит ли AjaxForm с модальными окнами Bootstrap если все делать по вашей инструкции? То бишь создаем шаблон в котором будет вызов AjaxForm и назначаем его ресурсу, но потом выводим этот ресурс в модальном окне Bootstrap. То бишь имеется ссылка с data-target=«наше модальное окно» и href=«ссылка на ресурс с AjaxForm который выводится в модальном окне».
                                                                                                                                                                Просто столкнулся с проблемой: при нажатии на кнопку submit в форме, независимо от того прошли поля валидацию или нет, страница перезагружается, соответственно никаких сообщений об ошибках или успешной отправке не видать. Подозреваю что нужно как-то запретить bootstrap-у перезагружать окно после нажатия клавиши submit, но как это сделать да еще и так чтобы сама кнопка оставалась рабочей, то есть отправляла данные AjaxForm, не приложу ума. Форму копировал прямо с вашей статьи, модальное окно и кнопка оформлены так же по статье на itchief.ru, JQuery подключено и по отдельности все работает. То есть если открыть сам ресурс с аякс формой то все нормально, и сообщения отображаются и письма уходят, как и модальное окно все загружает и нормально открывается — закрывается.
                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                  Александр Мальцев
                                                                                                                                                                  18.10.2017, 14:50
                                                                                                                                                                  Добрый день. Bootstrap может закрывать модальное окно, только если у кнопки установлен атрибут data-dismiss=«modal». Уберите его из кнопки и Bootstrap не будет закрывать модальное окно.
                                                                                                                                                                2. Nurik
                                                                                                                                                                  Nurik
                                                                                                                                                                  21.09.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.09.2017, 16:10
                                                                                                                                                                    Добрый день!
                                                                                                                                                                    Если все элементы расположены в теге form, то так:
                                                                                                                                                                    form.find(".selected").css('display', 'none');
                                                                                                                                                                    form.find(".popup__footer-button").css('background-color', '#2dcf00').text('Отправлено');
                                                                                                                                                                    
                                                                                                                                                                    Если не в форме, то тогда необходимо написать, как их найти относительно текущей формы (form).
                                                                                                                                                                    1. Nurik
                                                                                                                                                                      Nurik
                                                                                                                                                                      21.09.2017, 18:37
                                                                                                                                                                      Спасибо Шеф!
                                                                                                                                                                  2. Виталий
                                                                                                                                                                    Виталий
                                                                                                                                                                    24.08.2017, 13:03
                                                                                                                                                                    Здравствуйте! Сделал все как в примере. РАботает на страницы обратной связи ок. Теперь появилась необходимость открыть форму в сплывающем окне и чтобы все ошибки валидации и сообщения показывались в нем же и только после отправки форма закрывалась. Как это можно сделать?

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

                                                                                                                                                                    Скажите пожалуйста куда копать?
                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                      Александр Мальцев
                                                                                                                                                                      28.08.2017, 15:31
                                                                                                                                                                      Здравствуйте! Скорее всего, какие-то ошибки допустили в JavaScript. Т.к. форма должна отправляться по AJAX. Проверьте, есть ли ошибки в консоли браузера.
                                                                                                                                                                    2. Павел
                                                                                                                                                                      Павел
                                                                                                                                                                      13.08.2017, 22:56
                                                                                                                                                                      Вечер добрый шеф!!!
                                                                                                                                                                      Хотел у Вас узнать как можно сделать чтобы всплывающие уведомления (об отправке письма) не показывались в правом углу, а были над формой, как в оригинале Formit без ajax.
                                                                                                                                                                      Заранее благодарю!
                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                        Александр Мальцев
                                                                                                                                                                        14.08.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.08.2017, 00:49
                                                                                                                                                                          Спасибо вариант работает, извиняюсь за назойливость только стили пропали! Подскажите пожалуйста, как можно решить эту проблему. Заранее спасибо!



                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                            Александр Мальцев
                                                                                                                                                                            15.08.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.08.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.08.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.10.2017, 12:45
                                                                                                                                                                          Была такая проблема. Дело может быть в версии jquery (попробуйте более свежую) или как у меня менеджер случайно удалил ссылку
                                                                                                                                                                          <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
                                                                                                                                                                          и стало даже по 4 одинаковых письма приходить
                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                            Александр Мальцев
                                                                                                                                                                            08.08.2017, 15:34
                                                                                                                                                                            Не сталкивался с такой проблемой, попробуйте переустановить AjaxForm и FormIt, а также очистить содержимое каталога cache (/core/cache/).
                                                                                                                                                                          2. Андрей
                                                                                                                                                                            Андрей
                                                                                                                                                                            28.07.2017, 19:01
                                                                                                                                                                            У меня никак не получается сделать такую задачу:
                                                                                                                                                                            1. Есть форма на AjaxForm и своем сниппете. назовем его snippet_form
                                                                                                                                                                            2. Форма при отправке заносит некие данные в таблицу БД. Здесь запускается процессор, которые делает различные проверки и все если успешно, то все заносится. Это все стандартно.
                                                                                                                                                                            3. Сейчас появилось желание привязать к форме робокассу. И здесь я вижу 2 пути:
                                                                                                                                                                            а). По отправке формы записать все данные в БД, но с неким значением active = 0, а потом переадресовать из сниппета snippet_form переадресовывать пользователя на страницу оплаты. По завершении оплаты, если все успешно, то у данной записи менять active на 1. Или же переадрсеацию делать из процессора?
                                                                                                                                                                            б). При отправке формы после занесения данных, также с значением active = 0 переадресовывать пользователя на страницу, с кнопкой Оплатить.

                                                                                                                                                                            Мне более по душе вариант 3-а, но вот как сделать так, чтобы после отправки у меня происходил переход на страницу оплаты не пойму.
                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                              Александр Мальцев
                                                                                                                                                                              29.07.2017, 15:28
                                                                                                                                                                              Например, можно после получения ответа от процессора, проверить, содержит ли он ошибки. И если нет, то вызвать редирект:
                                                                                                                                                                              $modx->sendRedirect($url);
                                                                                                                                                                              1. Андрей
                                                                                                                                                                                Андрей
                                                                                                                                                                                29.07.2017, 15:42
                                                                                                                                                                                А подскажите, я при редиректе могу передать на страницу какие-либо параметры?
                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                  Александр Мальцев
                                                                                                                                                                                  29.07.2017, 16:22
                                                                                                                                                                                  Можно так:
                                                                                                                                                                                  $data = array('key1' => 'value1','key2'=>'value2');
                                                                                                                                                                                  $queryString = http_build_query($data);
                                                                                                                                                                                  $url = 'https://domain.com?'.$queryString;
                                                                                                                                                                                  $modx->sendRedirect($url);
                                                                                                                                                                                  
                                                                                                                                                                                  1. Андрей
                                                                                                                                                                                    Андрей
                                                                                                                                                                                    31.07.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.07.2017, 16:24
                                                                                                                                                                                      Да, необходимо ещё добавить дополнительный параметр:
                                                                                                                                                                                      $modx->sendRedirect($url,array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
                                                                                                                                                                                      
                                                                                                                                                                                      1. Андрей
                                                                                                                                                                                        Андрей
                                                                                                                                                                                        31.07.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.07.2017, 17:05
                                                                                                                                                                                          Да, если вы используете AJAX, тогда просто вместе с успешным ответом, верните клиенту URL, на который он должен перейти. Метод sendRedirect использовать не надо.
                                                                                                                                                                                          А в JavaScript используйте код, который вы писали выше, только не забудьте проверить успешность ответа:
                                                                                                                                                                                          if (response.success) {
                                                                                                                                                                                            document.location.href = response.url;
                                                                                                                                                                                          }
                                                                                                                                                                                          
                                                                                                                                                                                    2. Андрей
                                                                                                                                                                                      Андрей
                                                                                                                                                                                      29.07.2017, 17:50
                                                                                                                                                                                      Класс. Спасибо большое.
                                                                                                                                                                              2. kalisto
                                                                                                                                                                                kalisto
                                                                                                                                                                                30.06.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.06.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
                                                                                                                                                                                    kalisto
                                                                                                                                                                                    30.06.2017, 20:12
                                                                                                                                                                                    Александр! Все работает в случае одной формы, а на странице бывает до 8 форм на главной к примеру и не работает выбор кнопки отправить. Как исправить?
                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                      Александр Мальцев
                                                                                                                                                                                      01.07.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
                                                                                                                                                                                        kalisto
                                                                                                                                                                                        03.07.2017, 21:14
                                                                                                                                                                                        Александр! Спасибо Вам за помощь и поддержку!
                                                                                                                                                                                    2. kalisto
                                                                                                                                                                                      kalisto
                                                                                                                                                                                      30.06.2017, 16:04
                                                                                                                                                                                      Огромное спасибо Александр! Сейчас буду пробовать.
                                                                                                                                                                                  2. kalisto
                                                                                                                                                                                    kalisto
                                                                                                                                                                                    21.06.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.06.2017, 16:06
                                                                                                                                                                                      Здравствуйте. На странице калькулятора необходимо искать ошибку в JavaScript сценариях.
                                                                                                                                                                                      Данные радиокнопок у вас не отправляются на сервер, т.к. при их выборе, к ним не добавляется атрибут checked.
                                                                                                                                                                                      1. kalisto
                                                                                                                                                                                        kalisto
                                                                                                                                                                                        23.06.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.06.2017, 17:27
                                                                                                                                                                                          Если вы хотите вывести значение input в консоль, то можно так:
                                                                                                                                                                                          $('input[name="kitchen-furniture"').on('change', function() {
                                                                                                                                                                                            console.log($('input[name="kitchen-furniture"]:checked').val());
                                                                                                                                                                                          });
                                                                                                                                                                                          
                                                                                                                                                                                          Передать данные первой формы во вторую можно посредством вставки в неё скрытых полей. Т.е. написать JavaScript сценарий, который будет это выполнять при нажатии на кнопку «Узнать стоимость».
                                                                                                                                                                                          1. kalisto
                                                                                                                                                                                            kalisto
                                                                                                                                                                                            29.06.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.06.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
                                                                                                                                                                                                kalisto
                                                                                                                                                                                                30.06.2017, 16:06
                                                                                                                                                                                                Огромное спасибо Александр, сейчас все буду пробовать.
                                                                                                                                                                                            2. kalisto
                                                                                                                                                                                              kalisto
                                                                                                                                                                                              29.06.2017, 10:08
                                                                                                                                                                                              Огромное Вам спасибо, Александр!
                                                                                                                                                                                      2. Вадим
                                                                                                                                                                                        Вадим
                                                                                                                                                                                        19.06.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.06.2017, 14:30
                                                                                                                                                                                          Здравствуйте. Не знаю, ни разу с таким не сталкивался. Попробуйте очистить кэш MODX и запустить страницу в браузере в режиме инкогнито.
                                                                                                                                                                                          1. Вадим
                                                                                                                                                                                            Вадим
                                                                                                                                                                                            19.06.2017, 21:28
                                                                                                                                                                                            Куки почистил. Скорее всего, в них дело было. Спасибо.
                                                                                                                                                                                            Еще подскажите, пожалуйста, фон и цвет текста всплывающего сообщения в каком файле правится?
                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                              Александр Мальцев
                                                                                                                                                                                              20.06.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.06.2017, 01:53
                                                                                                                                                                                                Спасибо большое за помощь
                                                                                                                                                                                        2. Evgenij
                                                                                                                                                                                          Evgenij
                                                                                                                                                                                          19.05.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
                                                                                                                                                                                            Evgenij
                                                                                                                                                                                            19.05.2017, 10:51
                                                                                                                                                                                            Вопрос отпал. Все нормально.
                                                                                                                                                                                          2. Anton
                                                                                                                                                                                            Anton
                                                                                                                                                                                            17.05.2017, 12:55
                                                                                                                                                                                            Добрый день. А подскажите пожалуйста, есть ли у FormIt ограничение на количество вводимых в текст сообщения символов, по достижении которого сообщение не отправится? Можно-ли средствами modx реализовать подсчёт введённых сиволов, или для этой цели нужен отдельный js скрипт?
                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                              Александр Мальцев
                                                                                                                                                                                              17.05.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
                                                                                                                                                                                                Anton
                                                                                                                                                                                                17.05.2017, 16:15
                                                                                                                                                                                                Спасибо
                                                                                                                                                                                            2. AntonFix
                                                                                                                                                                                              AntonFix
                                                                                                                                                                                              28.04.2017, 18:27
                                                                                                                                                                                              Спасибо большое за сайт!
                                                                                                                                                                                              Скажите, пожалуйста, как сообщить пользователю что сообщение отправлено успешно на том же месте, где форма (а ее скрыть)?
                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                Александр Мальцев
                                                                                                                                                                                                01.05.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
                                                                                                                                                                                                  AntonFix
                                                                                                                                                                                                  01.05.2017, 14:54
                                                                                                                                                                                                  Спасибо большое!
                                                                                                                                                                                                  Мое мнение: такой функционал надо включить сразу в Ajaxform, как параметр (типа &jGrowl=`0`), тогда вывод ответа вместо формы.
                                                                                                                                                                                              2. lecksys
                                                                                                                                                                                                lecksys
                                                                                                                                                                                                22.04.2017, 00:21
                                                                                                                                                                                                День добрый. Делал по вашим урокам. аджакс работает, валидация отрабатывает. и письма приходят, а в формит заполненные формы не видно. Подскажите куда копать?
                                                                                                                                                                                                1. lecksys
                                                                                                                                                                                                  lecksys
                                                                                                                                                                                                  22.04.2017, 00:28
                                                                                                                                                                                                  разобрался. Название шаблона формы было на русском языке
                                                                                                                                                                                                2. Наталья
                                                                                                                                                                                                  Наталья
                                                                                                                                                                                                  12.04.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.04.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.04.2017, 13:32
                                                                                                                                                                                                      Хм, данный метод не подходит:
                                                                                                                                                                                                      1. Он не проверяет отправку формы! Если форма еще не отправлена и заполнена с ошибками — ваш скрипт срабатывает! а еще рано))))
                                                                                                                                                                                                      2. Для каждой формы на странице писать весь изначальный код в скрипте??? ооо, это не просто костыль, это еще хуже))
                                                                                                                                                                                                      Было бы лучше наверное прикрепить вот это для нужной формы:
                                                                                                                                                                                                      $(".jq-file").removeClass("changed");
                                                                                                                                                                                                      $(".jq-file__name").html('Файлы для верстки');
                                                                                                                                                                                                      
                                                                                                                                                                                                      то есть после отправки — для этой формы удалить класс .changed и заменить текст в контейнере…
                                                                                                                                                                                                      Но опять же — могу объяснить на пальцах что хочу — а как применить это чтобы все работало на php или в скрипте — не знаю!
                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                        Александр Мальцев
                                                                                                                                                                                                        12.04.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.04.2017, 16:42
                                                                                                                                                                                                          Спасибо огромное! Заработало!!!
                                                                                                                                                                                                  2. Юрий
                                                                                                                                                                                                    Юрий
                                                                                                                                                                                                    31.03.2017, 11:48
                                                                                                                                                                                                    Здравствуйте, подскажите пожалуйста. Такая ситуация, есть 10 услуг на ленде (без отдельных страниц, просто перечень itchief.ru/assets/uploadify/a/1/b/a1bee03a48ef4fa1333ef0fec3926955.png ), под каждой есть кнопка со всплывающей формой, для того, чтобы определить из какой услуги пришла заявка, нужно создавать под каждую услугу свою форму с темой (чтобы за счет темы определить)/
                                                                                                                                                                                                    Можно ли сделать так, чтобы в тему например подтягивалось из названия услуги или любого другого элемента в другой ситуации, например если этот элемент выводится через ТВ поле [[*tvname]]?
                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                      Александр Мальцев
                                                                                                                                                                                                      01.04.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.04.2017, 17:13
                                                                                                                                                                                                        Спасибо, с этим немного разобрался! Есть еще такие вопросы:
                                                                                                                                                                                                        1. А как например быть в случае с открытой формой? Предположим у формы есть заголовок или у блока в котором находится форма, можно ли в таком случае подтянуть название формы скриптом? Например название формы <div class=«bl-1-titl-1» ТОЛЬКО СЕЙЧАС </div (не получается в комменте нормально вставить теги, у Вас наверное очистка стоит). Чтобы это название пришло в письме.
                                                                                                                                                                                                        2. Вы оставляете значение value="" пустым, можно его вообще в таком случае удалять для всех полей, если они не заполняются?
                                                                                                                                                                                                        3. Можно ли как то сделать чтобы из поля &emailFrom=`mymail@mail.ru` подтягивался не имейл а название компании к примеру. Потому что не оч. смотрится во входящих просто имейл отправителя, по нормальному должно указываться название отправителя, например «Компания Бла-бла»
                                                                                                                                                                                                        4. Как автоматически отправлять благодарственное письмо клиенту (Простой вариант, Спасибо за Ваше сообщение, наш менеджер свяжется с Вами как можно быстрее.) и как создать шаблон письма в таком случае… у разных форм, могут быть разные благодарственные письма
                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                          Александр Мальцев
                                                                                                                                                                                                          05.04.2017, 15:39
                                                                                                                                                                                                          Название формы можно добавлять и скриптом JavaScript. Т.е. делайте, так как вам нравится.
                                                                                                                                                                                                          Для указания названия компании используйте параметр emailFromName:
                                                                                                                                                                                                          &emailFromName=`Название компании`
                                                                                                                                                                                                          
                                                                                                                                                                                                          Для отправки благодарственного скрипта необходимо создать хук. Как это сделать, можно посмотреть в этом комментарии:
                                                                                                                                                                                                          itchief.ru/lessons/modx-revo/modx-contact-form#comment-3652
                                                                                                                                                                                                          Если вам необходимо отдавать разные благодарственные письма, то вам необходимо, например, создать ассоциативный массив в этом хуке. В этом массиве назначить каждой форме соответствующий шаблон. После этого определять какая эта форма и соответственно отдавать тот или иной шаблон письма.
                                                                                                                                                                                                          1. Юрий
                                                                                                                                                                                                            Юрий
                                                                                                                                                                                                            05.04.2017, 16:54
                                                                                                                                                                                                            С названием понял, спасибо большое). Со скриптом так и не разобрался как подтянуть название формы…
                                                                                                                                                                                                            Насчет itchief.ru/lessons/modx-revo/modx-contact-form#comment-3652, не получается, в том примере, что Вы сбросили, там с чекбоксом, а у меня без и я не пойму как сделать…
                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                              Александр Мальцев
                                                                                                                                                                                                              08.04.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.03.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.04.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.04.2017, 00:08
                                                                                                                                                                                                          Благодарю за совет, но увы… Попробовал сначала просто обновить файл jquery.jgrowl.min.js (раньше это тоже делал), потом снес старую версию AjaxForm, поставил последнюю 1.1.8, как было рекомендовано. Но картинка все та же: со старыми версиями jQuery работает, с новой — нет. Ошибки консоли те же. Есть еще варианты куда обратить внимание?
                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                            Александр Мальцев
                                                                                                                                                                                                            02.04.2017, 02:01
                                                                                                                                                                                                            Попробуйте очистить кэш в MODX и открыть страницу в режиме инкогнито. Скорее всего у вас используются закэшированные браузером версии файлов.
                                                                                                                                                                                                            Проверил, на тестовом сайте проблем нет. Версия AjaxForm 1.1.8 (jGrowl 1.4.5) со связкой с jQuery 3.2.0. Всё работает отлично.
                                                                                                                                                                                                            1. Ник
                                                                                                                                                                                                              Ник
                                                                                                                                                                                                              02.04.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.04.2017, 02:03
                                                                                                                                                                                                                jquery-migrate содержит просто дополнительные функции 1 и 2 версии, которые в 3 версии jQuery были удалены.
                                                                                                                                                                                                                1. Ник
                                                                                                                                                                                                                  Ник
                                                                                                                                                                                                                  02.04.2017, 02:31
                                                                                                                                                                                                                  Александр, спасибо за помощь! Все заработало корректно, когда убрал сниппет Orphoman. Он у меня стоял в head.
                                                                                                                                                                                                        2. Антон
                                                                                                                                                                                                          Антон
                                                                                                                                                                                                          30.03.2017, 11:24
                                                                                                                                                                                                          Привет, отличный Вас блог. У меня возник вопрос по аякс форме, все сделал по уроку вашему, но при отправке сообщения ругается на адресс почты который вводится в форме, а в журнале ошибок пишет: core/components/formit/model/formit/fihooks.class.php: 570) [FormIt] An error occurred while trying to send the email. Пустое сообщение
                                                                                                                                                                                                          Как решить проблему?)
                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                            Александр Мальцев
                                                                                                                                                                                                            30.03.2017, 16:40
                                                                                                                                                                                                            Привет, спасибо. Проверьте, указал ли ты в вызове сниппета AjaxForm (FormIt) параметр emailTpl:
                                                                                                                                                                                                            &emailTpl=`tpl.email`
                                                                                                                                                                                                            
                                                                                                                                                                                                            А также наличия чанка, указанного в параметре. Ну и содержимого в нём.
                                                                                                                                                                                                          2. Kira
                                                                                                                                                                                                            Kira
                                                                                                                                                                                                            22.03.2017, 16:57
                                                                                                                                                                                                            Здравствуйте!
                                                                                                                                                                                                            В комментариях уже рассматривался вопрос отправки формы на разные почтовые адреса в зависимости от одного из выбранных параметров (на примере radio кнопок). Описанный в ответе подход понятен, но можно ли это как-то реализовать без прописывания почты напрямую в javascript, где-то в более глубокой обработке?
                                                                                                                                                                                                            Спасибо
                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                              Александр Мальцев
                                                                                                                                                                                                              24.03.2017, 15:55
                                                                                                                                                                                                              Здравствуйте! В этом случае их можно просто указать через запятую прямо в параметрах сниппета. Как это сделать можете посмотреть в этом комментарии: itchief.ru/lessons/modx-revo/modx-contact-form#comment-3122
                                                                                                                                                                                                              1. Kira
                                                                                                                                                                                                                Kira
                                                                                                                                                                                                                27.03.2017, 16:24
                                                                                                                                                                                                                И еще вопрос:
                                                                                                                                                                                                                для параметра &emailTo получается подставить значения из поля ввода, но если так же сделать для &emailFrom — то письмо не приходит
                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                  Александр Мальцев
                                                                                                                                                                                                                  27.03.2017, 17:32
                                                                                                                                                                                                                  В &emailFrom указывается адрес от имени которого будет отправляться письмо. Если указать какой-то любой адрес (не соответствующий адресу домена сайта), то хостер вам просто это не позволит сделать (его не пропустит фильтр).
                                                                                                                                                                                                                2. Kira
                                                                                                                                                                                                                  Kira
                                                                                                                                                                                                                  27.03.2017, 10:57
                                                                                                                                                                                                                  Да, перечисление почтовых адресов я знаю. Но нужно не отправить сразу на несколько, а отправить на тот или иной адрес в зависимости от выбранного значения из списка select.
                                                                                                                                                                                                              2. Михаил
                                                                                                                                                                                                                Михаил
                                                                                                                                                                                                                28.02.2017, 23:43
                                                                                                                                                                                                                Здравствуйте. Спасибо за блог. Очень помогает. Скажите, а как сделать проверку поля с телефоном? Цифры, пробелы, +-, ( ) или исключить буквы?
                                                                                                                                                                                                                Нашел только: regexp= но как правильно задать условие?
                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                  Александр Мальцев
                                                                                                                                                                                                                  07.03.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
                                                                                                                                                                                                                  Sergey
                                                                                                                                                                                                                  28.02.2017, 15:57
                                                                                                                                                                                                                  Здравствуйте. Подскажите пожалуйста, как сделать, чтобы в сообщение которое приходит на почту, было указано название страницы?
                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                    Александр Мальцев
                                                                                                                                                                                                                    07.03.2017, 15:42
                                                                                                                                                                                                                    Добавить в HTML форму скрытое поле:
                                                                                                                                                                                                                    <input type="hidden" name="url" value="">
                                                                                                                                                                                                                    
                                                                                                                                                                                                                    Добавить на страницу скрипт, который будет задавать значение вышеуказанного поля:
                                                                                                                                                                                                                    <script>
                                                                                                                                                                                                                    $(function(){
                                                                                                                                                                                                                        $('[name="url"]').val(window.location);
                                                                                                                                                                                                                    });
                                                                                                                                                                                                                    </script>
                                                                                                                                                                                                                    В чанке, используемом для формирования тела письма вставить строчку:
                                                                                                                                                                                                                    <p>Адрес страницы: [[+url]]</p>
                                                                                                                                                                                                                    
                                                                                                                                                                                                                  2. Демьян Золин
                                                                                                                                                                                                                    Демьян Золин
                                                                                                                                                                                                                    04.01.2017, 18:48
                                                                                                                                                                                                                    Здравствуйте.
                                                                                                                                                                                                                    На kprf-omsk.ru/priyomnaya форма обратной связи с аяксом работает.
                                                                                                                                                                                                                    На astrotsentr.su просто [[!FormIt?… ]] отправляет, а [[!AjaxForm?… ]] нет. Сообщения об ошибке валидации есть, сообщение об отправке есть. А сообщения ни в почте, ни в панеле управления нет.
                                                                                                                                                                                                                    Первый сайт в корне.
                                                                                                                                                                                                                    На втором сайте тема themePure.
                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                      Александр Мальцев
                                                                                                                                                                                                                      06.01.2017, 07:06
                                                                                                                                                                                                                      Здравствуйте. Для работы AjaxForm необходимо наличие подключённой библиотеки jQuery. Всё работу по отправке формы на сервер выполняет скрипт default.js, который расположен по умолчанию в /assets/components/ajaxform/js. Проверьте, возникают ли у вас ошибки при работе с данным скриптом.
                                                                                                                                                                                                                      Если FormIt отправляет, то и AjaxForm должен работать. Т.к. по умолчанию он просто является AJAX обёрткой данного сниппета.
                                                                                                                                                                                                                    2. Зора
                                                                                                                                                                                                                      Зора
                                                                                                                                                                                                                      28.12.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.12.2016, 11:31
                                                                                                                                                                                                                        опечатка $emailTo=`req@multidelo.ru`
                                                                                                                                                                                                                        смена на &emailTo=`req@multidelo.ru`не меняет ничего, он все равно ругается на поле емайл
                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                          Александр Мальцев
                                                                                                                                                                                                                          28.12.2016, 13:42
                                                                                                                                                                                                                          Здравствуйте. Попробуйте проверить, имеется ли у вас чанк tpl.email и подключена ли библиотека jQuery. После исправления опечатки, какая у вас сейчас выводится ошибка? А также есть ли у вас запись в диалоговом окне FormIt (Приложение -> FormIt)?
                                                                                                                                                                                                                          1. Зора
                                                                                                                                                                                                                            Зора
                                                                                                                                                                                                                            28.12.2016, 13:49
                                                                                                                                                                                                                            Чанк имеется. Библиотека тоже подключается. Формит записывает все данные к себе, даже если валидация красная.
                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                              Александр Мальцев
                                                                                                                                                                                                                              28.12.2016, 14:21
                                                                                                                                                                                                                              Попробуйте сначала настроить форму только с помощью FormIt, т.е. без AjaxForm.
                                                                                                                                                                                                                              1. Зора
                                                                                                                                                                                                                                Зора
                                                                                                                                                                                                                                28.12.2016, 15:01
                                                                                                                                                                                                                                Без аякса формит стал отправлять, если убрать validate из вызова. Однако, если заполнить поле email не происходит редикректа на спасибо-страницу и, следовательно, отправки письма. Если оставить его пустым, то письмо приходит и форма отправляется.
                                                                                                                                                                                                                      2. Елена
                                                                                                                                                                                                                        Елена
                                                                                                                                                                                                                        18.12.2016, 09:40
                                                                                                                                                                                                                        Добрый день!
                                                                                                                                                                                                                        Спасибо большое за Ваши уроки!
                                                                                                                                                                                                                        Подскажите, пожалуйста, каким образом в данной форме можно реализовать отправку благодарственного письма отправителю?
                                                                                                                                                                                                                        Например, пользователь заполняет форму.
                                                                                                                                                                                                                        Снизу формы есть галочка «Отправить копию письма мне» и поле для ввода адреса эл. почты.
                                                                                                                                                                                                                        После нажатия «Отправить» он получает письмо с отправленными данными и плюс дополнительный текст «Спасибо, что отправили заявку… „
                                                                                                                                                                                                                        Заранее благодарю!
                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                          Александр Мальцев
                                                                                                                                                                                                                          19.12.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.12.2016, 14:47
                                                                                                                                                                                                                            Спасибо! Попробую реализовать!
                                                                                                                                                                                                                        2. Василий
                                                                                                                                                                                                                          Василий
                                                                                                                                                                                                                          08.11.2016, 12:21
                                                                                                                                                                                                                          Доброго дня, Шеф!
                                                                                                                                                                                                                          Вопрос не по теме немного.
                                                                                                                                                                                                                          Можно ли в modx по получении email запускать какой-то сниппет, своего рода обработчик почты?
                                                                                                                                                                                                                          Если можно, то как это реализовать? Я не представляю
                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                            Александр Мальцев
                                                                                                                                                                                                                            08.11.2016, 13:13
                                                                                                                                                                                                                            Здравствуйте. Необходимо написать свой хук и указать его в качестве параметра сниппета FormIt hooks.
                                                                                                                                                                                                                            1. Василий
                                                                                                                                                                                                                              Василий
                                                                                                                                                                                                                              10.11.2016, 09:12
                                                                                                                                                                                                                              Не встречались готовые решения? Откровенно говоря, программист из меня никакой((
                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                Александр Мальцев
                                                                                                                                                                                                                                12.11.2016, 07:04
                                                                                                                                                                                                                                Это зависит от того, что вы хотите сделать. Может быть, есть и готовые примеры…
                                                                                                                                                                                                                                Общий принцип такой:
                                                                                                                                                                                                                                1. Создаёте новый сниппет.
                                                                                                                                                                                                                                2. Для получения email используйте в нём следующую строчку:
                                                                                                                                                                                                                                $email = $hook->getValue('email');
                                                                                                                                                                                                                                
                                                                                                                                                                                                                                3. Далее пишите код, клоторый будет выполнять необходимые действия.
                                                                                                                                                                                                                                4. Подключаете сниппет к вызову сниппета FormIt как хук (hook):
                                                                                                                                                                                                                                [[!FormIt?
                                                                                                                                                                                                                                  &hooks=`myhook,email`
                                                                                                                                                                                                                                  ...
                                                                                                                                                                                                                                
                                                                                                                                                                                                                          2. qurusan
                                                                                                                                                                                                                            qurusan
                                                                                                                                                                                                                            11.10.2016, 10:06
                                                                                                                                                                                                                            Вопрос посложнее. Как подключить несколько форм на странице через аяксформ, при этом в каждой форме находится reCaptcha от гугл? Существует ли такой способ вообще?
                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                              Александр Мальцев
                                                                                                                                                                                                                              11.10.2016, 11:26
                                                                                                                                                                                                                              Да, Google reCaptcha позволяет это сделать. Но, не знаю поддерживают ли какие-то компоненты MODX (например, ReCaptchaV2) это. Надо, проверить…

                                                                                                                                                                                                                              Если нет, то это придётся реализовать самостоятельно. Сам принцип как это сделать можно посмотреть здесь: itchief.ru/lessons/php/how-to-install-recaptcha-on-website#comment-2852
                                                                                                                                                                                                                            2. kalisto
                                                                                                                                                                                                                              kalisto
                                                                                                                                                                                                                              27.09.2016, 08:28
                                                                                                                                                                                                                              Александр! Каким образом включить задержку всплывающего сообщения или вообще включить возможность закрытия попапа самому поль-лю?
                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                Александр Мальцев
                                                                                                                                                                                                                                27.09.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
                                                                                                                                                                                                                                  kalisto
                                                                                                                                                                                                                                  27.09.2016, 12:02
                                                                                                                                                                                                                                  Спасибо Вам большое!!!
                                                                                                                                                                                                                              2. Natalia
                                                                                                                                                                                                                                Natalia
                                                                                                                                                                                                                                26.09.2016, 20:45
                                                                                                                                                                                                                                Добрый день,

                                                                                                                                                                                                                                у меня сайт на openserver. Сделала форму по Вашим инструкциям и при заполнении и отправке заполненной формы не выходит сообщение что сообщение успешно отправлено/не отправлено и соответственно письма на ящик не приходят. В админке modx отправленные сообщения есть. В openserver настройку на отправку писем с ящика сделала и все равно без толку. Пожалуйста, можете подсказать в каком направлении искать решение проблемы, Спасибо
                                                                                                                                                                                                                                1. kalisto
                                                                                                                                                                                                                                  kalisto
                                                                                                                                                                                                                                  27.09.2016, 08:26
                                                                                                                                                                                                                                  Письма в openserver смотрите в папке ваш_диск:\OpenServer\userdata\temp\email — они туда складываются в виде *.txt файла
                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                    Александр Мальцев
                                                                                                                                                                                                                                    27.09.2016, 00:39
                                                                                                                                                                                                                                    Здравствуйте. Насчёт openserver не подскажу, т.к. с ним не знаком. Но подобный локальный веб-сервер, например, denwer (денвер), их не отправляет, а использует заглушку (т.е. складывает их в директорию sendmail в виде файлов). Скорее тоже самое делает и openserver. Если Вы хотите по-настоящему отправлять почту, то необходимо использовать реальный веб-сервер.
                                                                                                                                                                                                                                    1. Natalia
                                                                                                                                                                                                                                      Natalia
                                                                                                                                                                                                                                      27.09.2016, 10:43
                                                                                                                                                                                                                                      Александр, спасибо за ответ, а в денвере при отправке формы появляется окно об успешной отправке? Дело в том, что я настроила в openserver отправку писем через smtp и по идее письма должны отправляться. Вот я и пытаюсь понять, то ли у меня ошибка в форме, то ли не получается настроить сервер на отправку почты
                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                        Александр Мальцев
                                                                                                                                                                                                                                        27.09.2016, 13:22
                                                                                                                                                                                                                                        В Denwer появляются сообщение об успешной отправке, но письма отправляются в файл. Т.е. они складываются в директорию !sendmail, которая находится в каталоге tmp. В Denwer нет Mail Server, поэтому они физически не могут быть отправлены на реальную почту. В openserver тоже наверно нет Mail Server. Чтобы это осуществить необходимо либо установить сервер, либо использовать удалённый сервер. Посмотрите может в настройках openserver есть возможность выбрать использование удалённого SMTP сервера. Если есть, то сделайте необходимые настройки и перезапустите openserver.
                                                                                                                                                                                                                                        Чтобы не мучить FormIt сначала попробуйте использовать дополнение для MODX Revolution QuickEmail. Он предназначен для проверки отправки сообщений на почту. Как только настроите почту, перейдёте к FormIt.
                                                                                                                                                                                                                                  2. Kirill
                                                                                                                                                                                                                                    Kirill
                                                                                                                                                                                                                                    01.09.2016, 19:36
                                                                                                                                                                                                                                    Александр добрый день! Подскажите пожалуйста, бьюсь 3-ий день как сделать, чтобы письмо с формы отправлялось разным получателям. Например у меня есть radio
                                                                                                                                                                                                                                    Черный белый и красный
                                                                                                                                                                                                                                    При выборе разного цвета уходит на разные почты
                                                                                                                                                                                                                                    И также чтобы в почте в пиьме цвета остались
                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                      Александр Мальцев
                                                                                                                                                                                                                                      03.09.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
                                                                                                                                                                                                                                      Growing
                                                                                                                                                                                                                                      21.08.2016, 12:23
                                                                                                                                                                                                                                      Доброго времени суток, Александр!
                                                                                                                                                                                                                                      Спасибо за урок, очень доступно.
                                                                                                                                                                                                                                      Подскажите пожалуйста, если форма построена на связке ajax+formIt, как можно передать значение селектбокса из одной формы в другую? Т.е. необходимо сделать так, чтобы выбранный в одной форме после отправки первой формы стал активным во второй?
                                                                                                                                                                                                                                      В сообществе обсуждения подобных решений не нашёл…
                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                        Александр Мальцев
                                                                                                                                                                                                                                        23.08.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
                                                                                                                                                                                                                                          Growing
                                                                                                                                                                                                                                          23.08.2016, 15:10
                                                                                                                                                                                                                                          Принцип дошёл, как всегда всё доступно)
                                                                                                                                                                                                                                          Спасибо, Шеф.
                                                                                                                                                                                                                                      2. Игорь
                                                                                                                                                                                                                                        Игорь
                                                                                                                                                                                                                                        16.08.2016, 22:40
                                                                                                                                                                                                                                        Здравствуйте.
                                                                                                                                                                                                                                        Может Вы сможете мне помочь? голову сломал уже.
                                                                                                                                                                                                                                        Поставил обратную связь с помощью ajaxForm письма отправляются, но при этом перезагружается страница и не появляются оповещения об успешном отправлении. Неудобно тем что форма внизу сайта, а после перезагрузки возвращается вверх.
                                                                                                                                                                                                                                        в консоли ошибка default.js:11 Uncaught TypeError: $ is not a function
                                                                                                                                                                                                                                        1. Евгений
                                                                                                                                                                                                                                          Евгений
                                                                                                                                                                                                                                          16.08.2016, 23:00
                                                                                                                                                                                                                                          Эта ошибка означает, что вы вызываете jquery до того, как его подключили. Проверьте очерёдность подключения скриптов. Что бы страница не обновлялась нужно сделать следущее: повесим на форму id=«send_form», предотвратить обновление можно например так
                                                                                                                                                                                                                                          $(function(){
                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                          $('#send_form').on('submit', function(e){
                                                                                                                                                                                                                                          	e.preventDefault();
                                                                                                                                                                                                                                          	тут ваш код - обработчик
                                                                                                                                                                                                                                          });	
                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                          });
                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                        2. Игорь Денисов
                                                                                                                                                                                                                                          Игорь Денисов
                                                                                                                                                                                                                                          15.08.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.08.2016, 13:11
                                                                                                                                                                                                                                            Это ошибка означает, что у Вас на хостинге не поддерживается функция mail. Библиотека PHPMailer работает на основе функции mail.
                                                                                                                                                                                                                                          2. Игорь Денисов
                                                                                                                                                                                                                                            Игорь Денисов
                                                                                                                                                                                                                                            31.07.2016, 11:49
                                                                                                                                                                                                                                            Здравствуйте Александр!
                                                                                                                                                                                                                                            Наверное, Вы лишний раз здесь вставили email:
                                                                                                                                                                                                                                            [[!AjaxForm?
                                                                                                                                                                                                                                                &validate=`name:minLength=^2^,email:email:required,message:minLength=^10^`
                                                                                                                                                                                                                                            ]]
                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                            Или я что-то путаю?)
                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                              Александр Мальцев
                                                                                                                                                                                                                                              31.07.2016, 12:41
                                                                                                                                                                                                                                              Здравствуйте, Игорь.
                                                                                                                                                                                                                                              Первый email — это имя поля. Второй — это валидатор, который проверяет имеет ли это поле валидный email адрес. Третии параметр (required) — указывает, что это поле является обязательным, т.е. не может содержать пустое значение.
                                                                                                                                                                                                                                              1. Игорь Денисов
                                                                                                                                                                                                                                                Игорь Денисов
                                                                                                                                                                                                                                                01.08.2016, 07:43
                                                                                                                                                                                                                                                Извиняюсь… думал опечатка ))
                                                                                                                                                                                                                                                Спасибо Вам, сейчас у себя тоже поправлю!
                                                                                                                                                                                                                                            2. Виталий
                                                                                                                                                                                                                                              Виталий
                                                                                                                                                                                                                                              28.07.2016, 11:56
                                                                                                                                                                                                                                              Здравствуйте, Александр.

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

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

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

                                                                                                                                                                                                                                              Спасибо!
                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                Александр Мальцев
                                                                                                                                                                                                                                                28.07.2016, 13:53
                                                                                                                                                                                                                                                Это делается очень просто. Только Вы не можете оставить её на месте, необходимо прокрутить до неё. Для этого необходимо нужному элементу создать идентификатор (id) и указать его в параметре action через #:
                                                                                                                                                                                                                                                <form id="formit" action="[[~[[*id]]]]#formit" method="post" class="form">
                                                                                                                                                                                                                                                ...
                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                Для решения второго вопроса лучше использовать AJAX. Без него только перезагрузка. Единственное что можно сделать — это прокрутить до нужного места на странице и открыть модальное окно с помощью JavaScript. Но данное решение будет выглядеть для посетителя как-то странно, поэтому его лучше не использовать.
                                                                                                                                                                                                                                                1. Виталий
                                                                                                                                                                                                                                                  Виталий
                                                                                                                                                                                                                                                  28.07.2016, 14:21
                                                                                                                                                                                                                                                  Александр, огромное спасибо за оперативный ответ. Со статичной формой все получилось, сейчас модальной займусь.
                                                                                                                                                                                                                                                  Отдельное огромное спасибо за сайт вообще. Сейчас активно осваиваю Bootstrap3 и где-то 70-80% информации беру именно с Вашего сайта.
                                                                                                                                                                                                                                              2. Алексей
                                                                                                                                                                                                                                                Алексей
                                                                                                                                                                                                                                                24.07.2016, 21:17
                                                                                                                                                                                                                                                Здравствуйте Александр.
                                                                                                                                                                                                                                                Вопрос не совсем по теме, но очень для меня актуальный.
                                                                                                                                                                                                                                                Подскажите, как вывести на сайте чекбокс, при активации которого должно передаваться значение в дополнительное TV (я уже создал TV с значениями: значение==up и значением по умолчаниюзначение==down) и менять его значение которое затем должно передаваться в шаблоны и чанки изменяя значения в TV. И соответственно, измененные значения TV должны повлечь изменение в выводимых на фронтэнд данных. И нужно, чтоб отправка данных в TV происходила сразу после активации чакбокса или селекта, без кнопки «отправить форму».
                                                                                                                                                                                                                                                Спасибо.
                                                                                                                                                                                                                                                1. Алексей
                                                                                                                                                                                                                                                  Алексей
                                                                                                                                                                                                                                                  10.07.2016, 09:40
                                                                                                                                                                                                                                                  Добрый день! Форму подключил, все работает. Только, возникла проблема со спамом. Подскажите как защитить форму от спам роботов. Капчу ставить не вариант. И еще вопрос по теме — спам также лезет в виде СМС, (номер телефона реализован через ссылку «tel»). Как защититься? Спасибо!
                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                    Александр Мальцев
                                                                                                                                                                                                                                                    10.07.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.07.2016, 16:06
                                                                                                                                                                                                                                                      Спасибо. Дополнения внес буду надеяться, что защитит.
                                                                                                                                                                                                                                                      А телефон сделан так:
                                                                                                                                                                                                                                                      <a href="tel:+788888888"> ПОЗВОНИТЬ </a>
                                                                                                                                                                                                                                                      на мобильных устройствах при нажатии набирается номер. Вот, я думаю через эту ссылку и приходят СМС. Как закрыть ссылку от роботов не знаю. Подскажите решение.
                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                        Александр Мальцев
                                                                                                                                                                                                                                                        13.07.2016, 12:48
                                                                                                                                                                                                                                                        Попробуйте убрать номер телефона из HTML. Т.е. сделать как-то так:
                                                                                                                                                                                                                                                        <a id="tel" href="#"> ПОЗВОНИТЬ </a>
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        А при нажатии на ссылку, перехватывать это событие с помощью JavaScript (jQuery) и подставлять в неё необходимый номер телефона. Дополнительно номер телефона можно закодировать с помощью btoa:
                                                                                                                                                                                                                                                        $('#tel').click(function(){
                                                                                                                                                                                                                                                          $(this).attr('href',window.atob('dGVsOis3ODg4ODg4ODg='));
                                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                        1. Алексей
                                                                                                                                                                                                                                                          Алексей
                                                                                                                                                                                                                                                          13.07.2016, 17:39
                                                                                                                                                                                                                                                          Большое спасибо за ответ. Буду пробовать
                                                                                                                                                                                                                                                  2. Владимир
                                                                                                                                                                                                                                                    Владимир
                                                                                                                                                                                                                                                    16.06.2016, 16:21
                                                                                                                                                                                                                                                    а в сниппетах formIt и AjaxForm ее нет? Тогда как ее подключить?
                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                      Александр Мальцев
                                                                                                                                                                                                                                                      16.06.2016, 23:43
                                                                                                                                                                                                                                                      Её подключать не надо. Вы ж не настраиваете серевер, а покупаете хостинг. Посмотрите поддерживает ли хостинг библиотеку phpMailer и функцию mail.
                                                                                                                                                                                                                                                      1. Владимир
                                                                                                                                                                                                                                                        Владимир
                                                                                                                                                                                                                                                        17.06.2016, 19:11
                                                                                                                                                                                                                                                        Спасибо! Причина нашлась. В техподдержке ответили, что с одного из сайтов аккаунта была обнаружена рассылка спама, поэтому отключили функцию. Надо проверить на вирусы и вредоносный код.
                                                                                                                                                                                                                                                    2. Владимир
                                                                                                                                                                                                                                                      Владимир
                                                                                                                                                                                                                                                      13.06.2016, 20:05
                                                                                                                                                                                                                                                      Версия MODX Revolution 2.5.0-pl
                                                                                                                                                                                                                                                      Пробовал несколько раз с разными формами отправки.
                                                                                                                                                                                                                                                      Делал на Openserver ошибки нет, но и писем тоже ))
                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                        Александр Мальцев
                                                                                                                                                                                                                                                        14.06.2016, 12:45
                                                                                                                                                                                                                                                        Надо проверять на сервере. На openserver может использоваться заглушка (например, на Denwer все отправленные письма сохраняются в виде файлов с расширением eml в каталог tmp/!sendmail/..).
                                                                                                                                                                                                                                                        Сначала лучше проверить работает ли вообще отправка почты. Для этого можно воспользоваться сниппетом QuickEmail.
                                                                                                                                                                                                                                                        1. Владимир
                                                                                                                                                                                                                                                          Владимир
                                                                                                                                                                                                                                                          16.06.2016, 13:40
                                                                                                                                                                                                                                                          Установил на сервере сниппет QuickEmail. Вызываю кодом:
                                                                                                                                                                                                                                                          [[!QuickEmail?
                                                                                                                                                                                                                                                          	&debug=`1`
                                                                                                                                                                                                                                                          	&to=`твойEmail`
                                                                                                                                                                                                                                                          ]]
                                                                                                                                                                                                                                                          На страничке пишет:
                                                                                                                                                                                                                                                          Send Failed
                                                                                                                                                                                                                                                          Mailer error info: Невозможно запустить функцию mail.
                                                                                                                                                                                                                                                          Я новичок в modx. Так думаю настройки почты не сделаны. Где их делать?
                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                            Александр Мальцев
                                                                                                                                                                                                                                                            16.06.2016, 14:00
                                                                                                                                                                                                                                                            Тут дело не в настройках. У Вас на сервере нет php-функции mail с помощью которой можно было бы отправлять почту.
                                                                                                                                                                                                                                                            1. Владимир
                                                                                                                                                                                                                                                              Владимир
                                                                                                                                                                                                                                                              16.06.2016, 18:12
                                                                                                                                                                                                                                                              Это надо в техподдержку хостинга обращаться?
                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                Александр Мальцев
                                                                                                                                                                                                                                                                16.06.2016, 23:36
                                                                                                                                                                                                                                                                Да.
                                                                                                                                                                                                                                                      2. Владимир
                                                                                                                                                                                                                                                        Владимир
                                                                                                                                                                                                                                                        12.06.2016, 19:36
                                                                                                                                                                                                                                                        Добрый день. Сделал форму отправки через AjaxForm все, как сказано. Выдает сообщение «форма содержит ошибку» и в поле email адрес подсвечивается красным. Указывал емейл рабочий свой. в форме emailTo указал емейл созданный на хостинге. В чем может быть проблема?
                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                          Александр Мальцев
                                                                                                                                                                                                                                                          14.06.2016, 12:50
                                                                                                                                                                                                                                                          В emailTo необходимо указывать адрес куда Вы хотите отправить. Для начало проверьте, вообще работает ли отправка почты с сайта на Вашем хостинге.
                                                                                                                                                                                                                                                          1. Владислав
                                                                                                                                                                                                                                                            Владислав
                                                                                                                                                                                                                                                            06.10.2016, 12:21
                                                                                                                                                                                                                                                            здравствуйте, уважаемый Александр!
                                                                                                                                                                                                                                                            Подскажите пожалуйста, что необходимо изменить в вызове формы, чтобы письмо переадресовывалось на несколько адресов? Спасибо.
                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                              Александр Мальцев
                                                                                                                                                                                                                                                              06.10.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.06.2016, 07:06
                                                                                                                                                                                                                                                          Добрый день.
                                                                                                                                                                                                                                                          Делаю всё по вашему уроку, но у меня при правильном заполнении формы, при нажатии отправить поля и кнопки становятся не активными, и форма виснет, вверху справа никаких сообщений не выходит, только рядом с полями если не заполнено. В head страницы AjaxForm не прописывает assets/components/ajaxform/js/default.js прописывает только файл стилей, так и должно быть? пробывал в ручную указать default.js — не помогло. В чём может быть дело?
                                                                                                                                                                                                                                                          1. Александр
                                                                                                                                                                                                                                                            Александр
                                                                                                                                                                                                                                                            02.06.2016, 13:29
                                                                                                                                                                                                                                                            Проверяйте что делали, потому что я 5 минут назад по этой инструкции сделал форму и всё работает.
                                                                                                                                                                                                                                                          2. Anton
                                                                                                                                                                                                                                                            Anton
                                                                                                                                                                                                                                                            12.05.2016, 08:20
                                                                                                                                                                                                                                                            Здравствуйте, давно читаю ваш сайт, очень много полезной информации, спасибо за ваш труд) Такой вопрос подскажите как реализовать связанные списки при изпользовании Formit, например в первом списке выбираем город, а во втором списке выводится список районов этого города?! Использую просто вызов формит на странице без ajax. Спасибо.
                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                              Александр Мальцев
                                                                                                                                                                                                                                                              12.05.2016, 13:29
                                                                                                                                                                                                                                                              Здравствуйте.
                                                                                                                                                                                                                                                              Без ajax это можно сделать через отдельный файл js, который использовать для хранения необходимых данных в виде массива json. После этого на JavaScript необходимо написать скрипт, который будет при выборе города выбирать из этого массива необходимые данные и отображать их во втором списке.
                                                                                                                                                                                                                                                              Что-то наподобие этого: itchief.ru/lessons/bootstrap-3/bootstrap-3-modal-window#comment-827
                                                                                                                                                                                                                                                            2. Сергей
                                                                                                                                                                                                                                                              Сергей
                                                                                                                                                                                                                                                              11.05.2016, 11:49
                                                                                                                                                                                                                                                              И не подскажите как сделать как у вас систему комментирования… оч понарвилась)
                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                Александр Мальцев
                                                                                                                                                                                                                                                                11.05.2016, 12:19
                                                                                                                                                                                                                                                                С помощью сниппета TicketComments.
                                                                                                                                                                                                                                                                Как это сделать рассмотрено в этой статье:
                                                                                                                                                                                                                                                                MODX — Создание шаблона для постов.
                                                                                                                                                                                                                                                              2. Сергей
                                                                                                                                                                                                                                                                Сергей
                                                                                                                                                                                                                                                                11.05.2016, 11:49
                                                                                                                                                                                                                                                                А как прикрутить reCaptche от google?
                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                  Александр Мальцев
                                                                                                                                                                                                                                                                  11.05.2016, 12:16
                                                                                                                                                                                                                                                                  Как это сделать расскажу в отдельной статье.
                                                                                                                                                                                                                                                                  1. Сергей
                                                                                                                                                                                                                                                                    Сергей
                                                                                                                                                                                                                                                                    11.05.2016, 12:35
                                                                                                                                                                                                                                                                    Спасибо Вам, будем ждать!
                                                                                                                                                                                                                                                                2. Миха
                                                                                                                                                                                                                                                                  Миха
                                                                                                                                                                                                                                                                  29.04.2016, 09:19
                                                                                                                                                                                                                                                                  Добрый день, подскажите пож-та как сделать переадресацию на страницу «Спасибо ...» вместо появления сообщения «форма отправлена успешно». Очень надо для настройки целей в Гугл Аналитике, т.к. я не понимаю как подвязать такой тип события в Гугл Аналитике как цель конверсии… :(

                                                                                                                                                                                                                                                                  Спасибо!
                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                    Александр Мальцев
                                                                                                                                                                                                                                                                    30.04.2016, 04:39
                                                                                                                                                                                                                                                                    Найдите на сервере файл assets/components/ajaxform/js/default.js.
                                                                                                                                                                                                                                                                    Добавьте строчку
                                                                                                                                                                                                                                                                    window.location = "http://mysite.ru/";
                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                    перед строчкой
                                                                                                                                                                                                                                                                    AjaxForm.Message.success(response.message);
                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                  2. Роман
                                                                                                                                                                                                                                                                    Роман
                                                                                                                                                                                                                                                                    19.04.2016, 22:58
                                                                                                                                                                                                                                                                    Подскажите пожалуйста, как сделать так, чтобы все работало если при условии я убираю поле для ввода сообщения, оставляю только первые три.
                                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                                      Александр Мальцев
                                                                                                                                                                                                                                                                      30.04.2016, 11:41
                                                                                                                                                                                                                                                                      1. Убрать в форме соответствующий блок
                                                                                                                                                                                                                                                                      2. В вызове сниппета в параметре validate убрать проверку поля message:
                                                                                                                                                                                                                                                                      &validate=`name:minLength=^2^,email:email:required`
                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                    2. петрович
                                                                                                                                                                                                                                                                      петрович
                                                                                                                                                                                                                                                                      09.04.2016, 13:33
                                                                                                                                                                                                                                                                      На скрине в письме есть IP пользователя, чем такое реализовать?
                                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                                        Александр Мальцев
                                                                                                                                                                                                                                                                        10.04.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.03.2016, 18:18
                                                                                                                                                                                                                                                                        Александр, не подскажете, как сделать форму с возможностью прикрепления и отправки файла? Например, для службы поддержки, чтобы пользователь мог отправить скриншоты или вордовский или екселевский файл?
                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                          Александр Мальцев
                                                                                                                                                                                                                                                                          03.04.2016, 14:16
                                                                                                                                                                                                                                                                          Попробуй добавить к форме атрибут:
                                                                                                                                                                                                                                                                          enctype="multipart/form-data"
                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                        2. Anna
                                                                                                                                                                                                                                                                          Anna
                                                                                                                                                                                                                                                                          22.02.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.02.2016, 12:25
                                                                                                                                                                                                                                                                            Попробуй подключить библиотеку jQuery в разделе head, до вызова других js-скриптов.
                                                                                                                                                                                                                                                                            1. Анна
                                                                                                                                                                                                                                                                              Анна
                                                                                                                                                                                                                                                                              27.02.2016, 19:26
                                                                                                                                                                                                                                                                              jquery в head стоит выше других скриптов, если убрать или поставить выше файл interface.js в котором находится функция evаl (я в ней ничего не понимаю), форма работает отлично, но тогда не работают другие элементы сайта, без которых теряется вся идея сайта, как их совместить?
                                                                                                                                                                                                                                                                          2. Anna
                                                                                                                                                                                                                                                                            Anna
                                                                                                                                                                                                                                                                            18.02.2016, 23:46
                                                                                                                                                                                                                                                                            Здравствуйте! подскажите пожалуйста, у меня все работает, и сообщения приходят, только не появляются всплывающие аjax-сообщения типа «сообщение отправлено», пересматривала все вроде правильно не могу разобратся
                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                              Александр Мальцев
                                                                                                                                                                                                                                                                              21.02.2016, 06:34
                                                                                                                                                                                                                                                                              Здравствуйте.
                                                                                                                                                                                                                                                                              Для начала проверьте, есть ли в консоли ошибки.
                                                                                                                                                                                                                                                                            2. Алексей
                                                                                                                                                                                                                                                                              Алексей
                                                                                                                                                                                                                                                                              17.01.2016, 11:40
                                                                                                                                                                                                                                                                              Подскажи, где может быть ошибка. Код полностью скопировал с твоей статьи. Компонент выдаёт сообщение «Форма содержит ошибки».
                                                                                                                                                                                                                                                                              В журнале ошибок такая запись:
                                                                                                                                                                                                                                                                              [2016-01-17 11:35:40] (ERROR @ /assets/components/ajaxform/action.php) [FormIt] Произошла ошибка при попытке отправить почту. Пустое тело сообщения
                                                                                                                                                                                                                                                                              Не пойму куда копать.

                                                                                                                                                                                                                                                                              До этого сам настраивал через Ajax, ошибок нигде нет, но письма не приходят.
                                                                                                                                                                                                                                                                              Пробовал отдельно через FormIt делать. Письма отправляются, но приходят в таком виде:
                                                                                                                                                                                                                                                                              [[+name]] прислал сообщение:
                                                                                                                                                                                                                                                                              [[+message]]
                                                                                                                                                                                                                                                                              Ответить [[+name]] на почту [[+email]].
                                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                                Александр Мальцев
                                                                                                                                                                                                                                                                                17.01.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.01.2016, 15:11
                                                                                                                                                                                                                                                                                  Заработало после того как сделал так
                                                                                                                                                                                                                                                                                  form action="/[[~[[*id]]]]"
                                                                                                                                                                                                                                                                                  Теперь вот не могу понять, почему с моей формой отправки, которая взята из шаблона не приходят письма и ошибок нет…
                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                    Александр Мальцев
                                                                                                                                                                                                                                                                                    20.01.2016, 16:51
                                                                                                                                                                                                                                                                                    Не знаю чем Вам помочь, но при отправке формы через AJAX значение атрибута action не должно играть ни какой роли. Т.к. настройка, куда отправить форму уже определяется в коде JavaScript в качестве параметра метода jQuery post().
                                                                                                                                                                                                                                                                              2. Александр
                                                                                                                                                                                                                                                                                Александр
                                                                                                                                                                                                                                                                                16.01.2016, 17:45
                                                                                                                                                                                                                                                                                Спасибо за консультации!
                                                                                                                                                                                                                                                                                124print.ru/about.html
                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                  Александр Мальцев
                                                                                                                                                                                                                                                                                  17.01.2016, 10:37
                                                                                                                                                                                                                                                                                  Спасибо, Александр.
                                                                                                                                                                                                                                                                                2. Паевл
                                                                                                                                                                                                                                                                                  Паевл
                                                                                                                                                                                                                                                                                  12.01.2016, 19:51
                                                                                                                                                                                                                                                                                  Добрый вечер Шеф!!! Давно пользуюсь вашим сайтом, очень многое здесь узнал, и много нашел ответов на свои вопросы!!! Хотел задать вопрос по этой теме:

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

                                                                                                                                                                                                                                                                                  Заранее спасибо!
                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                    Александр Мальцев
                                                                                                                                                                                                                                                                                    14.01.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.01.2016, 23:37
                                                                                                                                                                                                                                                                                      Спасибо огромное ШЕФ все сработало!!!

                                                                                                                                                                                                                                                                                      Хотел только еще спросить одну деталь, как сделать чтоб имя (name) в окне (af-message-success) как то выделялось например красным цветом, как ему присвоить стиль CSS в скрипте???
                                                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                                                        Александр Мальцев
                                                                                                                                                                                                                                                                                        15.01.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.01.2016, 21:26
                                                                                                                                                                                                                                                                                          Еше раз большое спасибо ШЕФ!!! За ваш сайт и вашу помощь!!!
                                                                                                                                                                                                                                                                                  Войдите, пожалуйста, в аккаунт, чтобы оставить комментарий.