Проблема с AjaxForm
Добрый день. Не пойму что пропустил. На странице есть 2 формы. С одной письма доходят, а с другой нет.
Вызов рабочей формы
Вызов не рабочей формы
Вызов рабочей формы
{$_modx->runSnippet('!AjaxForm', [
'snippet' => 'FormIt',
'form' => 'form.callback.modal',
'hooks' => 'spam,email,FormItSaveForm',
'emailSubject' => 'Заказ обратного звонка с сайта ' ~ $_modx->config.site_name,
'emailTo' => $_modx->config.store_email_support,
'emailFrom' => $_modx->config.store_email_noreply,
'emailTpl' => 'form.callback.email',
'formName' => 'Заказ обратного звонка',
'formFields' => 'callbackName,callbackPhone',
'fieldNames' => 'callbackName==Имя,callbackPhone == Телефон',
'validate' => 'callbackName:required,callbackPhone:required',
'validationErrorMessage' => 'В форме содержатся ошибки!',
'successMessage' => 'Сообщение успешно отправлено',
'frontend_css' => '',
])}
Чанк формы <div class="modal fade" id="formCallback" tabindex="-1" role="dialog" aria-labelledby="formCallbackLabel">
<div class="modal-dialog" role="document">
<form method="post" class="af">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h3 id="formCallbackLabel" class="center-aligned">Заказать звонок</h3>
</div>
<div class="modal-body">
<div class="alert alert-success hidden">Письмо успешно отправлено!</div>
<div class="alert alert-danger hidden">В форме содержаться ошибки!</div>
<div class="form-group">
<label class="visible-xs">Имя</label>
<input type="text" name="callbackName" value="[[+fi.callbackName]]" placeholder="Имя" class="form-control input-lg sharp">
<span class="help-block error_callbackName">[[+fi.error.callbackName]]</span>
</div>
<div class="form-group">
<label class="visible-xs">Телефон</label>
<input type="tel" name="callbackPhone" value="[[+fi.callbackPhone]]" placeholder="Телефон" class="form-control input-lg phone sharp">
<span class="help-block error_callbackPhone">[[+fi.error.callbackPhone]]</span>
</div>
</div>
<div class="modal-footer">
<button type="submit" name="form1" class="btn orange">Отправить</button>
</div>
</div>
</form>
</div>
</div>
Вызов не рабочей формы
{$_modx->runSnippet('!AjaxForm', [
'snippet' => 'FormIt',
'form' => 'form.contacts',
'hooks' => 'spam,email',
'emailSubject' => 'Письмо с сайта ' ~ $_modx->config.site_name,
'emailTo' => $_modx->config.store_email_support,
'emailFrom' => $_modx->config.store_email_noreply,
'emailTpl' => 'form.contacts.email',
'formName' => 'Форма обратной связи',
'formFields' => 'contactsName,contactsEmail,contactsPhone,contactsMessage',
'fieldNames' => 'contactsName==Имя отправителя,contactsEmail==Почта,contactsPhone == Телефон,contactsMessage==Сообщение',
'validate' => 'contactsName:required,contactsEmail:required,contactsPhone:required,contactsMessage:required:stripTags',
'validationErrorMessage' => 'В форме содержатся ошибки!',
'successMessage' => 'Сообщение успешно отправлено',
'frontend_css' => '',
])}
Чанк не рабочей формы <div id="cForm">
<form action="[[~[[*id]]]]" method="post" class="ajax_form">
<input type="hidden" name="nospam" value="">
<div class="form-group">
<label for="contactsName">Ваше имя</label>
<input type="text" name="contactsName" value="[[+fi.contactsName]]" placeholder="Ваше имя" class="form-control input-lg sharp" id="contactsName">
<span class="error_contactsName">[[+fi.error.contactsName]]</span>
</div>
<div class="form-group">
<label for="contactsPhone">Телефон</label>
<input type="tel" name="contactsPhone" value="[[+fi.contactsPhone]]" placeholder="Телефон" class="phone form-control input-lg sharp" id="contactsPhone">
<span class="error_contactsPhone">[[+fi.error.contactsPhone]]</span>
</div>
<div class="form-group">
<label for="contactsEmail">Email</label>
<input type="text" name="contactsEmail" value="[[+fi.contactsEmail]]" placeholder="Email" class="email form-control input-lg sharp" id="contactsEmail">
<span class="error_contactsEmail">[[+fi.error.contactsEmail]]</span>
</div>
<button type="submit" class="btn orange mt30" name="form2">Заказать расчет</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>
</div>
Комментарии: 16
Попробуйте поменять button на input, вроде как сталкивался с данной проблемой и она решилась данным путём
Пробовал, не получилось
Укажите разные submitVar и выведите их в атрибутах name этих input[type=submit]
Нет, все по прежнему. Письмо приходит только 1
Странно, у меня на многих сайтах на одной странице без проблем запускаются и работают несколько форм. До рабочего компьютера доеду и гляну, вдруг что-то упускаем
благодарю
У вас во второй форме (не рабочей) нет поля с именем contactsMessage, а в валидации есть и помечено required. Потому и не шлется
Нет, поле убрал это — результат тот же. Сообщение об отправке появляется, но письма нет
Ошибки в журнале, консоли или на сервере в логах есть?
Ничего. На сервере только
Tue Sep 18 09:58:42 2018] [error] [client 194.58.98.236] client denied by server configuration: /var/www/merman/data/www/merman.su/core/docs/changelog.txt
Предлагаю привести вторую форму к виду первой: убрать action, поле со спамом и посмотреть на результат. Это чисто эксперимент. Где-то явно д.б. ошибка в логах или консоли. Сообщения стандартные ajaxformовские? может, не все видите
Пробовал ставить другую форму с рабочего примера. Такой же результат.
Да и эта форма работала, просто находилась на другой странице
Да и эта форма работала, просто находилась на другой странице
А есть навешанная логика на формы и их элементы? на сабмит?
Вы точно сделали как я сказал выше?
{'!AjaxForm' | snippet : [
...
'submitVar' => 'main'
]}
// а в чанке формы
<input type="submit" name="{$submitVar}"/>
благодарю, работает.
До этого в name вписывал form1 и соответственно параметр 'submitVar' => 'form1'.
Попробовал как в вашем комменте —
До этого в name вписывал form1 и соответственно параметр 'submitVar' => 'form1'.
Попробовал как в вашем комменте —
name="{$submitVar}"
работает
Ну и отлично)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.