Использование сервиса веб-формы в 1С-Битрикс

Логотип 1С-БитриксВ данной заметке из цикла «Продолжаем знакомиться с битриксом» рассмотрим сервис веб-форм.
Стандартная функция этих форм состоит в отправке данных в базу с дальнейшим просмотром в админке. В заметке рассморен вызов формы из инфоблока всплываеющим окном и ее модификация.

В следующей документации можно получить довольно полную информацию о создании и использовании веб-форм в битриксе:
Документация по веб-формам битрикс для разработчиков
Документация по веб-формам битрикс для пользователей

Пользуясь документацией создадим веб-форму в админке битрикса, также создадим тестовый вопрос (сразу посмотрим id его поля в форме <?=$FORM->ShowInput('SIMPLE_QUESTION_123')?> это можно сделать во вкладке «Шаблон формы», выбрав «Использовать свой шаблон формы», закинув виджет нашего вопроса и переключившись в html-режим редактора).
После создания формы, необходимо вывести форму на фронте.
Будем выводить форму через всплывающее окно (<a href=»/test_form/index.php?ID=<?=$arElement["ID"];?>» onclick=»return hs.htmlExpand(this, { objectType: 'iframe' } )»&gtТестовая форма</a>) с подключемым компонентом в index.php-файле:

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Тестовая форма");
?>
<?
$APPLICATION->IncludeComponent("bitrix:form.result.new", "template", Array(
	"SEF_MODE" => "Y",	          // Включить поддержку ЧПУ
	"WEB_FORM_ID" => "3",	          // ID веб-формы
	"LIST_URL" => "",	          // Страница со списком результатов
	"EDIT_URL" => "",	          // Страница редактирования результата
	"SUCCESS_URL" => "",	          // Страница с сообщением об успешной отправке
	"CHAIN_ITEM_TEXT" => "",	  // Название дополнительного пункта в навигационной цепочке
	"CHAIN_ITEM_LINK" => "",	  // Ссылка на дополнительном пункте в навигационной цепочке
	"IGNORE_CUSTOM_TEMPLATE" => "N",  // Игнорировать свой шаблон
	"USE_EXTENDED_ERRORS" => "N",	  // Использовать расширенный вывод сообщений об ошибках
	"CACHE_TYPE" => "A",	          // Тип кеширования
	"CACHE_TIME" => "3600",	          // Время кеширования (сек.)
	"SEF_FOLDER" => "/test_form/",    // Каталог ЧПУ (относительно корня сайта)
	"VARIABLE_ALIASES" => ""
	),
	false
);
?>
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
?>

Используя компонент form.result.new мы формируем «страницу» заполнения формы.
Как видно по парметрам вызова метода IncludeComponent мы пользуемся нестандартным шаблоном template.
Для справки стандартный шаблон этого компонента выглядит следующим образом:
Станданртный шаблон компонента form.result.new

В нашем пользовательском шаблоне сделаны следующее изменение: в первое поле автоматически при создании формы записывется нужное значение. Делается это следующим образом:

<?
foreach ($arResult["QUESTIONS"] as $FIELD_SID => $arQuestion)
{
	if ($FIELD_SID == "SIMPLE_QUESTION_123") { // проверяем символьный id поля формы
		$name = '';
		if (CModule::IncludeModule("iblock") && $_GET["ID"]) { // подключаем модуль инфоблок с которого вызываем форму
			$res = CIBlockElement::GetByID($_GET["ID"]); // получаем объект CIBlockResult
			if ($ar_Res = $res->GetNext()) $name = $ar_Res["NAME"]; // методом GetNext() получаем значение поля NAME инфоблока
		}
?>
	<tr>
		<td>
			<?if (is_array($arResult["FORM_ERRORS"]) && array_key_exists($FIELD_SID, $arResult['FORM_ERRORS'])):?>
			<span class="error-fld" title="<?=$arResult["FORM_ERRORS"][$FIELD_SID]?>"></span>
			<?endif;?>
			<?=$arQuestion["CAPTION"]?><?if ($arQuestion["REQUIRED"] == "Y"):?><?=$arResult["REQUIRED_SIGN"];?><?endif;?>
			<?=$arQuestion["IS_INPUT_CAPTION_IMAGE"] == "Y" ? "<br />".$arQuestion["IMAGE"]["HTML_CODE"] : ""?>
		</td>
		<td><input type="text"  class="inputtext"  name="form_text_<?=$arQuestion["STRUCTURE"][0]["ID"];?>" value="<?=$name;?>" size="30" readonly /></td> <!-- подставляем полученное выше значение NAME инфоблока в нужное поле -->
	</tr>

Соответственно для использования методов класса CModule надо подключить файл с его описанием где-нибудь в начале нашего файла шаблона: <? require_once($_SERVER["DOCUMENT_ROOT"].»/bitrix/modules/catalog/mysql/catalog.php»); ?>
Соответственно, чтобы начал подгружаться созданный нами шаблон необходимо положить его в следующую папку: \bitrix\templates\.default\components\bitrix\form.result.new\template\template.php

Если у вас есть дополнения или замечания — приглашаю в комменты.

Комментариев: 2

  • 16.12.2010 ulian47:

    Очень интересный сервис.Хочу перевести свой сайт на битрикс

  • 19.07.2012 Дмитрий:

    Добрый день. Есть сайт на Битриксе, на котором есть форма для отправки сообщений. Насколько я понимаю, это и есть код формы

    IncludeComponent("bitrix:form.result.new", "", $arParams, $component); ?>

    Полагаю, для того, чтобы создать страницу благодарности, на которую будет перенаправляться пользователь, нужно куда-то вписать код

    "SUCCESS_URL" => "",

    Но куда и как, понять так и не смог. Всё перепробовал. Подскажите пожалуйста.

    Заранее спасибо.


Добавление комментария:

 css.php