Как создать пользовательские системные сообщения sticky admin?

magento.stackexchange https://magento.stackexchange.com/questions/106710

Вопрос

В моем модуле Magento2 я хочу создать системные сообщения администратора, которые являются липкими и отображаются на каждой странице в adminhtml, пока проблема не будет решена.Это что-то важное, на что должен обратить внимание администратор, в противном случае это серьезно повлияет на работу магазина.Но как только обнаруженная проблема была решена, сообщение должно исчезнуть.

В качестве примера я рассматриваю сообщения, которые сообщают мне, когда необходимо обновить индексаторы или кэши.Как я могу создавать подобные сообщения?

admin system message

Я смотрел на основной модуль AdminNotification который, по-видимому, однозначно ответственен за это.Он рассмотрел задействованные шаблоны и блоки для отображения этих сообщений, и все это имеет смысл, но где они созданы?Кажется, я не могу понять, как создать эти уведомления.

Существует таблица базы данных, которая называется admin_system_messages в котором хранится что-то связанное с этим, но я не понимаю содержания.Поле identity просто содержит длинное шестнадцатеричное число.Я взял такой номер и поискал его по всему коду и по всей базе данных, чтобы найти ссылки, но ничего не нашел.Как модуль извлекает из этого "Один или несколько типов кэша признаны недействительными [...]"?

Чтобы было понятно, я видел механизм добавления временных сообщений, которые будут показаны пользователю ОДИН раз, например, подтверждения при удалении или сохранении чего-либо, и он сообщает вам, что это было успешно.Это НЕ то, что я ищу, я хочу, чтобы постоянные сообщения были на каждой странице.Я знаю, это навязчиво, но я убежден, что в моем случае это необходимо.

Это было полезно?

Решение

Я сам решил эту проблему.

Вашему модулю нужна зависимость от Magento_AdminNotification.

Затем вы создаете модель, которая реализует MessageInterface, например, так:

class YourMessage implements \Magento\Framework\Notification\MessageInterface
{
  public function getIdentity() {
    ...
  }

  public function isDisplayed() {
    // write code to decide if this message should be shown or not
    // return true to show it, false otherwise
  }

  public function getText() {
    // output a static text or dynamically generate one
  }

  public function getSeverity() {
    // if you return self::SEVERITY_MAJOR the sticky box on top will be empty
    // if you return self::SEVERITY_CRITICAL the sticky box will always show your text
  }
}

Вот, собственно, и все, что от него требуется.Я потратил так много времени на поиски места в коде, где запускаются эти сообщения, потому что я не заметил, что они запускаются сами по себе с помощью isDisplayed() способ.

Вы можете черпать вдохновение из других подобных сообщений, используемых в core:

\Magento\AdminNotification\Model\System\Message\Baseurl \Magento\AdminNotification\Model\System\Message\CacheOutdated \Magento\AdminNotification\Model\System\Message\Security

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top