Drupal 7: отправка формы через Ajax
Иногда возникает задача на Drupal 7 реализовать отправку статичной формы(не Webform) через Ajax. Как отправить webform через ajax в Drupal7 вы также можете почитать.
Итак, исходные данные:
- Форма с классом form1
- Кастомный модуль custom
JS-код:
(function($) { Drupal.behaviors.custom = { attach: function (context, settings) { $("form.form1", context).submit(function () { var form = $(this); // запишем форму, чтобы потом не было проблем с this var error = false; // предварительно ошибок нет, эта переменная нужна на тот случай, если будем делать валидацию на стороне JS var data = form.serialize(); // подготавливаем данные if (!error) { // если ошибки нет var data = form.serialize(); // подготавливаем данные $.ajax({ // инициализируем ajax запрос type: 'POST', // отправляем в POST формате, можно GET url: '/send_message', // путь до обработчика, у нас он лежит в той же папке dataType: 'json', // ответ ждем в json формате data: data, // данные для отправки beforeSend: function(data) { // событие до отправки }, success: function(data){ // событие после удачного обращения к серверу и получения ответа if (data.result == "success"){ // тут выполняем какие либо действия, если отправка прошла успешно } else{ // тут выполняем какие либо действия, если при отправке произошла ошибка } }, error: function (xhr, ajaxOptions, thrownError) { // в случае неудачного завершения запроса к серверу alert(xhr.status); // покажем ответ сервера alert(thrownError); // и текст ошибки }, complete: function(data) { // событие после любого исхода } }); } return false; }); } }; }(jQuery));
Код PHP. Реализация модуля custom.
/** * Implementation hook_menu() */ function custom_menu() { $items['send_message'] = array( 'title' => t('Send message'), 'page callback' => 'send_message', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); return $items; } function send_message(){ $sendto = [variable_get('site_mail', ''), 'mail@mail.ru']; $sendto = implode(",", $sendto); $subject = "Заявка с сайта ".variable_get('site_name', 'Название сайта'); $name = $_POST['name']; $phone = $_POST['phone']; $email = $_POST['email']; $message = $_POST['message']; $usermail = "info@host.ru"; $headers = ""; $headers .= "From: info".$_SERVER['HTTP_HOST']." \r\n"; $headers .= "Reply-To: ". strip_tags($usermail) . "\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html;charset=utf-8 \r\n"; // Формирование тела письма $msg = ""; // отправка сообщения if(@mail($sendto, $subject, $msg, $headers)){ $result = array("result" => "success"); print drupal_json_encode($result); } else{ $result = array("result" => "error"); print drupal_json_encode($result); } }<body style='font-family:Arial,sans-serif;'>"; $msg .= "<h2 style='font-weight:bold;border-bottom:1px dotted #ccc;'>$subject</h2>\r\n"; if (!empty($name)){ $msg .= "<p><strong>Имя: </strong> ".$name."</p>\r\n"; } if (!empty($phone)){ $msg .= "<p><strong>Телефон: </strong> ".$phone."</p>\r\n"; } if (!empty($email)){ $msg .= "<p><strong>E-mail: </strong> ".$email."</p>\r\n"; } if (!empty($message)){ $msg .= "<p><strong>Сообщение: </strong> ".$message."</p>\r\n"; } if (!empty($teacher_name)){ $msg .= "<p><strong>Имя преподавателя: </strong> ".$teacher_name."</p>\r\n"; } $msg .= "</body>
После этого собственно всё отправляется.