Переопределение функционала в административной части модуля
Приведенный ниже пример покажет, как реализовать отправление уведомления на почтовый ящик администратора при сохранении новости.
Откроем файл modules/news/admin/news.admin.php и добавим в массив $variables
новый элемент с типом "none".
Пример:
'main' => array (
'sendmail' => array(
'type' => 'none',
),
...
Тип "none" позволяет не выводить поле в административной части, но при этом выполнять необходимый код при сохранении и редактировании элемента, в нашем случае новости (подробнее о типах полей можно посмотреть здесь).
Далее в этот же файл добавим метод:
Пример:
public function save_variable_sendmail()
{
//...
}
Он будет выполняться при каждом сохранении новости.
Теперь перейдем к реализации требуемого функционала.
Для отправки почты в DIAFAN.CMS используется функция message_add_mail()
из подключения модуля «Уведомления».
Обязательными для функции являются три параметра – адрес получателя, тема письма и текст письма.
Адресом получателя в нашем случае будут являться почтовые адреса администраторов сайта. Данные о пользователях хранятся в таблице {users}. Все администраторы сайта в поле role_id имеют значение 3 (если предустановленные данные о типах пользователях не были изменены). Также нужно добавить условие «активен на сайте» и «не удален в корзину». Зная это, мы можем выбрать нужные нам почтовые ящики.
Пример:
$mails = DB::query_fetch_value("SELECT DISTINCT(mail) FROM {users} WHERE role_id=3 AND act='1' AND trash='0'", "mail");
Тему письма можем указать произвольную, например так:
Пример:
$subject = 'Изменения на сайте '.TIT1;
TIT1
– это константа, содержащая имя сайта, указанное в разделе «Параметры сайта» административной части.
В тексте письма будем отправлять ссылку на сохраняемую новость.
Для формирования ссылок используется метод $this->diafan->_route->link()
.
Подробно метод описан в разделе Маршрутизатор.
Для использования метода нам понадобятся значения ID страницы, к которой прикреплен модуль, название модуля и ID текущей новости.
ID страницы получаем методом get_site_id()
.
ID новости хранится в $this->diafan->id
.
Модуль, в нашем случае, имеет название "news".
В итоге получим такой код:
Пример:
$site_id = $this->diafan->get_site_id();
$link = $this->diafan->_route->link($site_id, $this->diafan->id, "news");
Теперь остается циклом перебрать все почтовые ящики администраторов и отправить им уведомления. Результат будет выглядеть так:
Пример:
public function save_variable_sendmail()
{
//тема письма
$subject = 'Изменения на сайте '.TIT1;
//ссылка на текущую новость
$site_id = $this->diafan->get_site_id();
$link = BASE_PATH.$this->diafan->_route->link($site_id, $this->diafan->id, "news");
//текст сообщения
$message = '<a href="'.$link.'">'.(! empty($_POST['name']) ? $_POST['name'] : $this->diafan->id).'</a>';
//выбираем значения почтовых ящиков администраторов
$mails = DB::query_fetch_value("SELECT DISTINCT(mail) FROM {users} WHERE role_id=3 AND act='1' AND trash='0'", "mail");
//делаем рассылку
foreach($mails as $mail)
{
$this->diafan->_postman->message_add_mail($mail, $subject, $message);
}
}
Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.