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

Если в редакцию Битрикс не входит компонент веб-формы, но очень хочется добавить свою форму, то можно ее создать на основе формы обратной связи или просто изменить существующую добавив нужные поля и изменив уже существующие.

Поскольку форма обратной связи в битрикс является стандартным компонентом движка она обновляется вместе с движком, и чтобы обновления не касались изменений внесенных в форму руками нужно сделать свое пространство имен. Для этого копируются основные папки модуля и создаются новые.

Создаем папки:
/bitrix/components/newform/
/bitrix/templates/ваш_шаблон/components/newform/

Копируем:
/bitrix/components/bitrix/main.feedback/ в /bitrix/components/newform/main.feedback/
/components/main.feedback/ в /bitrix/templates/ваш_шаблон/components/newform/main.feedback/

Правим файл /components/newform/main.feedback/templates/main.feedback/template.php, добавляя в него новое поле, например, «Телефон». За основу берем любое готовое поле.

*

">

*

">

Изменяем файл /bitrix/templates/ваш_шаблон/components/newform/main.feedback/.default/lang/ru/template.php


Изменяем файл /bitrix/components/newform/main.feedback/component.php


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();
?>

И добавить код для вывода компонента в одну из страниц шаблона:


IncludeComponent(
"newform:main.feedback",
"",
Array(
"USE_CAPTCHA" => "Y",
"OK_TEXT" => "Спасибо, ваше сообщение принято.",
"EMAIL_TO" => "куда@отправлять.ру",
"REQUIRED_FIELDS" => array(),
"EVENT_MESSAGE_ID" => array()
)
);?>

Также нужно изменить шаблон письма в Настройки > Настройки продукта > Почтовые события > Почтовые шаблоны в «Отправка сообщения через форму обратной связи»

Информационное сообщение сайта #SITE_NAME#
------------------------------------------

Вам было отправлено сообщение через форму обратной связи

Автор: #AUTHOR#
E-mail автора: #AUTHOR_EMAIL#
Телефон: #AUTHOR_TELL#
Удобное время для звонка: #AUTHOR_TIME#

Текст сообщения:
#TEXT#

Сообщение сгенерировано автоматически.


Опубликовано

в

от

Метки:

Комментарии

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

  1. Аватар пользователя Evgeni
    Evgeni

    не работает, номер телефона не приходит на почту

    1. Аватар пользователя вапвап
      вапвап

      всё нормально работает!

  2. Аватар пользователя Влад
    Влад

    годно, респект автору

Добавить комментарий для Evgeni Отменить ответ

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

девять + девятнадцать =