Mostrar mensajes del sistema dentro del componente en lugar de en la plantilla


8

Por defecto, los mensajes del sistema Joomla 3 (mensajes, avisos, advertencias) se muestran en una determinada posición de la plantilla utilizando

<jdoc:include type="message" />

¿Sería posible tener más control sobre esos mensajes y mostrarlos en diferentes posiciones dentro del contenedor de mi propio componente?

Intenté usar el jdoc anterior dentro de las vistas de mi componente (toma barata) pero no tuve suerte. ¿Hay alguna forma de "capturar" mensajes generados por mi componente usando el sistema de mensajería del sistema estándar de Joomla y mostrarlos donde quiera?

Gracias por adelantado.

Respuestas:


9

Ok, parece que cavar un poco más. Encontré una respuesta a mi propia pregunta. Básicamente encontré este complemento:

http://extensions.joomla.org/extensions/style-a-design/popups-a-iframes/25240

No es exactamente lo que necesito, pero revisando su código descubrí el camino a seguir, que podría resumirse de la siguiente manera (en caso de que alguien llegue aquí buscando la misma pregunta):

  1. Si desea hacerlo de la manera correcta, debe ocuparse de los mensajes de Joomla predeterminados que se muestran en la plantilla a través de <jdoc:include type="message" />, para que los mensajes no se muestren dos veces
  2. La única forma de manejar eso es usando un complemento que se activará en el evento onBeforeRender
  3. En ese caso necesitas:
    • Recupere los mensajes usando $app = JFactory::getApplication(); $messageQueue = $app->getMessageQueue();
    • Procese los mensajes según sea necesario para enviarlos a su componente
    • Borre la cola de mensajes para que los mensajes no se muestren dos veces. En versiones anteriores de Joomla, era posible borrar directamente la cola con un método, pero en Joomla 3 debe reemplazar la cola existente por una vacía.
  4. Eso es todo, tiene mensajes en cola en el sistema de mensajería Joomla predeterminado disponible en su componente.

Esto necesita algo de trabajo, pero creo que el camino general a seguir es claro. Espero que sea útil para alguien más en una situación similar.


0

Para completar esta (buena) respuesta de Isidro, observe que a partir de hoy (Joomla 3.8.12), la getMessageQueue()función se puede llamar con "verdadero" ( getMessageQueue(true)) como parámetro para purgar / borrar la cola de mensajes.

Finalmente, para obtener los mensajes almacenados de la manera esperada para que el diseño los muestre, llame a este fragmento de código (extraído de MessageRenderer::getData()):

// Initialise variables.
$lists = array();
// Get the message queue
$messages = \JFactory::getApplication()->getMessageQueue();
// Build the sorted message list
if (is_array($messages) && !empty($messages))
{
    foreach ($messages as $msg)
    {
        if (isset($msg['type']) && isset($msg['message']))
        {
            $lists[$msg['type']][] = $msg['message'];
        }
    }
}

Luego te $listsordenan de la manera correcta.


solo para su información, puede simplificar su fragmento con estos pequeños ajustes: 3v4l.org/DZGWd
mickmackusa
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.