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?

admin system message

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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top