Come creare messaggi di sistema di amministrazione permanenti personalizzati?
-
29-09-2020 - |
Domanda
Nel mio modulo Magento2 voglio creare messaggi di sistema di amministrazione che siano permanenti e vengano visualizzati su ogni pagina nell'adminhtml finché il problema non viene risolto.È qualcosa di importante che l'amministratore deve affrontare, altrimenti il negozio ne risentirà gravemente.Ma una volta risolto il problema rilevato, il messaggio dovrebbe scomparire.
Ad esempio, sto esaminando i messaggi che mi dicono quando è necessario aggiornare gli indicizzatori o le cache.Come posso creare messaggi del genere?
Stavo guardando il modulo principale AdminNotification
che sembra esserne l’unico responsabile.Ha esaminato i modelli e i blocchi coinvolti per visualizzare questi messaggi e tutto ha senso, ma dove vengono creati?Non riesco a capire come creare queste notifiche.
C'è una tabella db chiamata admin_system_messages
che memorizza qualcosa correlato a questo, ma non ne capisco il contenuto.Il campo identity
contiene solo un lungo numero esadecimale.Ho preso un numero del genere e l'ho cercato in tutto il codice e nell'intero database per trovare riferimenti, ma non è venuto fuori nulla.In che modo il modulo estrae "Uno o più tipi di cache sono invalidati [...]" da questo?
Per intenderci, ho visto il meccanismo per aggiungere messaggi temporanei che verranno mostrati all'utente UNA VOLTA, come ad esempio le conferme quando elimini o salvi qualcosa e ti dice che l'operazione è andata a buon fine.Questo NON è quello che sto cercando, voglio messaggi permanenti su ogni pagina.So che è invadente, ma sono convinto che sia necessario nel mio caso.
Soluzione
L'ho risolto da solo.
Il tuo modulo necessita di una dipendenza da Magento_AdminNotification.
Quindi crei un modello che implementa MessageInterface, in questo modo:
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
}
}
Questo è davvero tutto quello che c'è da fare.Ho passato così tanto tempo a cercare il punto nel codice in cui vengono attivati questi messaggi, perché non ho notato che si attivano da soli utilizzando il comando isDisplayed()
metodo.
Puoi trarre ispirazione da altri messaggi simili utilizzati nel core:
\Magento\AdminNotification\Model\System\Message\Baseurl
\Magento\AdminNotification\Model\System\Message\CacheOutdated
\Magento\AdminNotification\Model\System\Message\Security