Уведомление о невозможности отправки email в модуле webform; установка фокуса на поле заполненное с ошибкой

Сообщение об ошибке

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls в функции menu_set_active_trail() (строка 2405 в файле /var/www/notes7/includes/menu.inc).

Модуль webform для drupal позволяет создавать различные формы на сайте.

Условие задачи: имеется форма, перед формой расположена большая инструкция (на несколько страниц). Переодически случаются сбои в отравке почты.

Задача:

  1. Если пользователь заполнил форму с ошибкой, перемещать его к этому полю.
  2. В случае невозможности отправки почты, заного отображать заполненную форму, а также выводить сообщение об ошибке под кнопкой отправки. Перемещать страницу к этому сообщению.

Открываем файл 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');
  }
}

Добавить комментарий

CAPTCHA