Особенности создания форм на сайте под управлением «1С-Битрикс». Формы битрикс


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

<?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: [email protected]");

//параметры (кому отправить, тема письма, сообщение, от кого)

 

}

?>

 

<?}?>

 

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

forwww.com

Особенности создания форм на сайте под управлением «1С-Битрикс»

Несмотря на то, что модуль «Веб-формы» системы «1С-Битрикс» позволяет создавать на сайте довольно сложные формы с различными типами полей, существует ряд ограничений. Например, стандартным способом нельзя создать группы элементов списка (html – элемент OPTGROUP) или поместить в атрибут value текстового поля выражение PHP.

Недавно при создании формы мне как раз было нужно поместить в скрытое поле дату и время, на момент заполнения формы посетителем сайта. В этой статье я опишу каким образом это было сделано. При создании статьи я использовал демо-версию системы для разработчиков. В ней уже есть готовая форма «Анкета посетителя сайта», в нее я и добавлю скрытое поле.

Для начала нужно включить расширенный режим управления веб-формами. Делается это в настройках сайта: Настройки ˃ Настройки продукта ˃ Настройки модулей ˃ Веб-формы. Нужно снять отметку с флажка «Использовать упрощённый режим редактирования форм».

При создании шаблона веб-формы нужно выбрать опцию «Использовать шаблон формы по умолчанию».

Добавляем новое поле. На закладке «Ответ» ничего не заполняем, только выбираем тип “hidden”.

После добавления остальных необходимых полей размещаем форму на странице сайта. В моем случае я использую компонент «Заполнение веб-формы» (“bitrix:form.result.new”). Копируем шаблон компонента в папку с шаблоном сайта. В демо-версии путь к шаблону будет такой (я назвал копию шаблона custom): /bitrix/templates/books/components/bitrix/form.result.new/custom/

Теперь самое время объяснить, каким образом система формирует имена полей в формах. Имя поля имеет вид: form_ТИП ПОЛЯ_ИДЕНТИФИКАТОР ПОЛЯ. Эти данные можно посмотреть в массиве $arResult["QUESTIONS"], если вывести его при помощи PHP функции print_r(), разместив ее в коде файла шаблона template.php.

Таким образом, имя нового поля будет следующим: form_hidden_29.

Открываем файл template.php в текстовом редакторе, например, в Notepad++ и находим в нем код, где обрабатывается в цикле массив $arResult["QUESTIONS"]. Внутри цикла вставляем код:

PHP

<? if($FIELD_SID=="test_field"){ echo"<input type=\"hidden\" name=\"form_hidden_29\" value=\"".date('d-m-Y H:i:s')."\">"; } else{ echo $arQuestion["HTML_CODE"]; } ?>

В итоге получится следующий код внутри файла шаблона:

PHP

