1С-Битрикс как сохранить результат веб формы при помощи CFormResult::Add

При помощи данного кода вы научитесь добавлять результаты сразу в админку, причем абсолютно из любой HTML формы. Использовать мы будем CFormResult::Add. Рассмотрим, как можно сохранять результат в 1С-Битрикс при помощи стандартного модуля.

Как добавить запись в админку на битриксе в веб-формы

Предположим, что вы уже настроили поля для своей формы, создали статусы и дали нужные права (там довольно хитрая схема даже на этапе создания 🙂 ). Нам понадобится эта таблица из документации в дальнейшем.

Ссылка на официальную документацию по полям — https://dev.1c-bitrix.ru/api_help/form/htmlnames.php

Посмотрите как задаются имена полей для различных типов — form_text_answer_id для обычного текстового поля input type=»text», form_hidden_answer_id для скрытого поля ну и т.д.

Как вы сами понимаете, используя API, мы скорее всего не будем использовать модуль с самой формой, а напишем свой собственный HTML — в моем случае часть данных передается через input[type=text] а другая через input[type=hidden], НО при этом тип полей в настройках формы hidden. После отправки формы мы попадаем на страницу с благодарностью, и код ее приблизительно такой:

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");?>

<?if (isset($_POST['email']) && isset($_POST['allzakaz'])) {?>

	<?
	//проверяем на наличие значений в массиве $_POST
	if (isset($_POST['name'])) $name = $_POST['name'];
	if (isset($_POST['email'])) $email = $_POST['email'];
	if (isset($_POST['tel'])) $phone = $_POST['tel'];
	if (isset($_POST['allzakaz'])) $allzakaz = $_POST['allzakaz'];
	if (isset($_POST['allcoll'])) $allcoll = $_POST['allcoll'];
	if (isset($_POST['allprice'])) $allprice = $_POST['allprice'];
	?>

	<?
	//формируем массив с параметрами 18, 19 и т.д. ID полей
	$arValues = array (
		"form_hidden_18" => $name,
		"form_hidden_19" => $email,
		"form_hidden_20" => $phone,
		"form_hidden_22" => $allcoll,
		"form_hidden_23" => $allprice,
		"form_hidden_24" => $allzakaz
	);
	?>

	<?
	//задаем ID нашей формы, можно глянуть в админке
	$FORM_ID = 4;
	//подключаем модуль форм, т.к. без него скорей всего будет ошибка
	CModule::IncludeModule("form");

	//если результат добавился в веб форму, передаем ID и поля
	if ($RESULT_ID = CFormResult::Add($FORM_ID, $arValues)) {

		//пишем примитивный текст письма
		$message = $name.", ваш заказ подтвержден. В ближайшее время с вами свяжется менеджер.\n\nСостав заказа:\n".$allzakaz;
		//отправляем письмо на email который пользователь ввел в нашей форме
		mail($email, "Подтвержден заказ номер $RESULT_ID на site.ru", $message, "From: info@site.ru");
		//параметры (кому отправить, тема письма, сообщение, от кого)

	}
	?>

<?}?>

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

После того как код отработает, наша форма добавляет в админку новый результат с соответствующими полями. На самом деле, при помощи подобной схемы можно реализовывать неплохую обратную связь с клиентом, вплоть до симуляции Каталога товаров и даже интернет магазина, но это уже совсем другая история 🙂 .

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

Какие услуги предоставляю:
- Создание сайтов, шаблонов и компонентов на 1С-Битрикс;
- Разработка функционала с нуля и доработка кода на уже созданных проектах;
- Адаптивная вёрстка макетов и натяжка на Битрикс;
- Парсинг файлов и выгрузка на сайт (форматы - CSV, XML, XLSX, JSON)
- Интеграции со сторонними сервисами по API;
- Многоязычные версии и многое другое.

Если у вас остались вопросы, свяжитесь со мной любым удобным для вас способом или оставьте комментарий внизу.
E-mail: dmitriyribka@gmail.com
Skype: cinemacreaterus

4 комментария

  1. Отличное решение, особенно когда есть тестовая площадка и боевая с различными ID в базах. Переносим на бой и получаем кирпич

    1. Всё верно, айди будут другие, вы правильно подметили. Но цель статьи была показать как работает апи. Есть стандартный компонент по веб формам которым можно пользоваться в большинстве случаев

    1. поставьте событие онклик чтобы js-ом отправляло в яндекс или сервис который вы используете. может быть стоит рассмотреть еще событие onsubmit если я вас правильно понял конечно

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *