Опубликовано 04/07/2014
Модуль webform для drupal позволяет создавать различные формы на сайте.
Условие задачи: имеется форма, перед формой расположена большая инструкция (на несколько страниц). Переодически случаются сбои в отравке почты.
Задача:
- Если пользователь заполнил форму с ошибкой, перемещать его к этому полю.
- В случае невозможности отправки почты, заного отображать заполненную форму, а также выводить сообщение об ошибке под кнопкой отправки. Перемещать страницу к этому сообщению.
Открываем файл webform.module
Редактируем функцию webform_client_form_submit, заменяем строчки:
// Check if this form is sending an email.
if (!$is_draft && !$form_state['values']['details']['finished']) {
$submission = webform_get_submission($node->webform['nid'], $sid, TRUE);
webform_submission_send_mail($node, $submission);
}
на
// if webform cant send email, create a message error
$numsend = 0;
// Check if this form is sending an email.
if (!$is_draft && !$form_state['values']['details']['finished']) {
$submission = webform_get_submission($node->webform['nid'], $sid, TRUE);
$numsend = webform_submission_send_mail($node, $submission);
}
if(!$numsend){
$form_state['rebuild'] = TRUE;
$form_state['cantsend'] = TRUE;
}
form_state['rebuild'] в True заставит drupal заного отрисовать форму
form_state['cantsend'] - сюда сохраним информацию о том, что форму не удалось отправить по email
Далее добавим к форме текстовое сообщение о невозможности отправки формы.
Для этого в конец функции webform_client_form вставим следующие строки:
if(isset($form_state['cantsend'])){
$form['actions']['submit']['#suffix'] = 'Невозможно отправить e-mail. Внимание! В случае ошибки или сбоя при отправке обращения отправьте Ваше обращение на адрес: ....';
}
Установку фокуса на поле с ошибкой или на сообщение о невозможности отправки email сделаем с помощью jQuery. Для этого добавим hook в файл template.php нашей темы. Измените значение 50 на nid вашей страницы.
function OurThemeName_preprocess_html(&$variables, $hook){
// js for page with node nid = 50 (!!!!)
if ((arg(0) == 'node') && (arg(1) == 50)){
drupal_add_js('jQuery(document).ready(function(){
jQuery("html,body").animate({scrollTop: jQuery("#cantsend").offset().top}, 1000);
})','inline');
drupal_add_js('jQuery(document).ready(function() {jQuery(":input.error:first").focus();})','inline');
}
}
Добавить комментарий