Для вывода формы во всплывающем окне будем использовать Fancybox.
1) Подключаем jQuery
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
2) Подключаем Fancybox
<link rel="stylesheet" href="/fancybox/source/jquery.fancybox.css?v=2.1.5" type="text/css" media="screen" /> <script type="text/javascript" src="/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script>
3) Создаем папку ajax в корне структуры сайта.
4) Создаем файл form.php в папке ajax, в котором у нас будет расположена форма.
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); //Подключаем служебную часть пролога битрикса
?>
<div class="popup-form">
<?
//Подключаем компонент для вывода нашей веб-формы
$APPLICATION->IncludeComponent(
"bitrix:form.result.new",
"",
Array(
"CACHE_TIME" => "3600",
"CACHE_TYPE" => "A",
"CHAIN_ITEM_LINK" => "",
"CHAIN_ITEM_TEXT" => "",
"COMPONENT_TEMPLATE" => ".default",
"EDIT_URL" => "",
"IGNORE_CUSTOM_TEMPLATE" => "N",
"LIST_URL" => "",
"SEF_MODE" => "N",
"SUCCESS_URL" => "",
"USE_EXTENDED_ERRORS" => "N",
"VARIABLE_ALIASES" => Array("RESULT_ID"=>"RESULT_ID","WEB_FORM_ID"=>"WEB_FORM_ID"),
"WEB_FORM_ID" => "1" // ID нашей веб-формы
)
);
?>
</div>
Добавим ссылку, на которую мы повесим обработчик события для вывода формы во всплывающем окне:
<a href="#" class="pushme">Показать форму</a>
Сам обработчик вывода, отправки формы:
<script>
$(function(){
$('.pushme').click(function(e){
getForm(); //выводим форму
e.preventDefault();
});
$('body').on('submit','.popup-form form',function(e){
e.preventDefault(); //отключаем стандартный обработчик события отправки формы
var dataForm = $(this).serialize()+'web_form_submit=Y'; //сериализация полей формы в строку + добавляем параметр web_form_submit (данные переданы из веб-формы)
$.fancybox.showLoading(); //отображаем загрузчик Fancybox
getForm(name,dataForm); // отправляем форму
});
});
//функция отправки и отображения формы
function getForm(name,data){
$.ajax({
url: '/ajax/form.php',
type: 'POST',
data: data,
success: function(data){
$.fancybox({content:data,helpers:{overlay:{locked: false}}});
$.fancybox.hideLoading();
}
});
}
</script>
Собственно при клике на ссылку происходит вызов функции getForm, которая отправляет ajax запрос к файлу form.php, где у нас подключен вызов компонента с нашей веб-формой. В результате выводится форма фенсибоксе.
При отправке формы у нас срабатывает обработчик события submit, в котором функция getForm отправляет ajax запрос с данными к файлу form.php, и выводится форма с результатом отправки.