Архив метки: форма обратной связи

Как редактировать форму обратной связи на битрикс?(Добавление полей в форме обратной связи на битриксе).

Как редактировать форму обратной связи на битрикс?(Добавление полей в форме обратной связи на битриксе)

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

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

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

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

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

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

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

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

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

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

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

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

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

6. Изменяем файл /bitrix/templates/ваш_шаблог/components/dapit/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/dapit/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/dapit/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#

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

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