2011-02-15 21 views
6

qué eventos de frontend magento debo observar si deseo tener la oportunidad de inyectar bloques al (bloque de "cabecera")?inyectando un bloque de magento a la cabeza a través del evento observado

y mientras esté en el código del observador, ¿cómo puedo verificar si el diseño actual tiene algún conjunto de control (por ejemplo, no_logged_in) establecido.

+0

OK, así que encontré esta lista de eventos http://masteringmagento.com/2010/06/events-list-in-magento-community-1-4/ y usaré controller_action_layout_render_before. Ahora, ¿cómo reviso los mangos? – epeleg

+2

¿Por qué no estás usando un archivo de diseño? – clockworkgeek

+0

Porque en mi caso el diseño "nuevo" cambia la plantilla y no solo agrega bloques. por lo tanto, si todavía no se cumplen algunas condiciones previas (la extensión aún no está configurada correctamente), no quiero que se produzca la modificación. Habría sido bueno si el archivo xml de diseño tuviera un atributo "onlyIf" apuntando a una función de ayuda que podría decidir si la anulación debería tener lugar. – epeleg

Respuesta

4

Dar caso

controller_action_layout_generate_blocks_after 

intentarlo. El objeto Diseño y sus bloques secundarios se deben instanciar por el punto en que se desencadena el evento.

Sólo hay siempre un objeto de diseño, y se puede agarrar las asas en juego con

// get the layout->get the updates manager->get the handles 
$handles = Mage::getSingleton('core/layout')->getUpdate()->getHandles(); 
var_dump($handles); 

Si está trabajando en el código de front-end y tratar de atenerse a las convenciones de Magento, es probable que sea mejor añadir un archivo layout.xml a su módulo, y use el archivo de diseño para agregar sus bloques. ¡Sin embargo, es menos divertido que descubrir algo nuevo!

+0

gracias por el puntero de las manijas. Me sorprendió descubrir que casi no hay soporte en torno a este tema. es decir, no isHandleSet o algo así ... – epeleg

+0

@epeleg 1. ¿Estás sorprendido? Debes ser nuevo en Magento :) 2. Como programador cliente del sistema, no debes interactuar mucho con los identificadores. Los identificadores permiten que el sistema de diseño sepa qué actualizaciones XML extraer del diseño del paquete. Usarlos para cualquier otra cosa, aunque sea interesante, probablemente esté planteando problemas en el futuro. –

+0

1. culpable, pero estoy comprendiendo mejor su funcionamiento cada día que pasa. 2.Soy consciente de esto y, básicamente, esto es exactamente lo que quiero hacer. solo que lo hago programáticamente y no declerativamente, lo que me permite alternar entre y. 3. Si presenté correctamente el código que estaba viendo, los identificadores también se usan como parte de la clave para el almacenamiento en caché, por lo que también podría agregar un identificador para invalidar la caché cuando se modifique el estado de mi extensión. b.t.w - ¿Hay una manera razonable de ver los bloques que el diseño tiene dado el objeto de disposición? – epeleg

1

Aprecio el complemento en el blog, pero clockworkgeek es correcto. La mejor manera de lograr esto es usar un archivo de diseño para agregar los bloques que necesita. También es posible que esos bloques cambien su propio comportamiento de representación basado en código arbitrario.

Si hay una razón por la cual no puede usar diseños, por favor, elabore un poco en su pregunta y estaremos encantados de ayudarlo.

Gracias, Joe

+0

"enchufar en el blog" ?? ver el motivo en el comentario de la pregunta. – epeleg

Cuestiones relacionadas