Изменение формы обратной связи в Битрикс
Если в редакцию Битрикс не входит компонент веб-формы, но очень хочется добавить свою форму, то можно ее создать на основе формы обратной связи или просто изменить существующую добавив нужные поля и изменив уже существующие.
Поскольку форма обратной связи в битрикс является стандартным компонентом движка она обновляется вместе с движком, и чтобы обновления не касались изменений внесенных в форму руками нужно сделать свое пространство имен. Для этого копируются основные папки модуля и создаются новые.
Создаем папки:
/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, добавляя в него новое поле, например, «Телефон». За основу берем любое готовое поле.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<div class="mf-name"> <div class="mf-text"> <?=GetMessage("MFT_TELL")?><? if(empty($arParams["REQUIRED_FIELDS"]) || in_array("TELL", $arParams["REQUIRED_FIELDS"])):?><span class="mf-req">*</span><? endif?> </div> <input type="text" name="user_tell" value="<?=$arResult["AUTHOR_TELL"]?/>"> </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="user_time" value="<?=$arResult["AUTHOR_TIME"]?/>"> </div> |
Изменяем файл /bitrix/templates/ваш_шаблон/components/newform/main.feedback/.default/lang/ru/template.php
1 2 3 4 5 6 7 8 9 10 |
<?php $MESS ['MFT_NAME'] = "Ваше Имя"; $MESS ['MFT_EMAIL'] = "Ваш E-mail"; $MESS ['MFT_TELL'] = "Контактный телефон"; $MESS ['MFT_TIME'] = "Удобное время для звонка"; $MESS ['MFT_MESSAGE'] = "Сообщение"; $MESS ['MFT_CAPTCHA'] = "Защита от автоматических сообщений"; $MESS ['MFT_CAPTCHA_CODE'] = "Введите слово на картинке"; $MESS ['MFT_SUBMIT'] = "Отправить"; ?> |
Изменяем файл /bitrix/components/newform/main.feedback/component.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
<? 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(); ?> |
И добавить код для вывода компонента в одну из страниц шаблона:
1 2 3 4 5 6 7 8 9 10 11 |
<?php $APPLICATION->IncludeComponent( "newform:main.feedback", "", Array( "USE_CAPTCHA" => "Y", "OK_TEXT" => "Спасибо, ваше сообщение принято.", "EMAIL_TO" => "куда@отправлять.ру", "REQUIRED_FIELDS" => array(), "EVENT_MESSAGE_ID" => array() ) );?> |
Также нужно изменить шаблон письма в Настройки > Настройки продукта > Почтовые события > Почтовые шаблоны в «Отправка сообщения через форму обратной связи»
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Информационное сообщение сайта #SITE_NAME# ------------------------------------------ Вам было отправлено сообщение через форму обратной связи Автор: #AUTHOR# E-mail автора: #AUTHOR_EMAIL# Телефон: #AUTHOR_TELL# Удобное время для звонка: #AUTHOR_TIME# Текст сообщения: #TEXT# Сообщение сгенерировано автоматически. |
не работает, номер телефона не приходит на почту
всё нормально работает!
годно, респект автору