En este post vamos a explicar cómo crear reescrituras de código de Magento. Utilizaremos el módulo creado en Cómo crear un módulo en Magento. Introducción

Este post únicamente explica cómo crear reescrituras y sus reglas de nomenclatura, sin entrar en la funcionalidad reescrita

Blocks, Helpers & Models

A la hora de definir una reescritura de un Block, un Helper o un Model la metodología es la misma (la reescritura de controllers utiliza un sistema diferente, que trataremos en otro post)
Todas las reescrituras se deben definir en el fichero de configuración de nuestro módulo config.xml

Como ya hemos visto, Magento está desarrollado siguiendo una estructura modular. Cada una de las carpetas en app/code/core/Mage contiene un módulo. Cada uno de estos módulos tiene una estructura de carpetas similar a la que hemos empleado al crear nuestro módulo: Block, controllers, Helper, Model, etc…

Para definir nuestra reescritura necesitamos el nombre del módulo y el path de la clase que queremos reescribir. El path sería la ruta de carpetas, partiendo desde la carpeta raíz (Block, Helper, Model… dependiendo del tipo de clase que queramos reescribir) hasta llegar a la clase

Por ejemplo, si queremos reescribir el modelo Mage_Catalog_Model_Product_Status, clase localizada en…

app/code/core/Mage/Catalog/Model/Product/Status.php

El módulo sería Catalog y el path sería Product/Status

Otro ejemplo, si queremos reescribir el helper Mage_Customer_Helper_Address, clase localizada en…

app/code/core/Mage/Customer/Helper/Address.php

El módulo sería Customer y el path esta vez sería simplemente Address

Teniendo claros módulo y path ya podemos definir la reescritura en el fichero de configuración de nuestro módulo config.xml



    
    
        
        
        VIAN_Tutorial_Model_Rewrite_Catalog_Product_Status
    

Siendo VIAN_Tutorial_Model_Rewrite_Catalog_Product_Status el nombre de la clase de nuestro módulo. Aquí añadimos la carpeta Rewrite/ y respetamos la ruta de carpetas original de la clase simplemente por claridad (no es obligatorio). De esta manera, a medida que el módulo vaya creciendo, nos resultará muy sencillo localizar las clases que son reescrituras y diferenciar claramente qué módulo de Magento está reescribiendo cada una de ellas. Siguiendo la lógica empleada anteriormente para obtener el path, esta clase estará ubicada en…

app/code/local/VIAN/Tutorial/Model/Rewrite/Catalog/Product/Status.php

El código XML de más arriba simplemente define la reescritura, pero no la hemos ubicado todavía en su sección correspondiente. Como el ejemplo se ha realizado sobre un Model (Mage_Catalog_Model_Product_Status), el código deberemos ubicarlo dentro del tag XML models

app/code/local/VIAN/Tutorial/etc/config.xml


    
    
        
            
            
                
                
                    
                    
                    VIAN_Tutorial_Model_Rewrite_Catalog_Product_Status
                
            
                
        
        
        
                
        
        
    

Esta metodología debería funcionar para la gran mayoría de clases en Magento, aunque hay algunas excepciones, como las clases definidas como abstract (no se pueden reescribir) o los Resource Models (reglas algo diferentes al definir las reescrituras)

En próximos posts de esta serie aparcaremos un poco la teoría y pasaremos a la práctica