<? foreach ($arResult["QUESTIONS"] as $FIELD_SID => $arQuestion) { if ($arQuestion['STRUCTURE'][0]['FIELD_TYPE'] == 'hidden') { // мой код if($FIELD_SID=="test_field"){ echo"<input type=\"hidden\" name=\"form_hidden_29\" value=\"".date('d-m-Y H:i:s')."\">"; } else{ echo $arQuestion["HTML_CODE"]; } } else { ?> <tr> <td> <?if (is_array($arResult["FORM_ERRORS"]) && array_key_exists($FIELD_SID, $arResult['FORM_ERRORS'])):?> <span 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><?=$arQuestion["HTML_CODE"]?></td< </tr> <? } } //endwhile ?>

Теперь значением атрибута value скрытого поля test_field будет дата заполнения формы пользователем.

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

mattweb.ru

Изменение формы обратной связи в Битрикс

<?

if(!defined("B_PROLOG_INCLUDED")||B_PROLOG_INCLUDED!==true)die();

$arParams["USE_CAPTCHA"] = (($arParams["USE_CAPTCHA"] != "N" && !$USER->IsAuthorized()) ? "Y" : "N");

$arParams["EVENT_NAME"] = trim($arParams["EVENT_NAME"]);

if(strlen($arParams["EVENT_NAME"]) < = 0)

    $arParams["EVENT_NAME"] = "FEEDBACK_FORM";

$arParams["EMAIL_TO"] = trim($arParams["EMAIL_TO"]);

if(strlen($arParams["EMAIL_TO"]) <= 0)

    $arParams["EMAIL_TO"] = COption::GetOptionString("main", "email_from");

$arParams["OK_TEXT"] = trim($arParams["OK_TEXT"]);

if(strlen($arParams["OK_TEXT"]) <= 0)

    $arParams["OK_TEXT"] = GetMessage("MF_OK_MESSAGE");

 

if($_SERVER["REQUEST_METHOD"] == "POST" && strlen($_POST["submit"]) > 0)

{

    if(check_bitrix_sessid())

    {

        if(empty($arParams["REQUIRED_FIELDS"]) || !in_array("NONE", $arParams["REQUIRED_FIELDS"]))

        {

            if((empty($arParams["REQUIRED_FIELDS"]) || in_array("NAME", $arParams["REQUIRED_FIELDS"])) && strlen($_POST["user_name"]) < = 1)

                $arResult["ERROR_MESSAGE"][] = GetMessage("MF_REQ_NAME");        

            if((empty($arParams["REQUIRED_FIELDS"]) || in_array("EMAIL", $arParams["REQUIRED_FIELDS"])) && strlen($_POST["user_email"]) <= 1)

                $arResult["ERROR_MESSAGE"][] = GetMessage("MF_REQ_EMAIL");

            if((empty($arParams["REQUIRED_FIELDS"]) || in_array("MESSAGE", $arParams["REQUIRED_FIELDS"])) && strlen($_POST["MESSAGE"]) <= 3)

                $arResult["ERROR_MESSAGE"][] = GetMessage("MF_REQ_MESSAGE");

        }

        if(strlen($_POST["user_email"]) > 1 && !check_email($_POST["user_email"]))

            $arResult["ERROR_MESSAGE"][] = GetMessage("MF_EMAIL_NOT_VALID");

        if($arParams["USE_CAPTCHA"] == "Y")

        {

            include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/captcha.php");

            $captcha_code = $_POST["captcha_sid"];

            $captcha_word = $_POST["captcha_word"];

            $cpt = new CCaptcha();

            $captchaPass = COption::GetOptionString("main", "captcha_password", "");

            if (strlen($captcha_word) > 0 && strlen($captcha_code) > 0)

            {

                if (!$cpt->CheckCodeCrypt($captcha_word, $captcha_code, $captchaPass))

                    $arResult["ERROR_MESSAGE"][] = GetMessage("MF_CAPTCHA_WRONG");

            }

            else

                $arResult["ERROR_MESSAGE"][] = GetMessage("MF_CAPTHCA_EMPTY");

 

        }            

        if(empty($arResult))

        {

            $arFields = Array(

                "AUTHOR" => $_POST["user_name"],

                "AUTHOR_TELL" => $_POST["user_tell"],

                "AUTHOR_TIME" => $_POST["user_time"],

                "AUTHOR_EMAIL" => $_POST["user_email"],

                "EMAIL_TO" => $arParams["EMAIL_TO"],

                "TEXT" => $_POST["MESSAGE"],

            );

            if(!empty($arParams["EVENT_MESSAGE_ID"]))

            {

                foreach($arParams["EVENT_MESSAGE_ID"] as $v)

                    if(IntVal($v) > 0)

                        CEvent::Send($arParams["EVENT_NAME"], SITE_ID, $arFields, "N", IntVal($v));

            }

            else

                CEvent::Send($arParams["EVENT_NAME"], SITE_ID, $arFields);

            $_SESSION["MF_NAME"] = htmlspecialcharsEx($_POST["user_name"]);

            $_SESSION["MF_TELL"] = htmlspecialcharsEx($_POST["user_tell"]);

            $_SESSION["MF_TIME"] = htmlspecialcharsEx($_POST["user_time"]);

            $_SESSION["MF_EMAIL"] = htmlspecialcharsEx($_POST["user_email"]);

            LocalRedirect($APPLICATION->GetCurPageParam("success=Y", Array("success")));

        }

        

        $arResult["MESSAGE"] = htmlspecialcharsEx($_POST["MESSAGE"]);

        $arResult["AUTHOR_TELL"] = htmlspecialcharsEx($_POST["user_tell"]);

        $arResult["AUTHOR_TIME"] = htmlspecialcharsEx($_POST["user_time"]);

        $arResult["AUTHOR_NAME"] = htmlspecialcharsEx($_POST["user_name"]);

        $arResult["AUTHOR_EMAIL"] = htmlspecialcharsEx($_POST["user_email"]);

    }

    else

        $arResult["ERROR_MESSAGE"][] = GetMessage("MF_SESS_EXP");

}

elseif($_REQUEST["success"] == "Y")

{

    $arResult["OK_MESSAGE"] = $arParams["OK_TEXT"];

}

 

if(empty($arResult["ERROR_MESSAGE"]))

{

    if($USER->IsAuthorized())

    {

        $arResult["AUTHOR_NAME"] = htmlspecialcharsEx($USER->GetFullName());

        $arResult["AUTHOR_EMAIL"] = htmlspecialcharsEx($USER->GetEmail());

    }

    else

    {

        if(strlen($_SESSION["MF_NAME"]) > 0)

            $arResult["AUTHOR_NAME"] = htmlspecialcharsEx($_SESSION["MF_NAME"]);

        if(strlen($_SESSION["MF_EMAIL"]) > 0)

            $arResult["AUTHOR_EMAIL"] = htmlspecialcharsEx($_SESSION["MF_EMAIL"]);

        if(strlen($_SESSION["MF_TELL"]) > 0)

            $arResult["TELL"] = htmlspecialcharsEx($_SESSION["MF_TELL"]);

        if(strlen($_SESSION["MF_TIME"]) > 0)

            $arResult["TIME"] = htmlspecialcharsEx($_SESSION["MF_TELL"]);

    }

}

 

if($arParams["USE_CAPTCHA"] == "Y")

    $arResult["capCode"] =  htmlspecialchars($APPLICATION->CaptchaGetCode());

 

$this->IncludeComponentTemplate();

?>

arozhk.ru


Prostoy-Site | Все права защищены © 2018 | Карта сайта