Блог специалистов
28.02.2012

Добавление полей в форме обратной связи в Битриксе, в редакции "Старт"

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

Данный материал описывает добавление одного поля в форму из страндартного комлекта Битрикса "Старт".

Сначала нужно создать свое пространство имен, чтобы обновления не затирали наши изменения, нужно стараться это делать обязательно.

1. Создаем в /bitrix/components/ свою папку, например, /devfix/.

2. В вновь созданную папку /devfix/ копируем из папки /bitrix/components/bitrix/ папку /main.feedback/.

3. Далее создаем папку /devfix/ для шаблонов с новым пространством имен в /bitrix/templates/ваш_шаблон/components/.

4. Создаем в ней папку шаблона /main.feedback/ и копируем в нее все файлы отсюда /components/devfix/main.feedback/templates/.default.

5. Правим файл template.php уже из папки /components/devfix/main.feedback/templates/main.feedback/, добавляя в него одно поле, например, "Удобное время для звонка". За основу берем поле "Имя".

На его основе создаем еще одно, прописываме новые значения и вставляем где нужно, наприме сразу по полем имя и у нас получтся следующее:

......Выше код мы не трогали......

<div class="mf-name">
<div class="mf-text">
<?=GetMessage("MFT_NAME")?><?if(empty($arParams["REQUIRED_FIELDS"]) || in_array("NAME", $arParams["REQUIRED_FIELDS"])):?><span class="mf-req">*</span><?endif?>
</div>
<input type="text" name="user_name" value="<?=$arResult["AUTHOR_NAME"]?>">
</div>

<div class="mf-name">
<div class="mf-text">
<?=GetMessage("MFT_TIME")?><?if(empty($arParams["REQUIRED_FIELDS"]) || in_array("TIME", $arParams["REQUIRED_FIELDS"])):?><span class="mf-req">*</span><?endif?>
</div>
<input type="text" name="time" value="<?=$arResult["TIME"]?>">
</div>

......Ниже код мы не трогали......

6. Изменяем файл /bitrix/templates/ваш_шаблог/components/devfix/main.feedback/forma/lang/ru/template.php добавили одну строку с MFT_TIME

<?
$MESS ['MFT_NAME'] = "Ваше имя";
$MESS ['MFT_TIME'] = "Удобное время для звонка";
$MESS ['MFT_EMAIL'] = "Ваш E-mail";
$MESS ['MFT_MESSAGE'] = "Сообщение";
$MESS ['MFT_CAPTCHA'] = "Защита от автоматических сообщений";
$MESS ['MFT_CAPTCHA_CODE'] = "Введите слово на картинке";
$MESS ['MFT_SUBMIT'] = "Отправить";
?>

Шаблон готов.

7. Теперь самое сложное, это оставшаяся кастомизация компонента в /bitrix/components/devfix/main.feedback/component.php. Тут я приведу сразу готовый код измененного стандатного файла. Везде где есть слово time или TIME, это то, что добавилось в нем.

<?
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["EVENT_TIME"] = trim($arParams["EVENT_TIME"]);

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

$arParams["EVENT_TIME"] = "FEEDBACK_FORM";
$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_EMAIL" => $_POST["user_email"],
"TIME" => $_POST["time"],
"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_EMAIL"] = htmlspecialcharsEx($_POST["user_email"]);
$_SESSION["MF_TIME"] = htmlspecialcharsEx($_POST["time"]);
LocalRedirect($APPLICATION->GetCurPageParam("success=Y", Array("success")));
}
$arResult["MESSAGE"] = htmlspecialcharsEx($_POST["MESSAGE"]);
$arResult["AUTHOR_NAME"] = htmlspecialcharsEx($_POST["user_name"]);
$arResult["AUTHOR_EMAIL"] = htmlspecialcharsEx($_POST["user_email"]);
$arResult["TIME"] = htmlspecialcharsEx($_POST["time"]);
}
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());
$arResult["TIME"] = 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_TIME"]) > 0)

$arResult["TIME"] = htmlspecialcharsEx($_SESSION["MF_TIME"]);
}
}
if($arParams["USE_CAPTCHA"] == "Y")
$arResult["capCode"] = htmlspecialchars($APPLICATION->CaptchaGetCode());
$this->IncludeComponentTemplate();
?>

8. Изменяем языковой файл /bitrix/components/devfix/main.feedback/lang/ru/.parameters.php, опять же добавили лишь одну строку с TIME.

<?
$MESS ['MFP_CAPTCHA'] = "Использовать защиту от автоматических сообщений (CAPTCHA) для неавторизованных пользователей";
$MESS ['MFP_OK_MESSAGE'] = "Сообщение, выводимое пользователю после отправки";
$MESS ['MFP_OK_TEXT'] = "Спасибо, ваше сообщение принято.";
$MESS ['MFP_EMAIL_TO'] = "E-mail, на который будет отправлено письмо";
$MESS ['MFP_REQUIRED_FIELDS'] = "Обязательные поля для заполнения";
$MESS ['MFP_ALL_REQ'] = "(все необязательные)";
$MESS ['MFP_NAME'] = "Имя";
$MESS ['MFP_TIME'] = "Удобное время для звонка";
$MESS ['MFP_MESSAGE'] = "Сообщение";
$MESS ['MFP_EMAIL_TEMPLATES'] = "Почтовые шаблоны для отправки письма";
?>

9. Напоследок заходим в Административной части Настройки --> Настройки продукта --> Почтовые события --> Почтовые шаблоны в "Отправка сообщения через форму обратной связи" и вставляем там наше поле TIME:

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

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

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

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

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

Если я ничего не упустил, то теперь все должно получиться и работать.


Количество показов: 40389




Возврат к списку