В начало блога На главную

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

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

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

Создаем папки:
/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#

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

Рассказать:


  1. Evgeni:

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

    1. вапвап:

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

  2. Влад:

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