Como criar personalizado pegajoso de administração do sistema de mensagens?
-
29-09-2020 - |
Pergunta
Na minha Magento2 módulo quero criar sistema de administração de mensagens que são "viscosos" e aparecer em todas as páginas do adminhtml até que o problema seja resolvido.É algo importante que o administrador precisa endereço, caso contrário, o arquivo irá ser gravemente afectado.Mas uma vez detectado o problema foi resolvido, a mensagem deve ir embora.
Como um exemplo, eu estou a ver as mensagens que me diga quando indexadores ou caches precisa ser atualizada.Como posso criar mensagens como essa?
Eu estava olhando o módulo de núcleo AdminNotification
o que parece ser o único responsável por isso.Ele olhou para o envolvido modelos e blocos para apresentar estas mensagens, e que tudo faz sentido, mas de onde eles são criados?Eu não consigo descobrir como criar essas notificações.
Existe uma tabela chamada db admin_system_messages
que armazena algo relacionado a isso, mas eu não entender o conteúdo.O campo identity
apenas contém um longo número hexadecimal.Eu peguei o número e procurei por ele durante todo o código e o banco de dados inteiro para encontrar referências, mas nada apareceu.Como o módulo de extrair "Um ou mais dos Tipos de Cache são invalidadas [...]" a partir deste?
Para ser claro, eu tenho visto o mecanismo para adicionar as mensagens temporárias que será mostrado para o usuário, uma VEZ que, tais como as confirmações de quando você apagar ou guardar alguma coisa e ela diz que ele foi bem-sucedida.NÃO é isso que eu estou procurando, eu quero permanente mensagens em cada página.Eu sei que é óbvia, mas estou convencido de que é necessário no meu caso.
Solução
Eu resolvi isso mesmo.
O módulo tem uma dependência para Magento_AdminNotification.
Em seguida, você criar um modelo que implementa MessageInterface, como este:
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
}
}
Isso é realmente tudo o que há para ele.Eu passei tanto tempo procurando o local no código onde essas mensagens são disparadas, porque não percebi que elas provocam a si mesmos usando o isDisplayed()
o método.
Você pode obter inspiração de outras mensagens principais:
\Magento\AdminNotification\Model\System\Message\Baseurl
\Magento\AdminNotification\Model\System\Message\CacheOutdated
\Magento\AdminNotification\Model\System\Message\Security