Работа с уведомлениями

Как вы наверное уже знаете, в JohnCMS начиная с версии 9.2 появились улучшенные уведомления. Давайте разберемся как они работают и научимся добавлять свои уведомления.

Для работы уведомлений существует таблица в базе данных, которая называется notifications. Она хранит все уведомления для всех пользователей сайта.

Рассмотрим поля, которые доступны в таблице уведомлений:

Наименование

Описание

id

Идентификатор уведомления

module

Наименование модуля, который добавил уведомление. (обязательное поле)

event_type

Наименование типа события, из-за которого отправоено уведомление. (обязательное поле)

user_id

Пользователь, для которого предназначено уведомление. (обязательное поле)

sender_id

Идентификатор пользователя, который инициировал отправку уведомления. (не обязательно)

entity_id

Идентификатор сущности к которой привязано уведомление. (например сообщение на форуме из-за которого было отправлено уведомление). Не обязательное поле.

fields

Массив полей, которые будут доступны в шаблоне уведомления.

read_at

Время прочтения уведомления.

Принцип работы уведомлений:

  • Какой либо модуль добавляет уведомление в систему, привязывая его к модулю, типу события и пользователю, которому предназначено это уведомление.

  • Когда пользователь открывает сайт, для него выполняется выборка уведомлений у которых поле read_at = NULL. (т.е. не прочитанные).

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

Добавление уведомлений:

Уведомления обязательно должны иметь наименование модуля, тип события и пользователя, которому они предназначены.

Рассмотрим пример добавления уведомления:

(new \Johncms\Notifications\Notification())->create(
[
'module' => 'my_the_best_module',
'event_type' => 'my_module_event1',
'user_id' => 1,
'sender_id' => 1,
'entity_id' => null,
'fields' => [
'variable' => 'Привет! Это'
],
]
);

Этот код добавит уведомление для модуля my_the_best_module и события с типом my_module_event1.

Для чего же нам нужно название модуля и тип события? Это нужно для того, чтобы отображать уведомления в соответствии с заданным шаблоном.

Шаблоны уведомлений:

Шаблоны уведомлений настраиваются в файле config/notifications.local.php. Если у вас нет этого файла, переименуйте файл notifications.local.php.example в notifications.local.php

Файл с шаблонами должен иметь следующую структуру:

return [
// Пример шаблонов уведомлений для модулей
'my_the_best_module' => [
'name' => 'Мой лучший модуль!',
'events' => [
'my_module_event1' => [
'name' => 'Новое сообщение',
'message' => 'Текст сообщения! #variable# дополнительный текст',
],
'my_module_event2' => [
'name' => 'Новый пост',
'message' => 'Текст уведомления! #variable# дополнительный текст',
],
],
],
];

Как мы видим, тут используется название модуля и тип события.

Давайте посмотрим как выглядит наше уведомление, которое мы добавили выше.

Пример отображения уведомления

Как видно на скриншоте, вывелось уведомление с типом my_module_event1. В тексте уведомления заменилась макропеременная #variable# на ту, которую мы подавали при создании уведомления в массиве fields.