Всем привет!
Прошу помощи: на сайте создал всплывающее окно, открывающееся по кнопке, с заказом обратного звонка, всё как обычно, реализовано с помощью ajaxform, вот код вывода сниппета:
[[AjaxForm? &snippet=`FormIt` &form=`tpl.AjaxForm` &emailTpl=`sentEmailTpl` &emailSubject=`Тестовое сообщение` &emailTo=`mm@yandex.ru` &successMessage=`Сообщение успешно отправлено` &validate=`name:required,email:required ` &validationErrorMessage=`В форме содержатся ошибки!` ]]
вот чанк tpl.AjaxForm:
<h2>ЗАКАЗАТЬ ЗВОНОК</h2> <form id="contact" name="contact" action="" method="post" class="ajax_form"> <label class="control-label" for="af_name">[[%af_label_name]]</label> <input type="text" id="af_name" name="name" value="[[+fi.name]]" placeholder="" class="span4" /><br /> <span class="error_name">[[+fi.error.name]]</span> <label class="control-label" for="af_email">[[%af_label_email]]</label> <input type="email" id="af_email" name="email" value="[[+fi.email]]" placeholder="" class="span4" /><br /> <span class="error_email">[[+fi.error.email]]</span> <button type="submit" class="btn btn-primary">[[%af_submit]]</button> [[+fi.success:is=`1`:then=` <div class="alert alert-success">[[+fi.successMessage]]</div> `]] [[+fi.validation_error:is=`1`:then=` <div class="alert alert-danger">[[+fi.validation_error_message]]</div> `]] </form>
вот чанк sentEmailTpl:
[[+name]] <br /> [[+email]] <br /> [[+message]]
Всё валидируется, пишет, что письмо отправлено, но на почту ничего не приходит! Друзья, проверьте, пожалуйста, код, возможно у меня уже глаз замылился и я не вижу простейшей ошибки? Подскажите, в какую сторону можно копать?
Ещё момент: на сайте реализован отдельный php-скрипт отправки почты — он работает без проблем… возможно, необходимо покопаться в настройках formIt или ajaxForm, просто я не смог найти нужных параметров…
разумеется, почту забил правильно — тысячу раз проверил!)))
Подскажите, пожалуйста, буду очень признателен!
Может все-таки не кешируемым сниппет прописать? [[!AjaxForm…
А так подобные вещи уже обсуждались не раз здесь, мы AjaxForm не используем, а используем form-процессор.
Николай, благодарю за оперативный ответ! К сожалению, не помогло...(
Мне кажется, что тут сам formIt не отрабатывает… просто не догоняю, как это можно проверить!
Судя по тому, что страница выводит «Внимание! Телефон может содержать только цифры.», все-таки сам сниппет отрабатывает. Скорее всего просто с сайта почта на отправляется.
Поставьте Console и проверьте в принципе отправку почты, выполнив два отдельных кода:
1. Просто через функцию mail()
print (int)mail('test@some.host', 'subject', 'message');
2. Через MODX:
print (int)$modx->user->sendEmail('message');
Желательно, чтобы оба варианта вернули 1. Просто есть подозрение, что ваш сервер просто не отправляет почту.
В остальном, я вам больше ничем не помогу. Там так все замучено (AjaxForm использует еще FormIt, в итоге отлаживать надо и то и другое), что даже я, потратив 15 минут, не смог получить вменяемого результата. Все-таки процессоры прозрачней, там отладка лучше.
Спасибо, Николай, буду копать!))
Не за что!
Если еще актуально. Нахожу вашу проблему похожей на мое приключение
В вызове сниппета добавьте добавьте хук «email».
&hooks=`email`
Не знаю, ответит ли кто-то нибудь мне здесь или нет. Выполнил в консоли 2 команды, вернули 1, только после второй не пришло письмо (интересно, на какой адрес оно отправилось?)
У меня стоит в ajaxform &hooks=`email`, но письмо всё равно не приходит. Пробовал отдельно formit делать, письмо приходит, но хотелось бы без перезагрузки страницы через ajaxform запустить.
У меня на другом сайте письма отправляются нормально через ajaxform, при том, что оба сайта на одном сервере находятся.
vladim-filip, дайте хоть на код взглянуть))) Какой вызов сниппета, какой чанк? И что значит: "вернули один"?
Николай выше писал:
" Поставьте Console и проверьте в принципе отправку почты, выполнив два отдельных кода: 1. Просто через функцию mail()
print (int)mail('test@some.host', 'subject', 'message');
2. Через MODX:
print (int)$modx->user->sendEmail('message');
Желательно, чтобы оба варианта вернули 1."
Вот тут у меня возвращается 1 в обоих вариантах.
Вот код вызова сниппета:
[[!AjaxForm?
&snippet=`FormIt`
&form=`vogelCallbackFormTpl`
&hooks=`spam,FormItSaveForm,email`
&formName=`Обратный звонок`
&formFields=`name,phone`
&fieldNames=`name==Имя,phone==Телефон`
&emailSubject=`Заявка на обратный звонок с сайта SiteName`
&emailTo=`myemail@email.ru`
&emailBCC=`myemail@yandex.ru`
&emailFrom=`info@site.ru`
&emailFromName=`SiteName`
&emailTpl=`vogelCallbackMailTpl`
&customValidators=`isCaptchaValid`
&validate=`name:required:minLength=^1^:maxLength=^30^,phone:required:minLength=^7^:maxLength=^20^,pers_data:required,captcha1:isCaptchaValid`
&validationErrorMessage=`Пожалуйста, исправьте ошибки!`
]]
Вот код формы vogelCallbackFormTpl:
<div class="callback-header">
<a href="#" class="callback-close" onclick=""></a>
</div>
<div class="callback-body">
<form action="" method="post" class="ajax_form af_example callback_form" id="callback_form" enctype="multipart/form-data" role="form">
<div class="form-group">
<div class="controls">
<label for="cb_name">Ваше имя *</label>
<input type="text" minlength="1" maxlength="30" id="cb_name" name="name" value="[[+fi.name]]" class="form-control cb_name" required="required" />
<span class="error_name">[[+fi.error.name]]</span>
</div>
</div>
<div class="form-group">
<div class="controls">
<label for="cb_phone">Телефон *</label>
<input type="text" id="cb_phone" name="phone" value="[[+fi.phone]]" autocomplete="tel-national" class="form-control cb_phone" oninput="this.value=this.value.replace(/[^0-9-+()]/g,'');" minlength="7" maxlength="20" required="required" />
<span class="error_phone">[[+fi.error.phone]]</span>
</div>
</div>
<div class="form-group controls captcha1">
<img class="img-captcha1" src="/assets/captcha/captcha1.php?rnd=[[!RandomNumber]]" data-src="/assets/captcha/captcha1.php" width="120" style="display:inline-block;">
<span class="refresh-captcha1-icon"></span>
<input id="captcha" name="captcha" type="text" placeholder="Введите код" class="form-control captcha1-input" required="required" value="" minlength="3" maxlength="3" autocomplete="off" oninput="this.value=this.value.replace(/[^0-9-+()]/g,'');">
</div>
<div class="error_captcha_div">
<span class="error_captcha"></span>
</div>
<div class="form-group">
<div class="controls">
<input type="checkbox" name="pers_data" required="required" id="pers_data">
<label for="pers_data" class="pers_label">Согласен на обработку персональных данных</label>
<span class="error_pers_data"></span>
</div>
</div>
<p class="pers_comment">Ставя отметку, я даю свое согласие на обработку моих персональных данных в соответствии с законом №152-ФЗ «О персональных данных» от 27.07.2006</p>
<div class="form-group">
<div class="controls">
<input type="submit" class="btn btn-red cb_submit" id="cb_submit_button" value="Перезвоните мне" />
</div>
</div>
[[+fi.validation_error:is=`1`:then=`
<div class="alert alert-danger">[[+fi.validation_error_message]]</div>
`]]
</form>
<div class="cb_success_mess">
Ваше сообщение отправлено!<br/>В ближайшее время с Вами свяжется менеджер.
</div>
<div class="callback_footer">
</div>
</div>
Ё-моё. Разобрался. У меня в &validate идёт поле captcha1, а в форме captcha просто называется. Теперь всё работает.