Frage

In meinem Magento2-Modul möchte ich Admin-Systemmeldungen erstellen, die klebrig sind und auf jeder Seite im adminhtml angezeigt werden, bis das Problem behoben ist.Es ist etwas Wichtiges, das der Administrator ansprechen muss, da sonst der Store stark beeinträchtigt wird.Sobald das erkannte Problem behoben ist, sollte die Nachricht verschwinden.

Als Beispiel schaue ich mir die Nachrichten an, die mir mitteilen, wann Indexer oder Caches aktualisiert werden müssen.Wie kann ich solche Nachrichten erstellen?

admin system message

Ich habe mir das Kernmodul angesehen AdminNotification was dafür eindeutig verantwortlich zu sein scheint.Es hat sich die beteiligten Vorlagen und Blöcke angesehen, um diese Nachrichten anzuzeigen, und das macht alles Sinn, aber wo werden sie erstellt?Ich kann anscheinend nicht herausfinden, wie man diese Benachrichtigungen erstellt.

Es gibt eine DB-Tabelle namens admin_system_messages was speichert etwas, das damit zusammenhängt, aber ich verstehe den Inhalt nicht.Feld identity enthält nur eine lange Hexadezimalzahl.Ich habe eine solche Nummer genommen und über den gesamten Code und die gesamte Datenbank danach gesucht, um Referenzen zu finden, aber es ist nichts aufgetaucht.Wie extrahiert das Modul "Einer oder mehrere der Cache-Typen sind ungültig [...]" von diesem?

Um es klar zu sagen, ich habe den Mechanismus zum Hinzufügen temporärer Nachrichten gesehen, die dem Benutzer EINMAL angezeigt werden, z. B. die Bestätigungen, wenn Sie etwas löschen oder speichern, und es wird Ihnen mitgeteilt, dass es erfolgreich war.Das ist NICHT das, wonach ich suche, ich möchte permanente Nachrichten auf jeder Seite.Ich weiß, dass es aufdringlich ist, aber ich bin überzeugt, dass es in meinem Fall notwendig ist.

War es hilfreich?

Lösung

Ich habe das selbst gelöst.

Ihr Modul benötigt eine Abhängigkeit zu Magento_AdminNotification .

Dann erstellen Sie ein Modell, das MessageInterface implementiert, wie folgt:

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
  }
}

Das ist wirklich alles, was dazu gehört.Ich habe so viel Zeit damit verbracht, nach der Stelle im Code zu suchen, an der diese Nachrichten ausgelöst werden, weil ich nicht bemerkt habe, dass sie sich selbst auslösen, indem ich die isDisplayed() Methode.

Sie können sich von anderen solchen Botschaften inspirieren lassen, die in Core verwendet werden:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top