Перейти к основному содержимому

Уведомления

Функция позволяет отправлять уведомления пользователю. Notifications добавляют в строку состояния новую кликабельную иконку, при нажатии на которую открывается новая вкладка со списком всех уведомлений. Также отображается индикатор с количеством непрочитанных уведомлений.

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

Пользователь может использовать кнопку Share via Notifications, чтобы открыть окно создания нового уведомления и предварительно заполнить поле вложения нужным элементом.

Notifications

Работа с уведомлениями через API

Обзор

Для доступа к уведомлениям и работы с ними через API ознакомьтесь с сервисом Pimcore\Model\Notification\Service\NotificationService. Обратите внимание, что данный сервис помечен как internal и может изменяться в будущих версиях.

<?php  
/**
* @throws UnexpectedValueException
*/
public function find(int $id): Notification
{
$notification = Notification::getById($id);

if (!$notification instanceof Notification) {
throw new UnexpectedValueException("Notification with the ID {$id} doesn't exists");
}

return $notification;
}

/**
* @param array<string, mixed> $filter
* @param array{offset?: int|string, limit?: int|string|null} $options
*
* @return array{total: int, data: Notification[]}
*
* @throws Exception
*/
public function findAll(array $filter = [], array $options = []): array
{
$listing = new Listing();

$filter = [...$filter, ...['isStudio' => 0]];

$conditions = [];
$conditionVariables = [];
foreach ($filter as $key => $value) {
if (isset($value['condition'])) {
$conditions[] = $value['condition'];
$conditionVariables[] = $value['conditionVariables'] ?? [];
} else {
$conditions[] = $key . ' = :' . $key;
$conditionVariables[] = [$key => $value];
}
}

$condition = implode(' AND ', $conditions);
$listing->setCondition($condition, array_merge(...$conditionVariables));

$listing->setOrderKey('creationDate');
$listing->setOrder('DESC');
$offset = $options['offset'] ?? 0;
$limit = $options['limit'] ?? null;

if (is_string($offset)) {
//TODO: Trigger deprecation
$offset = (int) $offset;
}
if (is_string($limit)) {
//TODO: Trigger deprecation
$limit = (int) $limit;
}

$this->beginTransaction();

$result = [
'total' => $listing->count(),
'data' => $listing->getItems($offset, $limit),
];

$this->commit();

return $result;
}

Если необходимо отправить уведомления пользователю:

<?php  

use Pimcore\Model\Notification\Service\NotificationService;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

public function defaultAction(
Request $request,
NotificationService $notificationService
): Response {
$element = Asset::getById(1); // Optional

$notificationService->sendToUser(
4, // User recipient
2, // User sender 0 - system
'Example notification',
'Example message',
$element // Optional linked element
);

// ...
}

Если нужно отправить уведомления пользователям из группы:

<?php  

use Pimcore\Model\Notification\Service\NotificationService;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

public function defaultAction(
Request $request,
NotificationService $notificationService
): Response {
$element = Asset::getById(1); // Optional

$notificationService->sendToGroup(
4, // Group recipient
2, // User sender 0 - system
'Example notification',
'Example message',
$element // Optional linked element
);

// ...
}

Конфигурация

Конфигурация позволяет включать или отключать меню Notifications menu в панели инструментов, а также проверку новых уведомлений (url: /admin/notification/find-last-unread). Настройка выполняется в конфигурации pimcore_admin в разделе notifications.

Значения по умолчанию:

pimcore_admin:  
notifications:
enabled: true
check_new_notification:
enabled: true
interval: 30

Примеры конфигурации:

  • Отключить меню уведомлений и проверку новых непрочитанных уведомлений:
pimcore_admin:  
notifications:
enabled: false

  • Отключить только проверку новых непрочитанных уведомлений:
pimcore_admin:  
notifications:
check_new_notification:
enabled: false

  • Изменить интервал проверки новых непрочитанных уведомлений (в секундах):
pimcore_admin:  
notifications:
check_new_notification:
interval: 60


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.