Reescribiendo Models, Blocks, Helpers y Controllers en Magento

Reescribiendo clases en Magento

Magento es de esas plataformas que le gusta hacer las cosas como se debe, por lo que los arquitectos de software diseñaron muy bien la plataforma para poder ser reescrita completamente evitando de esta forma tocar el núcleo de Magento.

Explicaremos como reescribir Bloques, Modelos, Helpers y Controladores:

Blocks:

Vamos a suponer que queremos añadir hacer una modificación en la vista del producto y queremos reescribir el bloque Mage_Catalog_Block_Product_View.

Para reescribir un bloque en Magento lo primero que necesitamos es añadir las siguientes lineas dentro de la etiqueta <global> de nuestro archivo config.xml:


<blocks>
<progento_rewrite>
<class>Progento_Rewrite_Block</class>
</progento_rewrite>
<catalog>
<rewrite>
<product_view>Progento_Rewrite_Block_Product_View</product_view>
<rewrite>
</catalog>
</blocks>

 Lo que hemos hecho simplemente es declarar donde estarán los bloques de nuestra extensión y luego la etíqueta <catalog> es el handle que ha usado magento para declarar los bloques en su módulo, dentro de <catalog> hemos dicho que vamos a hacer una sobreescritura del bloque product_view y que clase propia va a sobreescirbir la clase original.

Ahora para poder usar nuestra clase vamos a crear la clase Progento_Rewrite_Block_Catalog_Product que herede de la clase Mage_Catalog_Block_Product_View , de esta forma ya podremos sobreescribir o añadir cualquier función en nuestra propia clase.

Para sobreescribir Modelos y Helpers el procedimiento será el mismo, el gran cambio lo vemos en los controladores:

 Controllers:

Los controladores como en cualquier Framework es la clase que llama a los modelos / helpers para obtener datos con la finalidad de pasarlos a la vista, para que esta la muestre en el navegador del usuario.

Para reescribir un controlador en Magento lo primero que tenemos que hacer es declarar el enrutador que se sobreescribirá para luego decirle que antes de leer el controlador original compruebe si existe el nuestro propio:

En este caso vamos a sobreescribir el controlador del carrito de compra.


<frontend>
<routers>
<checkout>
<args>
<modules>
<Progento_Rewrite before="Mage_Checkout">Progento_Rewrite</Progento_Rewrite>
</modules>
</args>
</checkout>
</routers>
</frontend>

Una vez añadido este código en el config.xml de la extensión vamos a crear el archivo CartController.php dentro de nuestra carpeta controllers y añadiremos el siguiente código:


<?php
require_once Mage::getModuleDir('controllers', 'Mage_Checkout').DS.'CartController.php';

class Progento_Rewrite_CartController extends Mage_Checkout_CartController
{
/**
* Add product to shopping cart action

*@Progento. Override Mage_Checkout_CartController
*/
public function addAction()
{

//TODO

}

Con esto estamos diciéndole que deberá existir y será requerido incluir el controlador Mage_Checkout_CartController, y vamos a hacer que nuestro controlador herede del original.

Luego ya podemos añadir o modificar nuestro acciones del controlador.

 

Espero que les haya gustado esta nueva entrada =)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *