April 17, 2013

bitrix:form.result.new и ajax

Добрый вечер! Сегодня будет небольшой совет о том как реализовать ajax веб-форму без лишних хлопот средствами Битрикс. Если взглянуть на документацию этого компонента то можно увидеть что об ajax там не сказано ни слова, также нету ничего такого в настройках компонента, но тем не менее он поддерживает ajax =)

Чуть ниже рассказываю поподробнее:

Стандартный вызов компонента происходит примерно так:

<?php
//...

$APPLICATION->IncludeComponent("bitrix:form.result.new", "", array(
    "SEF_MODE" => "Y",
    "WEB_FORM_ID" => "$_REQUEST['WEB_FORM_ID']",
    "LIST_URL" => "result_list.php",
    "EDIT_URL" => "result_edit.php",
    "SUCCESS_URL" => "",
    "CHAIN_ITEM_TEXT" => "",
    "CHAIN_ITEM_LINK" => "",
    "IGNORE_CUSTOM_TEMPLATE" => "Y",
    "USE_EXTENDED_ERRORS" => "Y",
    "CACHE_TYPE" => "A",
    "CACHE_TIME" => "3600",
    "SEF_FOLDER" => "/",
    "VARIABLE_ALIASES" => array()
    )
);?>

Для включения ajax нам нужно добавить вот эти параметры:

<?php

//...

"AJAX_MODE" => "Y", // режим AJAX
"AJAX_OPTION_SHADOW" => "N", // затемнять область
"AJAX_OPTION_JUMP" => "Y", // скроллить страницу до компонента
"AJAX_OPTION_STYLE" => "Y", // подключать стили
"AJAX_OPTION_HISTORY" => "N",

В итоге примерно получается вот так:

<?php

$APPLICATION->IncludeComponent("bitrix:form.result.new", "", array(
    "SEF_MODE" => "Y",
    "WEB_FORM_ID" => "$_REQUEST['WEB_FORM_ID']",
    "LIST_URL" => "result_list.php",
    "EDIT_URL" => "result_edit.php",
    "SUCCESS_URL" => "",
    "AJAX_MODE" => "Y", // режим AJAX
    "AJAX_OPTION_SHADOW" => "N", // затемнять область
    "AJAX_OPTION_JUMP" => "Y", // скроллить страницу до компонента
    "AJAX_OPTION_STYLE" => "Y", // подключать стили
    "AJAX_OPTION_HISTORY" => "N",
    "CHAIN_ITEM_TEXT" => "",
    "CHAIN_ITEM_LINK" => "",
    "IGNORE_CUSTOM_TEMPLATE" => "Y",
    "USE_EXTENDED_ERRORS" => "Y",
    "CACHE_TYPE" => "A",
    "CACHE_TIME" => "3600",
    "SEF_FOLDER" => "/",
    "VARIABLE_ALIASES" => array()
    )
);?>

Для одного из проектов мы вызывали данный компонент в скрытом div-контейнере который отображался при клике на кнопку. Полагаю что это самый простой вариант реализации всплывающей ajax веб-формы в CMS Битрикс.