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

Как вы наверное уже знаете, в 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# дополнительный текст',
            ],
        ],
    ],
];
```

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

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

![Пример отображения уведомления](/files/-MV1WHkg75By0Gn5RF32)

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.johncms.com/9.7/obshie-svedeniya/rabota-s-uvedomleniyami.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
