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?

admin system message

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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top