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

Форма Битрикс на разные email при выборе ответа.

Иногда нужно сделать так, чтобы при выборе ответа в поле, результат формы отправлялся на разные емайлы. Будем делать на 2-а емейда используя два шаблона, якобы у нас, например, 2-а дилерских центра (ДЦ). Опишем по шагам как это делается.

1. Создаем стандартную форму в Сервисы - Веб-формы и во время создания создаем наш вопрос с выбором ДЦ, а также ставим галочку "Отправлять результаты по email". Сохраняем.

2. Заходим в создавшийся почтовый шаблон и копируем его содержимое куда-нибудь в блокнот, т.к. он у нас этот шаблон далее будет удален, а переписывать поля заново не очень хочется.

3. Заходим опять с нашу форму и убираем галочку "Отправлять результаты по email", будет сообщено, что связанные шаблоны будут удалены, но мы то себе в пункте 2-а сохранили его содержимое. Сохраняем.

4. Заходим в почтовые шаблоны и создаем новый шаблон. В типе почтового события выбираем нашу созданную форму. В поле От кого пишем стандартный email админа или #DEFAULT_EMAIL_FROM#. В поле Кому пишем емаил или емайлы первого дилерского центра. Тему пишем, чтобы было понятно потом, например, "Форма заказа ДЦ Москва", а в другой потом напишем "Форма заказа ДЦ Краснодар", т.е. потом чтобы мы видели в списке какой шаблон к какому ДЦ относится. Сохраняем.

5. Опять в почтовых шаблонах, в контекстном меню нашего нового шаблона выбираем пункт "Добавить копию". Тут заполняем уже под второй ДЦ, т.е. в поле Кому пишем емайлы второго ДЦ, а тему, как ранее было сказано, например, "Форма заказа ДЦ Краснодар". Сохраняем и шаблоны у нас готовы.

6. Идем по FTP в bitrix/php_interface/init.php

Если файл пустой, то там вставляем код:

<?
AddEventHandler('form', 'onAfterResultAdd', Array("MyFormClass","onAfterResultAddHandler"));
class MyFormClass
{
function onAfterResultAddHandler($WEB_FORM_ID, $RESULT_ID)
{

// действие обработчика распространяется только на форму с ID=1
if ($WEB_FORM_ID == 1)
{
//Вытаскиваем значение ДЦ
$arAnswer = CFormResult::GetDataByID($RESULT_ID,array('SIMPLE_QUESTION_538'),$arResult,$arAnswer2);
$dc_value = $arAnswer['SIMPLE_QUESTION_538']['0']['ANSWER_ID']; //Тут значение ДЦ
if($dc_value=="150") $dc_value = 45; //45 - id почтового шаблона для Москвы
if($dc_value=="15") $dc_value = 44; //44 - id почтового шаблона для Краснодар
//Почтовое событие
CFormResult::Mail($RESULT_ID,intval($dc_value)); //Тут продолжение стандартной отправки с кастом шаблоном
}

}

}
?>



Если не пустой, то уж сообразите как этот код туда встроить.

7. Теперь самое интересное. Подгоняем данные под свою форму.
$WEB_FORM_ID == 1 - тут ставим вместо 1 ID своей формы.
SIMPLE_QUESTION_538 - тут надо вставить вместо 538 цифры ID вашего вопроса, где выбирается Дилерский центр и он не сходится с обычным ID в списке вопросов, и у меня не получилось его найти простым способом. Ниже я напишу как я его искал.
$dc_value=="150" и $dc_value=="15" - тут вместо 150 и 15 нужно вставить ваши ID ответов, т.е. 150 у меня был ID ответа ДЦ Москва, а 15 - ДЦ Краснодар, у Вас будут свои. Опять же ниже напишу как и их искать.
$dc_value = 45; и $dc_value = 44; - это ID почтовых шаблонов, у меня видно, что 45 это ID шаблона для ДЦ Москва и далее ясно.

8. Ищем наши ID-шникии. Нужно заполнить форму один раз с выбором ДЦ Москвы и один раз с выбором ДЦ Краснодар. Пройти в результаты и посмотреть ID этих результатов.

Далее создаем по FTP в корне файл типа test.php и в него вставляем код и в коде прописываем ID первого результата:

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");?>

<?
CModule::IncludeModule('form');
$RESULT_ID = тут_цифрами_без_кавычек_пишем_ID_результата; // ID результата

// получим данные по всем вопросам
$arAnswer = CFormResult::GetDataByID(
$RESULT_ID,
array(),
$arResult,
$arAnswer2);
// выведем поля результата
echo "<pre>"; print_r($dc_value); echo "</pre>";

// выведем значения ответов
echo "<pre>"; print_r($arAnswer); echo "</pre>";

// выведем значения ответов в несколько ином формате
echo "<pre>"; print_r($arAnswer2); echo "</pre>";
?>

 

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Заходим по http://нашсайт/test.php и видим его параметры, тут вы найдете параметр типа [SIMPLE_QUESTION_746] => Array([0],... который у вас отвечает за выбор ДЦ. Именно с [0], а то там еще есть один с цифрами. Далее именно в массиве этого вопроса смотрим [ANSWER_ID], ну а [ANSWER_TEXT] будет написан ваш ДЦ. Вот этот самый [ANSWER_ID] и будет ID вашего ответа, т.е. вместо $dc_value=="150" пишем $dc_value=="тут уже ваше значение ANSWER_ID".

Потом в test.php пишем $RESULT_ID для второго ДЦ и смотрим какой у него в том же месте [ANSWER_ID] и пишем его туда, где у меня $dc_value=="15".

Думаю, принцип уловили. Дерзайте!

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




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