К содержанию

Проблема с FormIt

Доброго времени суток! Прошу помощи по FormIt. При вызове сниппета через AjaxForm форма выводится корректно, но при отправке сообщения все данные попадают в адресную строку и письмо не приходит.

Вот вызов сниппета:

{'!AjaxForm' | snippet:[
                'snippet' => 'FormIt',
                'form' => '@FILE chunks/contacts/contactFormItem.tpl',
                'emailTpl' => '@FILE chunks/contacts/mailContacts.tpl',
                'hooks' => 'email',
                'emailSubject' => 'Обратная связь ' ~ $_modx->config.site_name,
                'emailFrom' => 'admin@site.com',
                'emailFromName' => 'admin',
                'emailTo' => 'myemail@gmail.com',
                'validationErrorMessage' => 'Пожалуйста, исправьте ошибки!',
                'successMessage' => 'Ваше сообщение успешно отправлено',
                'submitVar'=>'sendOrder'
                ]}
Если вызвать без AjaxForm ту же форму, то она вообще не выводится. Самое главное никаких ошибок в логе вообще не возникает. На том же сервере на других сайтах с идентичными настройками все работает корректно.

Чанк формы

<form action="" method="POST" class="ajax_form af_example">
    <fieldset class="margin-bottom-md">
      <div class="margin-bottom-sm">
        <div class="grid grid-gap-sm">
          <div class="col-6@md">
            <label class="form-label margin-bottom-xxs" for="af_name">Имя</label>
            <input class="form-control width-100%" type="text" id="af_name" name="name" value="" required>
            <span class="error_name"></span>
          </div>
      
          <div class="col-6@md">
            <label class="form-label margin-bottom-xxs" for="af_email">Email</label>
            <input class="form-control width-100%" type="email" id="af_email" name="email" value="" placeholder="[[%af_label_email]]" required>
          </div>
        </div>
      </div>              
      <div>
        <label class="form-label margin-bottom-xxs" for="af_message">Сообщение</label>
        <textarea class="form-control width-100%" id="af_message" name="message"></textarea>
      </div>
    </fieldset>
    <div>
      <button type="submit" name="sendOrder" class="btn btn--primary">Отправить</button>
    </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>
Чанк сообщения:

<p><b>Имя:</b> [[+name]]</p>
<p><b>Email:</b> [[+email]]</p>
<p><b>Текст сообщения:</b></p>
<p>[[+message]]</p>
Антон
Антон
23 ноября 2019, 19:00
modx.pro
1 627
Реклама

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

Андрей
Андрей Старожил
23 ноября 2019, 19:29
А чанк формы и чанк репорта можно посмотреть?
    Антон
    Антон Старожил
    23 ноября 2019, 21:10
    Все выложил выше. Совсем забыл про них)
      Андрей
      Андрей Старожил
      23 ноября 2019, 22:22
      Нужно убрать name у button submit, и добавить скрытый инпут с name который прописан в submitVar:
      <form action="" method="POST" class="ajax_form af_example">
      	<input type="hidden" name="sendOrder" value="1" />
      
      	<fieldset class="margin-bottom-md">
      	  <div class="margin-bottom-sm">
      	    <div class="grid grid-gap-sm">
      	      <div class="col-6@md">
      	        <label class="form-label margin-bottom-xxs" for="af_name">Имя</label>
      	        <input class="form-control width-100%" type="text" id="af_name" name="name" value="[[+fi.name]]" required>
      	        <span class="error_name"></span>
      	      </div>
      	  
      	      <div class="col-6@md">
      	        <label class="form-label margin-bottom-xxs" for="af_email">Email</label>
      	        <input class="form-control width-100%" type="email" id="af_email" name="email" value="[[+fi.email]]" placeholder="[[%af_label_email]]" required>
      	      </div>
      	    </div>
      	  </div>              
      	  <div>
      	    <label class="form-label margin-bottom-xxs" for="af_message">Сообщение</label>
      	    <textarea class="form-control width-100%" id="af_message" name="message">[[+fi.message]]</textarea>
      	  </div>
      	</fieldset>
      	<div>
      	  <button type="submit" class="btn btn-primary">Отправить</button>
      	</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>

      Либо в принципе не использовать параметр submitVar, для ajaxForm он не нужен.
        Антон
        Антон Старожил
        23 ноября 2019, 22:48
        Не помогает, куда копать даже не знаю.
        Еще есть один нюанс, форма работает только для спам-ботов, так как письма со спамом приходят постоянно, но я не понимаю как так получается, если форма не работает.
        Вообще впервые с таким столкнулся, обычно если есть какя-то проблема, то в логах все ошибки отображаются, а тут ничего.
          Андрей
          Андрей Старожил
          23 ноября 2019, 23:09
          Код я проверил на действующем сайте, 100% рабочий. Попробуйте протестировать форму на пустой странице, без лишних сниппетов, скриптов и оформления, возможно в вашем случае что что стороннее мешает.
    Антон
    Антон Старожил
    23 ноября 2019, 23:42
    Проверил, без стилей без скриптов, все тоже самое. После отправки все данные выводит в адресной строке и все, никаких ошибок, ровно как и отправки письма.


    Куда еще можно копнуть? Какие еще логи можно посмотреть, чтобы ошибку хоть увидеть?
      Андрей
      Андрей Старожил
      23 ноября 2019, 23:58
      Так это потому что форма get-ом зачем то отправляется, хотя ajaxForm сам должен проставлять method=post. Вобщем то идеи кончились =) тут уже надо разбираться конкретно на вашем сайте, может плагины самописные есть, или ещё что. В ajaxForm никакие правки не вносились?
        Антон
        Антон Старожил
        24 ноября 2019, 00:42
        Да в том то и дело, что правок никаких не вносил, самописных плагинов тоже не делал. Вот сейчас еще проверил такая проблема, что если вызвать FormIt без AjaxForm, то он форму не выводит вообще, при этом опять ошибок в логе нет) Такое чувство, что сам FormIt отказывается работать, но почему нет ошибок тогда. Уже пробовал переустанавливать сниппеты и сам modx, ничего не меняется.
          Олег Щавелев
          Олег Щавелев Проверенный
          24 ноября 2019, 10:05
          Антон. А у Вас конслоли есть ошибки JS?
            Антон
            Антон Старожил
            24 ноября 2019, 10:35
            Сейчас все проверил в 2-х браузерах, консоль чистая, как до попытки отправки, так и после.
            Андрей
            Андрей Старожил
            24 ноября 2019, 17:08
            Если есть возможность, пришлите доступы на почту (кнопка в профиле), очень интересно посмотреть на такую мистическую проблему =)
              Антон
              Антон Старожил
              24 ноября 2019, 18:24
              Все, нашел проблему, надо быть внимательнее) На странице тег
              <form>
              был запущен 2 раза. Переключился на другие задачи и потом еще раз посмотрел свежим взглядом все шаблоны и чанки и в итоге обнаружил то, что пропустил.
        Иван Бочкарев
        Иван Бочкарев Администратор
        24 ноября 2019, 11:52
        Проверь на наличие не закрытых div
          Антон
          Антон Старожил
          24 ноября 2019, 13:48
          Все закрыты
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          14