Eventos personalizados en Magento con el patrón observador

Teniendo en cuenta la cantidad de marcos de comercio electrónico disponibles en el mercado, Magento es una de las opciones más populares para las tiendas web de mediana a gran escala. Tanto su conjunto de características como su arquitectura ayudan a diferenciarlo de muchas de las otras opciones disponibles en la actualidad..

Aunque hay muchas extensiones de terceros para Magento disponibles, también es fácil desarrollar las suyas. El propósito de este tutorial no es ver cómo crear una extensión personalizada; sin embargo, supone que estás familiarizado con el proceso ya que usaremos un patrón de diseño para implementar nuestro propio módulo personalizado.

Específicamente, veremos el patrón de observador de eventos. Para aquellos que no están familiarizados, los observadores se registran para esperar un evento y poder ejecutar el código cada vez que se dispara un evento.. 

Como se mencionó, este tutorial asume que está familiarizado con cómo desarrollar módulos personalizados dentro de Magento, porque vamos a crear un módulo personalizado que emplea ese patrón de diseño.

Configurando el observador

Primero, debemos declarar al observador de nuestro evento personalizado. Para hacer esto, ingrese el siguiente código en el archivo config.xml de su módulo justo dentro del elemento global.

Te explicamos el código momentáneamente..

...     semifallo nombre de modulo / observador my_custom_method    ... 

En el código anterior, acabamos de declarar al observador del evento denominado my_custom_event. Esto simplemente significa que siempre que my_custom_event se enciende, verá que el observador de este evento se registra en su módulo y luego ejecuta el código asociado con el evento. 

En nuestro caso, llamará al método. my_custom_method definido en la clase Namespace_Modulename_Model_Observer.

Ahora, vamos a llevar esto un paso más allá. Note que en el etiqueta, puede definir los eventos para los cuales le gustaría registrar a los observadores. En nuestro caso, hemos registrado al observador del evento. . También puede definir múltiples observadores para el mismo evento. En ese caso, declare a todos sus observadores dentro del etiqueta.

A continuación, cada observador se envuelve con un identificador único. En nuestro ejemplo, es . Además, debe especificar el nombre de la clase y el nombre del método que se ejecutará. los  etiqueta especifica la ubicación de la clase según la convención de Magento. 

En nuestro ejemplo, será Observer.php bajo la modelo directorio de Nombre del módulo módulo. El nombre del método es declarado por el  etiqueta. El valor de la la etiqueta es "singleton", lo que significa que usará la misma instancia del objeto observador para cada llamada de evento.

Ahora, después de declarar nuestro observador, vamos a crear la clase de observador y el código del método relacionado. Crear un archivo Observer.php bajo la Modelo Directorio de su módulo. Copia y pega el siguiente código en ese archivo.

getEvent (); // método getter para obtener el valor cid pasado desde el despachador $ cid = $ event-> getCid (); echo $ cid; salida; ?>

Aquí, acabamos de crear la clase observadora. En el my_custom_method En este método, tendrá acceso al objeto observador y los datos pasados ​​junto con él desde el despachador para que pueda usarlo para hacer algo significativo.. 

En este ejemplo, acabamos de recuperar el valor de cid variable pasada desde el código del despachador que veremos en un momento.

Por supuesto, necesitas modificar el Nombre del módulo y espacio de nombres De acuerdo con su módulo personalizado en el archivo de clase y declaración XML.

Enviar nuestro evento personalizado

Como hemos declarado el observador en el módulo personalizado, lo único que queda es enviar nuestro evento personalizado. 

Veamos cómo puedes usar el despachador de eventos de Magento desde tu módulo personalizado. Escriba el siguiente código en el método de su controlador desde donde le gustaría enviar el evento. Dicho esto, también puede disparar el evento desde otros lugares aparte del controlador.

 '123'); Mage :: dispatchEvent ('my_custom_event', $ event_data_array);…?> 

Como puede ver, es bastante sencillo enviarEl evento desde casi cualquier lugar en Magento. El primer argumento de la dispatchEvent método es el nombre del evento y el segundo argumento se utiliza para pasar los datos a los observadores.

Como puede haber notado anteriormente en la clase de observador, hemos utilizado el método getter para acceder al valor de variable cid.

En la mayoría de los casos, los datos de eventos pasados ​​a los observadores están en modo de solo lectura. Más específicamente, los observadores no pueden cambiar el valor de las variables pasadas por el método del despachador de eventos.

Otorgando el acceso de escritura

Suponga que ha distribuido un evento personalizado en su módulo y desea que los observadores puedan modificar los datos del evento original pasados. Vamos a revisar el código del despachador para lograr esto.

 '123'); $ varien_object = new Varien_Object ($ event_data_array); Mage :: dispatchEvent ('my_custom_event', array ('varien_obj' => $ varien_object)); // debería mostrar '456' ya que cambiaremos el valor en el observador echo $ varien_object-> getCid ();…?>

Acabamos de utilizar el objeto especial de Magento. Varien_Object y pasamos nuestros datos usando eso para asegurarnos de que se conserva cualquier modificación a los datos.

También deberá cambiar el código de la clase de observador en consecuencia. Aquí está la clase observada modificada.

getEvent (); // método getter para obtener el objeto varien pasado desde el dispatcher $ varien_object = $ event-> getVarienObj (); $ varien_object-> setCid ('456'); ?>

El único cambio importante en el código es buscar el Varien objeto y el uso de eso para cambiar el valor de la variable de matriz cid.

Resumen

Aunque este es un tutorial relativamente simple, muestra cómo podemos implementar fácilmente el Patrón de Observador de Eventos en el contexto de un módulo personalizado de Magento. En este punto, debe estar familiarizado con la creación de sus propios módulos personalizados utilizando el patrón de Observador de eventos.

Por favor no dude en dejar preguntas y / o comentarios en el siguiente formulario!