вход   

Макросы в рассылке

весь список раздела "Шпаргалка"


В файле /bitrix/php_interface/init.php храняться обработччики выполняющихся событий. В этот файл необходимо добавить следующий код:

php
 // регистрируем обработчик 
        AddEventHandler("subscribe", "BeforePostingSendMail", Array("CatchSubscriter", "beforePostingSendMailHandler"));
        class CatchSubscriter{
            // создаем обработчик события "BeforePostingSendMail" 
            function beforePostingSendMailHandler(&$arFields){
                //$USER_NAME = "Подписчик"; 
                //Попробуем найти подписчика. 
                $rs = CSubscription::GetByEmail($arFields["EMAIL"]);
                if($ar = $rs->Fetch()){
                    //print_r($ar);
                    $arFields["BODY"] = str_replace("#CONFIRM_CODE#", $ar["CONFIRM_CODE"], $arFields["BODY"]);
                    $arFields["BODY"] = str_replace("#ID#", $ar["ID"], $arFields["BODY"]);
                    $arFields["BODY"] = str_replace("#EMAIL#", $ar["EMAIL"], $arFields["BODY"]);
                }
                //$arFields["BODY"] = str_replace("#NAME#", $USER_NAME, $arFields["BODY"]); 
                return $arFields;
            }
        }

Здесь в функции AddEventHandler("subscribe", "BeforePostingSendMail", Array("CatchSubscriter", "beforePostingSendMailHandler"));
Первый аргумент — название используемого модуля подписки и рассылок.
Второй аргумент — название события.
Третий аргумент — массив с параметрами обработчика события.

Так при возникновении события BeforePostingSendMail т. е перед самой отправкой письма извлекаются почтовый адрес и текст письма из переменной $arFields. Зная email на который отправляется письмо — устанавливаем личность получателя, его ID и т. п. Текст письма проверяем на наличие ключей заданного формата (#EMAIL#, #ID#), и тут же их подменяем на нужные значения. Не трудно догадаться, что стандартное письмо рассылки можно расширить и другими парметрами.

Чтобы проверить работу можно отправить рассылку с следующим содержанием:

html
<p>email: #EMAIL#</p>
<p>id: #ID#</p>
<p>confirm code: #CONFIRM_CODE#"</p>
<a href="http://www.tetrapolis.ru/service/edit_subscribe.php?ID=#ID#&CONFIRM_CODE=#CONFIRM_CODE#">Сменить адрес подписки</a>
<a href="http://www.tetrapolis.ru/service/edit_subscribe.php?ID=#ID#&CONFIRM_CODE=#CONFIRM_CODE#&action=unsubscribe">Отписаться</a>
Ссылки должны вести на страницу с компонентом редактирования рассылки.



Оригинал статьи: