19 марта 2016
7246
ajax, битрикс, bitrix, форма

AJAX форма для битрикс

1С-Битрикс
Демонстрация » Скачать »

Хай! Так как груз написания первого урока в категории 1С-Битрикс лег на меня) то придется отдуваться за всех) и для начала сделать урок более приближенный по функционалу к обыденным вещам, к примеру таким как форма обратной связи на Ajax, но с обработкой методами битрикса. В дальнейшем мы подробно рассмотрим, что такое битрикс и с чем его едят) запустив 5-10 обучающих уроков для новичков, дабы каждый мог погрузится в логику этого необычного и массивного фреймворка.

Приступим!

JQuery

<script>
	$(document).ready(
		function(){
			$('#form_zakaz_uslug input#name').click(function(){
                $('.form_zakaz_uslug .hidden_field').slideDown('fast')})
			$("#form_zakaz_uslug").submit(function(){
				var no_errors = true;
				//проверяем заполненность всех нужных полей формы
				$('input,textarea', $(this)).each(function() {
				if ($(this).val() == '') {
					if ($(this).attr('name') in {'name':1, 'email':1, 'text':1}) {
						errorInput($(this));
						no_errors = false;
					} else {
						$(this).val('');
					}
				} else successInput($(this));
			});

            //небольшая валидация e-mail
			var filter_email = 
                /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
			var email_input = $("#form_zakaz_uslug input[name=email]");
			if (!filter_email.test(email_input.val())) {
				no_errors = false;
				errorInput(email_input);
				$('.warning', $('#form_zakaz_uslug')).html('Введите корректный e-mail');
			} else {
				successInput(email_input);
				$('.warning', $('#form_zakaz_uslug')).html('Все поля обязательны для 
                заполнения');
			}
            //если нет ошибок отправляем форму в обработчик
			if (no_errors) {    
			//AJAX обработка
                jQuery.ajax({
                url: '/sendmail_zakaz_uslug.php',
                type: 'POST',
                dataType: 'html',
                data: $('#form_zakaz_uslug').serialize(),
                success: function(response) {
                    //если отправка успешна выводить сообщение об этом
                    if(response=='ok') {
                        $('.order_form').addClass('hide');
                        $('.success_message').removeClass('hide');
                        setTimeout(function(){
                            $('.order_form').removeClass('hide');
                            $('.success_message').addClass('hide');
                        }, 5000);
                    } else {
                        $('.order_form').addClass('hide');
                        $('.error_message').removeClass('hide');
                        setTimeout(function(){
                            $('.order_form').removeClass('hide');
                            $('.error_message').addClass('hide');
                        }, 5000);
                    }
                },
                //выводим ответ при ошибке со стороны сервера
                error: function(response) {
                     $('.order_form').addClass('hide');
                     $('.error_message').removeClass('hide');
                     setTimeout(function(){
                         $('.order_form').removeClass('hide');
                         $('.error_message').addClass('hide');
                     }, 5000);
                 }
             });
		 }
		     return false;
		 });
	 });
</script>

 

Основные моменты прокомментированы в коде, там все очень просто и не нуждается в дополнительном описании.

 

HTML

<form class="form_zakaz_uslug" id="form_zakaz_uslug" onsubmit="return false;">
          <div id="statustext"></div>
          <div id="error_name" class="warning">Все поля обязательны для заполнения</div>
          <ul class="form" style="width: 308px; margin-top: 10px;">
              <li>
                  <label for="name">ФИО <span style="color: red;">*</span>:</label>
                  <input type="text" name="name" id="name" placeholder="Имя" />
              </li>
              <li>
                  <label for="phone">Телефон:</label>
                  <input type="text" name="phone" id="phone" placeholder="Телефон" />
              </li>
              <li>
                  <label for="email">E-mail <span style="color: red;">*</span>:</label>
                  <input type="text" name="email" id="email" placeholder="E-mail" />
              </li>
              <li>
                  <label for="text">Комментарий:</label>
                  <textarea name="text" id="text" placeholder="Комментарий"></textarea>
              </li>
              <li style="text-align: right;">
                  <input type="submit" class="submit" value="Заказать">
              </li>
          </ul>
          </form>

Самая обычная форма, как и миллион других, которые мы с вами создавали :)

 

PHP

А вот тут уже начнется кое-что интересное.

Данный код мы поместим в файл AJAX-обработчика. Что у нас тут интересного?  

<?require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");?>
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>

Благодаря подключению файла prolog_before.php в битриксе исключается "шаблонная" часть и становятся доступны только библиотеки ядра, компоненты, модули и т.д. На данной странице вы можете делать что угодно и подгружать её в нужный div блок.

Далее мы просто запишем все данные с POST формы в нужный нам массив и передадим его на обработку в метод Send битрикса.

Весь код:

 

<?require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");?>
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?
if($_POST['name'] && $_POST['phone'] && $_POST['email'] && $_POST['text']){
    $PROP = array();
    $PROP['NAME'] = $_POST['name'];
    $PROP['PHONE'] = $_POST['phone'];
    $PROP['EMAIL'] = $_POST['email'];   
    $PROP['TEXT'] = $_POST['text'];   
    $arFields = $PROP;
    CEvent::Send("ZAKAZ_FOR_SERVICES", 's1', $arFields, 'N');
}
    echo 'ok';
?>

 

И еще пару слов о самом Битриксе :)

CEvent::Send - метод, который создает почтовое событие которое будет в дальнейшем отправлено в качестве E-Mail сообщения. Возвращает идентификатор созданного события. Нестатический метод.

Синтаксис: 

int
CEvent::Send(
 string event,
 mixed lid,
 array fields,
 string duplicate="Y",
 int message_id="",
 array files
)

 

Параметры:

event - Идентификатор типа почтового события.

lid - Идентификатор сайта, либо массив идентификаторов сайта.

fields - Массив полей типа почтового события идентификатор которого задается в параметре event_type. Массив имеет следующий формат: array("поле"=>"значение" [, ...]).

duplicate - Отправить ли копию письма на адрес указанный в настройках главного модуля в поле "E-Mail адрес или список адресов через запятую на который будут дублироваться все исходящие сообщения". Необязательный. По умолчанию "Y".

message_id - Идентификатор почтового шаблона по которому будет отправлено письмо. Если данный параметр не задан, либо равен "", то письма будут отправлены по всем шаблонам привязанным к типу почтового события, идентификатор которого задается в параметре event_type, а также привязанных к сайту(ам) идентификатор которого указан в параметре site. Необязательный. По умолчанию - "".

files - Массив id файлов, которые используются классом CFile.

 

Вот такое вот легкое первое знакомство с битриксом я решил для вас сделать :) Как видите ничего сложного и дальше будет только интереснее! Подписывайтесь на наш youtube канал, а также в социальных сетях, дабы быть в курсе всех самых новых событий! До встречи!