Ajax форма во всплывающем окне Битрикс

27614 просмотров
Автор: Николай Ковалёв

В большинстве случаев, почти на любом сайте используется форма обратной связи, заказа звонка, оформления заказа или ещё чего-нибудь. И конечно же, лучше всего, если такая форма будет работать без перезагрузки страницы, то есть в ajax-режиме.

Сейчас мы и рассмотрим вариант, как сделать форму на ajax, да ещё и во всплывающем окне. Мы не будем использовать сторонние плагины, например fancyBox или ещё что-то. Сделаем всё обычным js-скриптом с использованием jQuery.

Итак, для начала давайте создадим файл, например form.php, в котором разместим стандартный компонент формы обратной связи bitrix:main.feedback. К параметрам компонента мы добавим вот такие строки, которые зададут компоненту ajax-режим.

"AJAX_MODE" => "Y",
"AJAX_OPTION_SHADOW" => "N",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "Y",
"AJAX_OPTION_HISTORY" => "N",

Кроме этого, в нашем файле мы подключим служебные части пролога и эпилога, а так же обернем наш компонент формы в html-конструкцию (для реализации всплывающей формы).

Файл form.php должен получиться примерно таким:

<?
// подключение служебной части пролога
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");?>

<div class="modal_background">
	<div class="modal_form">
		<a href="#" class="close_form">Закрыть форму</a>
		<?$APPLICATION->IncludeComponent(
			"bitrix:main.feedback",
			"",
			Array(
				"EMAIL_TO" => "test@test.ru",
				"EVENT_MESSAGE_ID" => array("7"),
				"OK_TEXT" => "Спасибо, ваше сообщение принято.",
				"REQUIRED_FIELDS" => array("NAME", "EMAIL", "MESSAGE"),
				"USE_CAPTCHA" => "Y",
				"AJAX_MODE" => "Y",
				"AJAX_OPTION_SHADOW" => "N",
				"AJAX_OPTION_JUMP" => "N",
				"AJAX_OPTION_STYLE" => "Y",
				"AJAX_OPTION_HISTORY" => "N",
			)
		);?>
	</div>
</div>

<?
// подключение визуальной части пролога
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php");?>

Теперь добавим немного CSS для всплывающей формы. Вставьте этот код в ваш CSS-файл.

/*это затемнение экрана при вызове формы*/
.modal_background{
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 9999;
    background: rgba(0,0,0,0.6);
    display: none;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}
/*это контейнер самой формы*/
.modal_form{
    background: #ffffff;
    border-radius: 2px;
    width: 500px;
    padding: 40px 30px;
    position: relative;
    display: none;
    max-width: 100%;
}
/*это кнопка для закрытия формы*/
a.close_form{
    position: absolute;
    right: 30px;
    top: 40px;
    z-index: 5;
}

И остаётся добавить скрипт, который будет вызывать нашу форму. Скрипт вешаем на событие нажатия кнопки. Допустим, что наша кнопка это тег <a>  с классом call_form. То есть выглядеть это будет так:

$(function() {
    // вызываем форму
    $(document).on("click", ".call_form", function(e) {
    	e.preventDefault();// отменяем переход по ссылке

    	var this_ = $(this);
    	if(this_.hasClass("disabled"))
    		return false;
        
        this_.addClass("disabled");

        $.ajax({
            url: "/include/form.php",
            type: "POST",
            data: {},
            success: function(data) {
            	$("body").append(data);
            	$(".modal_background").css({"display":"flex"});
            	$(".modal_form").fadeIn();
        	this_.removeClass("disabled");
            }
        });
    });

    // а это для закрытия формы
    $(document).on("click", ".close_form", function(e) {
        e.preventDefault();
        $(".modal_background").hide().remove();
    });
});

Что здесь происходит? Сперва мы делаем ajax-запрос на файл с нашей формой. Получаем нашу форму и вставляем её в конец страницы. Затем показываем наше затемнение экрана и только после, плавно выводим форму.

Обратите внимание, что для показа затемнения экрана я использовал display: flex. Это нужно, чтобы наша форма была по центру экрана.

На этом всё. Форма будет работать в ajax-режиме.

5.00 6 голосов
Валюта цен: BYN RUB