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

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

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

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

| Наименование | Описание                                                                                                                                                 |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id           | Идентификатор уведомления                                                                                                                                |
| module       | Наименование модуля, который добавил уведомление. (**обязательное поле**)                                                                                |
| event\_type  | Наименование типа события, из-за которого отправоено уведомление. (**обязательное поле**)                                                                |
| user\_id     | Пользователь, для которого предназначено уведомление. (**обязательное поле**)                                                                            |
| sender\_id   | Идентификатор пользователя, который инициировал отправку уведомления. (не обязательно)                                                                   |
| entity\_id   | Идентификатор сущности к которой привязано уведомление. (например сообщение на форуме из-за которого было отправлено уведомление). Не обязательное поле. |
| fields       | Массив полей, которые будут доступны в шаблоне уведомления.                                                                                              |
| read\_at     | Время прочтения уведомления.                                                                                                                             |

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

* Какой либо модуль добавляет уведомление в систему, привязывая его к модулю, типу события и пользователю, которому предназначено это уведомление.
* Когда пользователь открывает сайт, для него выполняется выборка уведомлений у которых поле read\_at = NULL. (т.е. не прочитанные).
* После того как пользователь заходит на страницу уведомлений, ему формируется список в соответствии с заданным шаблоном, далее показанные на странице уведомления помечаются прочитанными.

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

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

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

```php
(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**

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

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

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

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

![Пример отображения уведомления](https://2974319229-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MU3Noae80124ohncEUR%2F-MV1VxgTQmm6SIBnEwJ1%2F-MV1WHkg75By0Gn5RF32%2Fimage.png?alt=media\&token=ca3b4b28-b708-437c-9a86-4028d1ffabae)

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