Comprender la invalidación en Magento Controladores

En el tercer y último artículo de esta serie de anulación de Magento, explicaré cómo anular los archivos del controlador central. En los dos artículos anteriores de esta serie, analizamos la anulación de archivos de núcleo para bloques y modelos mediante la creación de un módulo personalizado. En este tutorial, veremos cómo anular los archivos del controlador central..

¿Por qué anular los controladores??

En Magento, el controlador es responsable de manejar las solicitudes entrantes, y es una columna vertebral de la implementación de enrutamiento de Magento. Para manejar probablemente todas las solicitudes en Magento, el controlador define diferentes acciones en forma de métodos de clase de controlador. El método de acción del controlador incluye lógica de aplicación relacionada que interactúa con vistas y modelos para preparar el resultado de esa página en particular. A veces, es necesario alterar el flujo de la ejecución del controlador para inyectar un código personalizado o cambiar el código del núcleo.

Como dije en el tutorial anterior, nunca se recomienda cambiar los archivos principales directamente, ya que hace que la actualización de Magento sea realmente difícil. Para evitar esto, debemos seguir la forma estándar de realizar los cambios deseados en los archivos principales: debemos usar observadores de eventos o anular los archivos principales con nuestros archivos de módulos personalizados. Discutiremos la característica principal hoy.

En este tutorial, crearemos un módulo personalizado para comprender cómo funciona la sustitución del controlador en Magento. En este módulo personalizado, veremos cómo anular una clase de controlador "Producto" del módulo "Catálogo" principal. La anulación de trabajos configura ciertas etiquetas XML según las convenciones de Magento.

Supongo que está familiarizado con el proceso básico de creación de módulos en Magento. De lo contrario, puede consultar este artículo sobre la creación de módulos personalizados.. 

Un vistazo a la configuración

Aquí está la lista de archivos necesarios para la configuración deseada:

  • app / etc / modules / Envato_All.xml: Es un archivo usado para habilitar nuestro módulo personalizado..
  • app / code / local / Envato / Catalog / etc / config.xml: Es un archivo de configuración del módulo en el que configuraremos la anulación de la clase del controlador utilizando ciertas etiquetas según las convenciones de Magento.
  • app / code / local / Envato / Catalog / controllers / ProductController.php: Es un archivo de clase de controlador personalizado que utilizaremos para anular la clase de controlador "Producto" principal.

Creación de archivos y carpetas: Módulo personalizado

Primero, necesitamos crear un archivo habilitador de módulos. Cree un archivo "app / etc / modules / Envato_All.xml" y pegue el siguiente contenido en ese archivo. Hemos utilizado Envato como nuestro espacio de nombres de módulo y Catalogar como nuestro nombre de módulo. Habilitará nuestro módulo "Catálogo" por defecto..

    cierto local   

A continuación, necesitamos crear un archivo de configuración del módulo. Cree "app / code / local / Envato / Catalog / etc / config.xml" y pegue el siguiente contenido en ese archivo.

    1.0        Envato_Catalog      

Primero, hemos definido un número de versión del módulo usando el  etiqueta. los tag es el nombre del enrutador del controlador frontal del módulo principal "Catálogo". Informa al sistema de enrutamiento de que queremos anular los controladores del módulo "Catálogo". 

Finalmente, el Envato_Catalog La etiqueta se usa para informar al sistema de enrutamiento de Magento que debe cargar los archivos de controlador de su módulo personalizado, si están disponibles. Por supuesto, cargará los archivos principales del módulo "Catálogo" si no puede encontrarlos debajo de su módulo..

Finalmente, lo único que queda es definir una clase de controlador. Envato_Catalog_ProductController. Vamos a crear un archivo de controlador "app / code / local / Envato / Catalog / controllers / ProductController.php" y pegamos el siguiente contenido en ese archivo.

getRequest () -> getParam ('category', false); $ productId = (int) $ this-> getRequest () -> getParam ('id'); $ especificOptions = $ this-> getRequest () -> getParam ('opciones'); // Preparar helper y params $ viewHelper = Mage :: helper ('catalog / product_view'); $ params = new Varien_Object (); $ params-> setCategoryId ($ categoryId); $ params-> setSpecifyOptions ($ especificOptions); // Procesar la página intente $ viewHelper-> prepareAndRender ($ productId, $ this, $ params);  catch (Exception $ e) if ($ e-> getCode () == $ viewHelper-> ERR_NO_PRODUCT_LOADED) if (isset ($ _ GET ['store']) &&! $ this-> getResponse () -> isRedirect ()) $ this -> _ redirect ("); elseif (! $ this-> getResponse () -> isRedirect ()) $ this -> _ forward ('noRoute'); else Mage :: logException ($ e); $ this -> _ forward ('noRoute');

Hemos definido un Envato_Catalog_ProductController clase que extiende el núcleo Mage_Catalog_ProductController Clase de controlador del módulo de catálogo. Lo importante a tener en cuenta aquí es que hemos incluido el archivo del controlador central "Mage / Catalog / controllers / ProductController.php" antes de la definición de la clase, ya que Magento no lo incluirá automáticamente.

En el ejemplo anterior, hemos anulado la vistaAcción método de la Mage_Catalog_ProductController clase. Esto significa que siempre que se vea una página de detalles del producto en el extremo frontal, se llamará vistaAcción Método definido en su clase de controlador personalizado. Para que pueda modificar el código definido en ese método según sus requisitos.

Conclusión

Así que hoy, aprendimos cómo anular los archivos del controlador central en Magento usando un módulo personalizado. ¡Espero que hayas disfrutado de esta serie y hayas aprendido algo útil que puedas implementar en tu código! Comparta sus consultas y sugerencias utilizando el siguiente feed!