¿Cómo crear mensajes adhesivos personalizados del sistema de administración?
-
29-09-2020 - |
Pregunta
En mi módulo Magento2 quiero crear mensajes del sistema de administración que sean fijos y aparezcan en cada página del adminhtml hasta que se resuelva el problema.Es algo importante que el administrador debe abordar; de lo contrario, la tienda se verá gravemente afectada.Pero una vez resuelto el problema detectado, el mensaje debería desaparecer.
Como ejemplo, estoy mirando los mensajes que me indican cuándo es necesario actualizar los indexadores o las cachés.¿Cómo puedo crear mensajes como ese?
Estaba mirando el módulo principal. AdminNotification
que parece ser el único responsable de esto.Se analizaron las plantillas y bloques involucrados para mostrar estos mensajes, y todo tiene sentido, pero ¿dónde se crean?Parece que no puedo entender cómo crear estas notificaciones.
Hay una tabla de base de datos llamada admin_system_messages
que almacena algo relacionado con eso, pero no entiendo el contenido.El campo identity
solo contiene un número hexadecimal largo.Tomé ese número y lo busqué en todo el código y en toda la base de datos para encontrar referencias, pero no apareció nada.¿Cómo extrae el módulo "Uno o más tipos de caché están invalidados [...]" de esto?
Para ser claros, he visto el mecanismo para agregar mensajes temporales que se mostrarán al usuario UNA VEZ, como las confirmaciones cuando eliminas o guardas algo y te dice que fue exitoso.Esto NO es lo que estoy buscando, quiero mensajes permanentes en cada página.Sé que es molesto, pero estoy convencido de que es necesario en mi caso.
Solución
Lo he solucionado yo mismo.
Su módulo necesita una dependencia de Magento_AdminNotification.
Luego creas un 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
}
}
Eso es realmente todo lo que hay que hacer.Pasé mucho tiempo buscando el lugar en el código donde se activan estos mensajes, porque no noté que se activan solos usando el isDisplayed()
método.
Puede inspirarse en otros mensajes similares utilizados en el núcleo:
\Magento\AdminNotification\Model\System\Message\Baseurl
\Magento\AdminNotification\Model\System\Message\CacheOutdated
\Magento\AdminNotification\Model\System\Message\Security