- Documentation >
- Guide >
- Notifications
Sending notifications
You can send two types on notifications to the users.
Notification bar is displayed in specific situations as a message bar appearing at the bottom of the page.
It appears to whoever is doing a specific operation in the Back Office.
Flex Workflow notifications are sent to a specific user.
They will appear in their profile in the Back Office.
Display notification bars
Notifications are displayed as a message bar in the Back Office.
There are four types of notifications: info
, success
, warning
and error
.
Display notifications from PHP
To send a notification from PHP, inject the NotificationHandlerInterface
into your class.
| $this->notificationHandler->info('Notification text');
|
To have the notification translated, use the TranslatorInterface
.
You need to provide the message strings in the translation files under the correct domain and key.
| $this->notificationHandler->info(
$this->translator->trans(
/** @Desc("Notification text") */
'example.notification.text',
[],
'domain'
)
);
|
Display notifications from front end
To create a notification from the front end (in this example, of type info
), use the following code:
| const eventInfo = new CustomEvent('ez-notify', {
detail: {
label: 'info',
message: 'Notification text'
}
});
|
Dispatch the event with document.body.dispatchEvent(eventInfo);
.
Create custom notifications using the Flex Workflow mechanism
You can send your own custom notifications to the user with the same mechanism that is used to send notification from Flex Workflow.
To create a new notification you must use the createNotification(eZ\Publish\API\Repository\Values\Notification\CreateStruct $createStruct)
method from \eZ\Publish\API\Repository\NotificationService
.
Example:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | <?php
use eZ\Publish\API\Repository\NotificationService;
use eZ\Publish\API\Repository\Values\Notification\CreateStruct;
//..
/** @var NotificationService */
private $notificationService;
/**
* @param NotificationService $notificationService
*/
public function __construct( NotificationService $notificationService)
{
$this->notificationService = $notificationService;
}
//...
$data = [
'content_name' => $content->getName(),
'content_id' => $content->id,
'message' => 'Lorem ipsum dolor sit amet, consetetur ....'
];
$notification = new CreateStruct();
$notification->ownerId = $receiverId;
$notification->type = 'MyNotification:TypeName';
$notification->data = $data;
$this->notificationService->createNotification($notification);
|
To display the notification, write a renderer and tag it as a service.
The example below presents a renderer that uses Twig to render a view:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | <?php
declare(strict_types=1);
namespace AppBundle\Notification;
use eZ\Publish\API\Repository\Values\Notification\Notification;
use eZ\Publish\Core\Notification\Renderer\NotificationRenderer;
use Symfony\Component\Routing\RouterInterface;
use Twig\Environment;
class MyRenderer implements NotificationRenderer
{
protected $twig;
protected $router;
public function __construct(Environment $twig, RouterInterface $router)
{
$this->twig = $twig;
$this->router = $router;
}
public function render(Notification $notification): string
{
return $this->twig->render('AppBundle::notification.html.twig', ['notification' => $notification]);
}
public function generateUrl(Notification $notification): ?string
{
if (array_key_exists('content_id', $notification->data)) {
return $this->router->generate('_ez_content_view', ['contentId' => $notification->data['content_id']]);
}
return null;
}
}
|
You can build a content edit draft route like this:
| return $this->router->generate('ez_content_draft_edit', [
'contentId' => $contentInfo->id,
'versionNo' => $contentInfo->currentVersionNo,
'language' => $contentInfo->mainLanguageCode,
]);
|
You can add the template that is defined above in the render()
method to one of your custom bundles.
In this example use the AppBundle
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | {% extends '@EzPlatformAdminUi/notifications/notification_row.html.twig' %}
{% trans_default_domain 'custom_notification' %}
{% set wrapper_additional_classes = 'css-class-custom' %}
{% block icon %}
<span class="type__icon">
<svg class="ez-icon ez-icon--review">
<use xlink:href="{{ asset('bundles/ezplatformadminui/img/ez-icons.svg') }}#notice"></use>
</svg>
</span>
{% endblock %}
{% block notification_type %}
<span class="type__text">
{{ 'Notice'|trans|desc('Notice') }}
</span>
{% endblock %}
{% block message %}
<td class="n-notifications-modal__description">
<p class="description__title"><span class="description__title__item">{{ notification.data.content_name }}</p>
<p class="description__text{% if notification.data.message|length > 50 %} description__text--ellipsis{% endif %}">{{ notification.data.message }}</p>
<span class="description__read-more">{{ 'content.notice.read_more'|trans|desc('Read more »') }}</span>
</td>
{% endblock %}
|
Finally, you need to add an entry to services.yml
:
| services:
_defaults:
autowire: true
autoconfigure: false
public: false
AppBundle\Notification\MyRenderer:
tags:
- { name: ezpublish.notification.renderer, alias: MyNotification:TypeName }
|