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?

admin system message

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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top