вверх
29/07 2017
назад

Часть 8. Подключение почтовых нотификаций

Нам осталось решить только один вопрос, чтобы модуль «Гостевые книги» мог считаться полноценным механизмом – необходимо зарегистрировать свои почтовые шаблоны и генерировать нотификации при добавлении записей гостевых книг.

Для этого нам тоже не придется изобретать велосипед, поскольку мы сможем воспользоваться готовыми примерами кода существующих модулей БУС. В частности, можно взять за основу код, который разработан для модуля «Голосования». Скопируем каталог “bitrix/modules/vote/install/events/” в “bitrix/modules/ix_guestbook/install/”. Нам надо лишь слегка переделать описанные там шаблоны для своих целей. Начнем с файла del_events.php:

<?

$DB->Query("DELETE FROM b_event_type WHERE EVENT_NAME in ('IX_RECORD_NEW')");

$DB->Query("DELETE FROM b_event_message WHERE EVENT_NAME in ('IX_RECORD_NEW')");

?>

Здесь мы заменили название нотификации VOTE_NEW на IX_RECORD_NEW. Именно так будут называться наши шаблоны, которые мы опишем в файле «set_events.php»:

<?

include($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/ix_guestbook/install/events/del_events.php");

 

/************************************************************************************************

                                                                                Типы сообщений

************************************************************************************************/

 

function UET($EVENT_NAME, $NAME, $LID, $DESCRIPTION)

{

        global $DB, $I;

        $et = new CEventType;

        $et->Add(

                        Array(

                        "LID"                        => $LID,

                        "EVENT_NAME"        => $EVENT_NAME,

                        "NAME"                        => $NAME,

                        "DESCRIPTION"        => $DESCRIPTION

                        )

                );

}

 

UET(

"IX_RECORD_NEW","Новая запись в книге","ru",

"

#GB_TITLE# - Название гостевой книги

#ID# - ID записи

#DATETIME# - дата и время добавления записи

#USER_NAME# - имя пользователя

#RECORD_TEXT# - текст сообщения

#LOGIN# - логин

#USER_ID# - ID пользователя

#STAT_GUEST_ID# - ID посетителя модуля статистики

#SESSION_ID# - ID сессии модуля статистики

#IP# - IP адрес

#IBLOCK_TYPE# - тип инфоблока

#IBLOCK_ID# - ID инфоблока

"

);

 

UET(

"IX_RECORD_NEW","New guestbook record","en",

"

#GB_TITLE# - guestbook name

#ID# - record ID

#DATETIME# - date and time of record publication

#USER_NAME# - user's name

#RECORD_TEXT# - record text

#LOGIN# - login

#USER_ID# - user's ID

#STAT_GUEST_ID# - guest ID of statistics module

#SESSION_ID# - session ID of statistics module

#IP# - IP address

#IBLOCK_TYPE# - information block type

#IBLOCK_ID# - information block ID

"

);

 

/************************************************************************************************

                                                                                Шаблоны сообщений

************************************************************************************************/

 

 

//************************************************************************************************

 

$arr["EVENT_NAME"] = "IX_RECORD_NEW";

$arr["SITE_ID"] = "ru";

$arr["EMAIL_FROM"] = "#DEFAULT_EMAIL_FROM#";

$arr["EMAIL_TO"] = "#DEFAULT_EMAIL_FROM#";

$arr["BCC"] = "";

$arr["SUBJECT"] = "#SITE_NAME#: Новая запись в гостевой книге \"[#IBLOCK_ID#] #GB_TITLE#\"";

$arr["BODY_TYPE"] = "text";

$arr["MESSAGE"] = "

Новая запись

 

Гостевая книга - [#GB_ID#] #GB_TITLE#

Сообщение:

 

#RECORD_TEXT#

 

--------------------------------------------------------------

 

Посетитель  - [#USER_ID#] (#LOGIN#) #USER_NAME# [#STAT_GUEST_ID#]

Сессия      - #SESSION_ID#

IP адрес    - #IP#

Дата/Время  - #DATETIME#

 

Для редактирования данной записи воспользуйтесь ссылкой:

http://#SERVER_NAME#/bitrix/admin/iblock_element_edit.php?WF=Y&ID=#ID#&type=#IBLOCK_TYPE#&IBLOCK_ID=...

 

Письмо сгенерировано автоматически.

";

$arTemplates[] = $arr;

 

//************************************************************************************************

 

$arr["EVENT_NAME"] = "IX_RECORD_NEW";

$arr["SITE_ID"] = "en";

$arr["EMAIL_FROM"] = "#DEFAULT_EMAIL_FROM#";

$arr["EMAIL_TO"] = "#DEFAULT_EMAIL_FROM#";

$arr["BCC"] = "";

$arr["SUBJECT"] = "#SITE_NAME#: New record of guestbook \"[#IBLOCK_ID#] #GB_TITLE#\"";

$arr["BODY_TYPE"] = "text";

$arr["MESSAGE"] = "

New record

 

Guestbook  - [#GB_ID#] #GB_TITLE#

Message:

 

#RECORD_TEXT#

 

--------------------------------------------------------------

 

Guest      - [#USER_ID#] (#LOGIN#) #USER_NAME# [#STAT_GUEST_ID#]

Session    - #SESSION_ID#

IP address - #IP#

Date/Time  - #DATETIME#

 

To edit the record visit link:

http://#SERVER_NAME#/bitrix/admin/iblock_element_edit.php?WF=Y&ID=#ID#&type=#IBLOCK_TYPE#&IBLOCK_ID=...

 

Automatically generated message.

";

$arTemplates[] = $arr;

 

//************************************************************************************************

 

$emess = new CEventMessage;

foreach ($arTemplates as $Template)

{

        $arFields = Array(

                "ACTIVE"                => "Y",

                "EVENT_NAME"        => $Template["EVENT_NAME"],

                "LID"                        => $Template["SITE_ID"],

                "EMAIL_FROM"        => $Template["EMAIL_FROM"],

                "EMAIL_TO"                => $Template["EMAIL_TO"],

                "BCC"                        => $Template["BCC"],

                "SUBJECT"                => $Template["SUBJECT"],

                "MESSAGE"                => $Template["MESSAGE"],

                "BODY_TYPE"                => $Template["BODY_TYPE"]

                );

        $emess->Add($arFields);

}

?>

Основной здесь является функция с загадочным названием UET, которая регистрирует тип шаблона в системе. Мы создаем два типа – на русском и английском языках, дважды вызывая UET с разными параметрами. В описании каждого типа шаблона желательно перечислить те параметры, которые потом будут доступны администратору. Мы сами придумываем эти параметры, никаких ограничений здесь нет, но они должны быть осмыслены.

После создания типов мы создаем два готовых шаблона, которые будут доступны в разделе администрирования. Заполняем массив $arr и добавляем его в $arTemplates[], чтобы потом создать шаблоны при помощи вызова «new CEventMessage».

Добавим пару строк в «/ix_guestbook/install/index.php», чтобы наши шаблоны автоматически создавались при установке модуля:

        function DoInstall()

        {

                global $DB, $APPLICATION; // добавлено

                RegisterModule("ix_guestbook");

                // Сообщения

                include($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/ix_guestbook/install/events/set_events.php"); // добавлено

 

        }

 

        function DoUninstall()

        {

                global $DB, $APPLICATION; // добавлено

                UnRegisterModule("ix_guestbook");

                // Сообщения

                include($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/ix_guestbook/install/events/del_events.php"); // добавлено

 

        }

Все очень просто. Удалив модуль, и снова установив его, мы обнаружим новые шаблоны в настройках системы, что и требовалось.

Нам остается сделать последний шаг, а именно, воспользоваться шаблонами и отправить почтовую нотификацию администраторам сайта при добавлении новой записи в гостевую книгу. Для этого придется вносить дополнения в файл

«/ix_guestbook/install/templates/ix_guestbook/edit_record.php»

Реальное добавление записи в инфоблоки происходит в следующем коде:

                        if($ID>0)

                                $res = $bs->Update($ID, $arFields, $WF=="Y");

                        else

                        {

 

                                $ID = $bs->Add($arFields, CModule::IncludeModule("workflow"));

                                $res = ($ID>0);

                                $PARENT_ID = $ID;

                                   …

Сюда мы и добавим генерацию сообщения:

                                // посылаем сообщение о новой записи в книге

 

                                $iblock = CIblock::GetByID($IBLOCK_ID);

                                $iblock_r = $iblock->Fetch();

 

                                global $REMOTE_ADDR;

                                $arEventFields = array(

                                  "ID"             => $ID,

                                  "IBLOCK_ID"      => $IBLOCK_ID,

                                  "IBLOCK_TYPE"    => $type,

                                  "DATETIME"       => $str_today,

                                  "USER_NAME"      => $_POST["NAME"],

                                  "RECORD_TEXT"    => HtmlToTxt($_POST["PREVIEW_TEXT"]),

                                  "LOGIN"          => $USER->GetLogin(),

                                  "USER_ID"        => $USER->GetID(),

                                  "STAT_GUEST_ID"  => intval($_SESSION["SESS_GUEST_ID"]),

                                  "SESSION_ID"     => intval($_SESSION["SESS_SESSION_ID"]),

                                  "IP"             => $REMOTE_ADDR,

                                  "GB_TITLE"       => $iblock_r["NAME"]

                                );

                                CEvent::Send("IX_RECORD_NEW", $iblock_r["LID"], $arEventFields);

Теперь, при добавлении записи в книгу, на почтовый адрес по умолчанию (он указан в настройках основного модуля системы) будет приходить письмо с текстом новой записи, дополнительными сведениями и ссылкой на административный раздел для редактирования элемента инфоблока. Фактически, именно этот механизм позволит вам модерировать гостевые книги.

Заключение

Мы рассмотрели почти все основные вопросы, которые возникают при создании собственного модуля для Битрикс «Управление Сайтом»:

  • описание класса установки и удаления модуля,
  • создание своих опций для настройки модуля,
  • формирование компонентов для HTML-редактора,
  • использование констант для локализации строк,
  • генерирование шаблонов для почтовых нотификаций;

За кадром осталась, пожалуй, лишь технология добавления своих пунктов меню в разделе Администрирования. Возможно, мы еще к ней вернемся.

Доставка полезной информации от экспертов по Битрикс24!

Подпишитесь, и раз в неделю у вас на почте будет подборка полезных советов и обзоров про Битрикс24

Выберите рассылку

Created by potrace 1.13, written by Peter Selinger 2001-2015

Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов: