1С-Битрикс: почтовые шаблоны и почтовые события. Комментарии к файлу /bitrix/php_interface/init.php

Довелось мне дописать как-то в /bitrix/php_interface/init.php кусочек кода на отправку уведомлений о новой записи в инфоблок и изменении статуса записи. Громкими словами швыряться не буду, сначала картинка:

100

Например, задачка: гостевая книга. Форма на вопрос или отзыв, премодерация и ответ администрации. Чтоб было понятнее. Написание страницы, размещение компонента с формой и шаблон компонента рассматривать здесь не буду. Для многих случаев хватит «умолчального», а если экзотика — всего не опишешь.
Теперь важное — надо сделать так. чтобы администрация получала на почту себе уведомление о том, что оставлена новая запись в гостевой (или задан вопрос). Это раз. Когда администрация прокомментировала запись, пользователю (автору вопроса) на его почту приходит уведомление, что ему ответили.  А теперь по шагам.

Шаг 1 — делаем новый тип почтового события;
Шаг 2 — делаем новый почтовый шаблон и привязываем его к почтовому событию из п.1;
Здесь два важных момента: текст письма с уведомлением админу и пользователю мы можем написать сами. Вот пример, взятый из шаблона письма администратору:

Пользователь: #NAME#<br />
<br />
Задал вопрос: #QUESTION#<br />
<br />
E-mail: #EMAIL#<br />
<br />
Город: #CITY#<br />
<br />
Категории: #CATEGORY#<br />
<br />
IP-адрес посетителя: #IP#<br />
<br />
Чтобы ответить на вопрос, можно перейти: *сюда пишем вашу гиперссылку*
<br /><br />
Письмо сгенерировано автоматически, и отвечать на него не нужно.

А вот пример из шаблона уведомления пользователю:

Здравствуйте, ваш e-mail был указан в качестве адреса для оповещения об ответе на вопрос, заданный на сайте <a href=»http://library.bsu.edu.ru»>Научной библиотеки имени Н.Н.Страхова НИУ «БелГУ»</a>.
<br /><br />
Вопрос: #QUESTION#
<br /><br />
Ответ: #ANSWER#
<br /><br />
Вопрос и ответ опубликованы в разделе *тут урл где опубликовано на сайте*
<br /><br />
Если вы не задавали вопрос и не указывали свой e-mail, просто проигнорируйте это письмо.<br />
Мы нигде и никогда не будем публиковать ваш e-mail.
<br /><br />
Это письмо сгенерировано автоматически, и отвечать на него не нужно.

Дальше — шаг 3 и самый ответственный. Лезем в /bitrix/php_interface/init.php
Исходный код написан с комментариями, привожу его кусочек, небольшое пояснение в начале поста в картинке. НЕ ЗАПУТАЙТЕСЬ СО СКОБКАМИ для завершения функций, почаще делайте бэкапы и не забудьте разрешить участие в документообороте (для изменения статусов паблиш и драфт). Удачи!

function SendUpdateMessage(&$arFields) // Сообщение пользователю, что ему ответили на указанный почтовый ящик
{
/*
Статусы в документообороте 1-Published, 2-Draft, 3-Ready;
83 это ID инфоблока, сообщение шлётся при смене статуса с драфт (модерация) на паблиш (отвечено и одобрено);
*/
if($arFields[«IBLOCK_ID»]==83&&$arFields[«WF_STATUS_ID»]==1)
{

$arEventFields = array(
«NAME» => $arFields[«NAME»],
);
$props = CIBlockElement::GetProperty(83, $arFields[«ID»]);

while($ar_props = $props->Fetch())
{
switch ($ar_props[«ID»])
{ // свойства в инфоблоке — их ID и КОД
case 2426:
$arEventFields[«QUESTION»]=$ar_props[«VALUE»]; // Вопрос
break;
case 2427:
$arEventFields[«ANSWER»]=$ar_props[«VALUE»]; // Ответ
break;
case 233:
$arEventFields[«EMAIL»]=$ar_props[«VALUE»]; // Почта пользователя, задававшего вопрос
break;
}
}

if(filter_var($arEventFields[«EMAIL»], FILTER_VALIDATE_EMAIL)){
CEvent::Send(«NEW_QUESTION_ANSWER», ‘ab’, $arEventFields, «N», 281); // тип почтового события (NEW_QUESTION_ANSWER), символьный код сайта (ab), ID почтового шаблона (281)
}
}
// сюда писать для нового инфоблока
}
/***********************************************************************************/

function SendNewMessage(&$arFields) // Отправка уведомления админу, что появилась новая запись в инфоблоке
{

if($arFields[«IBLOCK_ID»]==83) // 83 это ID инфоблока
{
CIBlockElement::SetPropertyValuesEx($arFields[«ID»],83,array(«ip»=>$_SERVER[«REMOTE_ADDR»]));
if($arFields[«WF_PARENT_ELEMENT_ID»] == $arFields[«ID»])
{
$arEventFields = array(
«NAME» => $arFields[«NAME»],
«ID» => $arFields[«ID»],
/*
«QUESTION» => «»,
«EMAIL» => «»,
«CITY» => «»,
«CATEGORY» => «»,
«IP» => «»,
*/
);
$props = CIBlockElement::GetProperty(83, $arFields[«ID»]);
while($ar_props = $props->Fetch())
{
switch ($ar_props[«ID»])
{ // свойства в 83-м инфоблоке
case 2426:
$arEventFields[«QUESTION»]=$ar_props[«VALUE»]; // Вопрос
break;
case 233:
$arEventFields[«EMAIL»]=$ar_props[«VALUE»]; // Почтовый ящик посетителя
break;
case 232:
$arEventFields[«CITY»]=$ar_props[«VALUE»]; // Город
break;
case 2417:
$arEventFields[«CATEGORY»][]=$ar_props[«VALUE_ENUM»];
break;
case 2425:
$arEventFields[«IP»]=$ar_props[«VALUE»];
break;
}
}
$arEventFields[«CATEGORY»]=implode(«, «,$arEventFields[«CATEGORY»]);
//$arEventFields[«CATEGORY»]=var_export($arEventFields[«CATEGORY»],true);
CEvent::Send(«NEW_PROG_NAME», ‘ab’, $arEventFields, «N», 280);
}
}
}


Понравилась моя запись?
Кликни по рекламному баннеру ниже. Тебе бесплатно и не сложно, а мне - честный заработок блогом и приятное дополнение к энтузиазму на чашку кофе :-)