Advertisement
  1. Code
  2. Magento

Comprender la anulación en Magento: Modelos

Scroll to top
Read Time: 4 min
This post is part of a series called Understand Overriding in Magento.
Understand Overriding in Magento: Blocks
Understand Overriding in Magento: Controllers

Spanish (Español) translation by steven (you can also view the original English article)

En esta serie, exploramos las características principales disponibles en el sistema de comercio electrónico Magento. En el artículo anterior, discutimos cómo invalidar los archivos de bloque central utilizando un módulo personalizado. Hoy, lo extenderé y demostraré cómo puedes invalidar los archivos de los modelos principales utilizando un archivo de configuración basado en XML.

¿Por qué anular modelos?

En Magento, los modelos juegan un papel importante ya que implementan la mayor parte de la lógica empresarial de las características principales. Hay momentos en los que necesitas cambiar el flujo o la lógica empresarial en los modelos para implementar tus características personalizadas.

Es tentador seguir adelante y cambiar los archivos principales directamente, lo que parece una solución fácil y directa. Dicho esto, es una mala práctica, ya que hace que la actualización de Magento sea realmente difícil. ¡Entre más archivos principales modifiques directamente, más difícil será para ti hacer un seguimiento de tus cambios y aplicarlos durante cada actualización entre cada versión!

En este tutorial, crearemos un módulo personalizado para comprender cómo funciona la invalidación de los modelos en Magento. En este módulo personalizado, veremos cómo anular una clase del modelo de categoría del módulo principal "Catálogo" o "Catalog". La anulación funciona configurando ciertas etiquetas XML según las convenciones de Magento.

Supongo que estás familiarizado con el proceso básico de creación de módulos en Magento. Si no, aquí hay un buen artículo que explica los conceptos básicos de la creación de módulos personalizados. ¡Pasemos directamente al curso de este tutorial!

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 utilizado 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 clase del modelo utilizando ciertas etiquetas según las convenciones de Magento.
  • app/code/local/Envato/Catalog/Model/Category.php: Es una clase del modelo de nuestro módulo personalizado que anulará la clase de modelo base.

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

Primero, necesitamos crear un archivo habilitador de módulo. Crea un archivo "app/etc/modules/Envato_All.xml" y pega los siguientes contenidos en ese archivo. Hemos utilizado Envato como nuestro espacio de nombres de módulos y Catalog como nuestro nombre de módulo. Activará nuestro módulo "Catálogo" de forma predeterminada.

1
<?xml version="1.0"?>
2
<config>
3
  <modules>
4
    <Envato_Catalog>
5
      <active>true</active>
6
      <codePool>local</codePool>
7
    </Envato_Catalog>
8
  </modules>
9
</config>

A continuación, necesitamos crear un archivo de configuración del módulo. Crea "app/code/local/Envato/Catalog/etc/config.xml" y pega los siguientes contenidos en ese archivo.

1
<?xml version="1.0"?>
2
<config>
3
  <modules>
4
    <Envato_Catalog>
5
      <version>1.0</version>
6
    </Envato_Catalog>
7
  </modules>
8
  
9
  <global>
10
    <models>
11
      <catalog>
12
        <rewrite>
13
          <category>Envato_Catalog_Model_Category</category>
14
        </rewrite>
15
      </catalog>
16
    </models>
17
  </global>
18
</config>

Primero, hemos definido un número de versión del módulo usando la etiqueta <version>. Después de eso, las etiquetas <catalog> y <rewrite>  se usan para informar al sistema de anulación de Magento que vamos a anular un "modelo" del módulo central "Catálogo".

A continuación, la etiqueta <category> se usa para definir una identidad de modelo que será reemplazada por la clase Envato_Catalog_Model_Category. Se asigna a un archivo de modelo "Category.php" en el directorio "Model" del módulo del Catálogo. Una cosa importante a notar aquí es que estamos siguiendo una estructura de directorios similar al módulo central. Aunque eso no es estrictamente necesario. Sin embargo, es mejor que usar una estructura de directorio diferente, porque ayuda a mantener la legibilidad.

Finalmente, lo único que queda es definir una clase de modelo Envato_Catalog_Model_Category. Creemos un archivo modelo "app/code/local/Envato/Catalog/Model/Category.php" y peguemos los siguientes contenidos en ese archivo.

1
<?php
2
/**

3
 * Catalog category model

4
 *

5
 * @category   Envato

6
 * @package    Envato_Catalog

7
 */
8
class Envato_Catalog_Model_Category extends Mage_Catalog_Model_Category
9
{
10
  public function getProductCollection()
11
  {
12
    // Include your custom code here!

13
14
    $collection = Mage::getResourceModel('catalog/product_collection')
15
      ->setStoreId($this->getStoreId())
16
      ->addCategoryFilter($this);
17
18
    return $collection;
19
  }
20
}

Hemos definido una clase Envato_Catalog_Model_Category que extiende la clase de modelo principal Mage_Catalog_Model_Category del módulo "Catálogo". Por lo tanto, puedes anular todos los métodos de la clase base y crear nuevos métodos si es necesario.

En el ejemplo anterior, el método getProductCollection se anula, por lo que se llamará en lugar del método definido en la clase de modelo principal. Puedes modificar el código del modelo según tus requisitos.

Cuando anulas cualquier método en los modelos, debes asegurarte de que el tipo de datos del valor de retorno de ese método coincida con el tipo de datos del método de la clase base. Como los métodos modelo se invocan desde varios módulos principales, ¡debemos asegurarnos de que no rompa otras características!

Aunque este es un ejemplo muy básico, sirve para anular el modelo central y puedes ampliarlo según tus requisitos personalizados.

Conclusión

En este tutorial, aprendimos cómo anular los archivos del modelo central en Magento usando un módulo personalizado. En la siguiente y última parte de esta serie sobre anulaciones, veremos cómo anular los archivos del controlador central. ¡No dudes en dejar tus comentarios a continuación!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.