November 19, 2012

Битрикс. Веб-форма и разные адресаты.

Всем привет!

Не так давно (а конкретно - год назад), я писал пост с примером реализации отправки почты из веб-формы в 1С-Битрикс разным адресатам. Сейчас возникла необходимость снова сделать подобное, только на более серьезном проекте где костыли с прописыванием адресов прямо в init.php не прокатят =)

Поэтому встречайте новый вариант реализации данного решения.

Приготовления: Итак, будем считать что у нас уже готова веб-форма, почтовое событие и почтовый шаблон. В веб-форме есть возможность выбрать ДЦ (пусть будет Москва и Санкт-Петербург) и в зависимости от выбранного варианта результаты формы будут уходить на разные почтовые адреса.

1) Для начала скопируем почтовый шаблон (Настройки - Почтовые события - Почтовые шаблоны), для этого в контекстном меню конкретного шаблона выбираем - “добавить копию”.

2) У скопированного почтового шаблона в настройках меняем адрес почты на который должно слаться сообщение для Санкт-Петербурга и в название добавляем спб (чтобы не спутаться).

3) Затем идем в настройки веб-формы (Сервисы - Веб-формы - Настройка форм) и на вкладке “дополнительно” снимаем галки с обоих почтовых шаблонов (отправкой мы будем управлять сами).

4) В веб-форме должен присутствовать вопрос “Выберите ДЦ” с символьным кодом DC и вариантами ответа MSK и SPB.

5) Открываем /bitrix/php_interface/init.php и создаем свой обработчик перехватывающий почтовое событие.

Осторожно! Ошибка в синтаксисе в данном скрипте чревата выпадением пустой белой страницы с ошибкой php вместо вашего красивого сайта.

<?php
    //...

    // зарегистрируем функцию как обработчик двух событий
    AddEventHandler('form', 'onAfterResultAdd', Array("MyFormClass","onAfterResultAddHandler"));
    class MyFormClass
    {
        function onAfterResultAddHandler($WEB_FORM_ID, $RESULT_ID)
        {

            // действие обработчика распространяется только на форму с ID=41
            if ($WEB_FORM_ID == 41) {
                //Вытаскиваем значение ДЦ
                $arAnswer = CFormResult::GetDataByID($RESULT_ID,array("DC"),$arResult,$arAnswer2);
                $dc_value = $arAnswer['DC']['0']['VALUE']; //Тут значение ДЦ

                if($dc_value=="MSK") $dc_value = 100; //100 - id почтового шаблона для Москвы
                if($dc_value=="SPB") $dc_value = 101; //101 - id почтового шаблона для СпБ

                //Почтовое событие
                CFormResult::Mail($RESULT\_ID,intval($dc\_value)); //Тут продолжение стандартной отправки с кастом шаблоном
            }
        }
    }

Вот собственно и все =) Если у вас появились какие то вопросы пишите их в комментариях - оперативно отвечу.