Настройте форум для публикации отзывов и создайте почтовое событие.
В административной части сайта перейдите в настройки списка форумов: Рабочий стол → Сервисы → Форумы → Список форумов. Выберите форум, настроенный на вашем сайте на публикацию и хранение отзывов (скорее всего, он будет в списке единственный) и войдите в режим редактирования через кнопку «гамбургер» и пункт «Изменить». Если у вас не создано ни одного форума для отзывов, создайте его с помощью инструкции.
Переключитесь на вкладку «Настройки». В поле «Модерация» поставьте галочку в пункте «Премодерируемый».
Это позволит публиковать отзывы не напрямую, а после одобрения администратора.
Создаем для начала новый тип почтового события.
Перейдите в Рабочий стол → Настройки → Настройки продукта → Почтовые события → Типы почтовых событий. Нажмите кнопку «Добавить тип».
Тип почтового события пропишите как NEW_ITEM_REVIEW. В описание вставьте следующий код:
#ITEM_NAME# – товар получивший отзыв
#AUTHOR_NAME# – автор
#POST_DATE# – дата
#POST_MESSAGE# – отзыв
#PATH2ITEM# – относительная ссылка
Теперь создаем новый почтовый шаблон для этого события.
Перейдите в Рабочий стол → Настройки → Настройки продукта → Почтовые события → Почтовые шаблоны. Нажмите кнопку «Добавить шаблон».
В настройках нового шаблона пропишите следующие настройки:
Выберите сайт, для которого будет действовать шаблон, если у вас несколько сайтов на одной платформе.
Выберите тип почтового события из списка. В нашем случае это новый отзыв к товару (так мы назвали новое почтовое событие) [NEW_ITEM_REVIEW] (этот тип мы присвоили событию).
Пропишите в полях «От кого» и «Кому» соответствующие адреса электронной почты или специальные коды:
от кого: #DEFAULT_EMAIL_FROM#
кому: #DEFAULT_EMAIL_FROM#.
В случае с кодами адреса будут генерироваться автоматически в зависимости от настроек сайта и внесенных данных
Пропишите с поле «Тема» следующую фразу: #SITE_NAME# и новый отзыв к товару #ITEM_NAME#.
Вместо кодов в готовом письме пропишутся название сайта и название товара
В поле «Сообщение» вставьте следующий текст:
Информационное сообщение с сайта #SITE_NAME#
<br>
<hr>
Добавлен новый отзыв к товару:
<br>
#ITEM_NAME#
<hr>
Содержание:
<br>
автор: #AUTHOR_NAME#
<br>
отзыв: #POST_MESSAGE#
<br>
ссылка на товар: https://#SERVER_NAME##PATH2ITEM#
Далее сформируйте код для вставки в файл.
<?function notifyNewItemFeedback($ID, $arFields){ ob_start(); $res = CIBlockElement::GetList( array(), array( 'IBLOCK_ID' => id_инфоблока_каталога, 'PROPERTY_FORUM_TOPIC_ID' => $arFields["TOPIC_ID"] ), false, false, array('*', 'IBLOCK_ID', 'ID', 'NAME', 'PROPERTY_FORUM_TOPIC_ID', 'SECTION_ID', 'SECTION', 'SECTIONS') ); if($ar_res = $res->GetNext()){ var_dump(date('d.m.Y H:i:s')); echo 'найден товар '.$ar_res['NAME']; $TYPE_MAIL_EVENT = 'NEW_ITEM_REVIEW'; var_dump($ar_res); $arMail = array( 'ITEM_NAME' => $ar_res['NAME'], 'AUTHOR_NAME' => $arFields['AUTHOR_NAME'], 'POST_DATE' => date('d.m.Y H:i:s'), 'POST_MESSAGE' => $arFields['POST_MESSAGE'], 'PATH2ITEM' => $ar_res['DETAIL_PAGE_URL'], ); var_dump($arMail); $ID_MAIL_EVENT = id_почтового_шаблона; $ok = CEvent::Send($TYPE_MAIL_EVENT, "id_сайта", $arMail, $ID_MAIL_EVENT); if ($ok){ echo 'Сообщение отправлено'; } else{ 'Сообщение не отправлено '.$ok; } } else{ echo 'Элемент не найден.'; $dump = ob_get_clean(); if (!empty($ok)){ return true; } else{ $filename = dirname(__FILE__).'/dump.txt'; if (!file_exists($filename)){ $f = fopen($filename, 'w+'); fclose($f); } file_put_contents($filename, $dump); } } } AddEventHandler("forum", "onAfterMessageAdd", "notifyNewItemFeedback"); ?>
Где:
Чтобы узнать ID инфоблока каталога, перейдите в Рабочий стол → Контент → Инфоблоки → Типы инфоблоков → Каталог. На вкладке «Инфоблок» вы найдете значение ID. Это значение и нужно вставить в код. В нашем случае ID = 13.
ID почтового шаблона, как мы выяснили ранее, равен 78.
Новый код примет следующий вид:
<? function notifyNewItemFeedback($ID, $arFields){ ob_start(); $res = CIBlockElement::GetList( array(), array( 'IBLOCK_ID' => 13, 'PROPERTY_FORUM_TOPIC_ID' => $arFields["TOPIC_ID"] ), false, false, array('*', 'IBLOCK_ID', 'ID', 'NAME', 'PROPERTY_FORUM_TOPIC_ID', 'SECTION_ID', 'SECTION', 'SECTIONS') ); if($ar_res = $res->GetNext()){ var_dump(date('d.m.Y H:i:s')); echo 'найден товар '.$ar_res['NAME']; $TYPE_MAIL_EVENT = 'NEW_ITEM_REVIEW'; var_dump($ar_res); $arMail = array( 'ITEM_NAME' => $ar_res['NAME'], 'AUTHOR_NAME' => $arFields['AUTHOR_NAME'], 'POST_DATE' => date('d.m.Y H:i:s'), 'POST_MESSAGE' => $arFields['POST_MESSAGE'], 'PATH2ITEM' => $ar_res['DETAIL_PAGE_URL'], ); var_dump($arMail); $ID_MAIL_EVENT = 78; $ok = CEvent::Send($TYPE_MAIL_EVENT, "s1", $arMail, $ID_MAIL_EVENT); if ($ok){ echo 'Сообщение отправлено'; } else{ 'Сообщение не отправлено '.$ok; } } else echo 'Элемент не найден.'; $dump = ob_get_clean(); if (!empty($ok)){ return true; } else{ $filename = dirname(__FILE__).'/dump.txt'; if (!file_exists($filename)){ $f = fopen($filename, 'w+'); fclose($f); } file_put_contents($filename, $dump); } } AddEventHandler("forum", "onAfterMessageAdd", "notifyNewItemFeedback"); ?>
Теперь код необходимо скопировать и вставить в файл init.php. Для этого
перейдите в Рабочий стол → Контент → Структура сайта → Файлы и папки → bitrix → php_interface. Найдите файл init.php,нажмите кнопку «гамбургер» рядом с ним и выберите пункт «Редактировать как PHP».