Ahora estas en: Inicio > Blog » Módulos de Magento

Módulos de Magento 30 junio 2010

Logo de Magento Hace poco publiqué como desarrollar un pequeño módulo para personalizar el tema del administrador de Magento. Ahora explicare algunos concepto para entender más a detalle lo que son los módulos en Magento.

Introducción

Los módulos son el núcleo de Magento. Cada acción en el sitio, sea el frente (frontend) o la interfaz de administrador (backend), pasa a través de un módulo. Los módulos actúan como contenedores para una o más de los siguientes: configuraciones, los esquemas de bases de datos, representar a los objetos, utilidades de “helpers”, modelos de datos, o los controladores de la acción. Un módulo puede constar de estas seis cosas, o sólo de uno. Los módulos se definen como encendido o apagado (on/off) en un sistema de configuración XML ubicado en app/etc/modules/. Cada módulo puede especificar su propia configuración en un archivo XML, así, ubicado debajo del directorio de módulos etc/.

Ya que todo en Magento es un módulo, y los módulos tienen configuración autónoma y configuración de base de datos, esto te permite, como desarrollador, extender Magento exactamente como el sistema del núcleo está construido.

Estructura de los Módulos

A continuación puedes ver la estructura de directorios del módulo de catálogo. El módulo de catálogo contiene todos los aspectos de un módulo.

Estructura de Modelo en Magento

Contenedores de Código (Code Pools)

Los módulos están ubicados en uno de los tres contenedores de código nombrados en inglés code pools. Los contenedores de código son: Núcleo, locales y comunidad, nombrados también en inglés en los directorios core, local y community. Todos los módulos distribuidos con la base de Magento están en el contenedor del núcleo de código o directorio “core”. Todos los módulos personalizados que se desarrollan se pueden instalar en el contenedor de código “local”. El contenedor comunitario “community” se diseñó originalmente para instalar módulos de terceros, pero bien podrías simplemente instalar un módulo en el local, así como en el de la comunidad.

Contenedores de Código en Magento

Paquetes de Módulo (Module Packages)

Todos los módulos existen en un directorio del paquete. El paquete no tiene otro propósito que no sea para permitir nombres coherente de las clases. Todos los módulos de Magento son parte del paquete de Mage. Recuérdese que Magento está estandarizado en el marco de trabajo Zend de PHP. Por lo tanto, todos los nombres de clases de Magento comienzan con Mage_. Es una práctica aceptable para crear un nuevo paquete de módulos personalizados con el nombre de su empresa u organización en lugar de Mage, por ejemplo, en mi caso nombraría a las clases empezando con Dwq_. No hay menoscabo funcional cuando no se usa Mage que el paquete.

Modelos (Models)

Los modelos son el músculo de Magento. Ellos ayudan a mover datos desde la base de datos en el propio programa. La salida, o representación, de los datos es realizado por los bloques, pero los modelos son los principales responsables de la manipulación de los datos. Modelos, en cualquier entorno de programación, ayudarán a definir y dar forma a dominios de datos. Lo que esto significa es que los modelos trazan los límites entre las definiciones de grupos de datos y relacionar grupos de datos a otros grupos de datos.

Para ayudar a ilustrar la idea de modelado de datos imaginar la creación de un sistema de carrito de compras y que deseas tener una Clase de Productos. Este producto debe tener una imagen asociada a ella. Pero, la pregunta es, ¿cómo conseguir que la imagen sea modelada? No basta con dar al producto una variable $image_url? Tal vez lo mejor es vincular la Clase de producto a una Clase Class Image_Gallery y crear la vinculación entre los dos métodos, por ejemplo, getDefaultImage. El resultado del modelo de clases es el resultado final de tu decisión sobre cómo los datos se interrelacionan.

Bloques (Blocks)

Los bloques son el cerebro detrás del esquema de plantillas de Magento. Los bloques forman un conjunto anidado de los objetos que coordinan los modelos con los archivos de plantilla. Cada bloque controla un archivo de plantilla: HTML y PHP son mezclados en un simple archivo con una extensión .phtml. Lo que esto significa es que para cualquier solicitud de página en Magento, estás tratando con igual, pero gran número de Bloque de objetos y archivos de plantilla .phtml.

Todos los bloques extienden la clase base Mage_Core_Block_Template, que a su vez, extiende Mage_Core_Block_Abstract. El método principal de un bloque es su método toHtml(). Este método traduce las plantillas del bloque de archivos a HTML utilizando el método renderView().

El sistema de plantillas de Magento es sólo PHP. No reimplementan cualquier otro sistema de plantillas, así que el método renderView() simplemente hace un include() en la solicitud del archivo de plantilla .phtml. Si, de hecho, quisieras agregar un mecanismo diferente de plantillas en Magento, el método renderView de la clase Mage_Core_Block_Template es donde se pondrían en marcha tus funciones del sistema a representar de plantilla escogida.

Controladores (Controllers)

Los controladores son el punto de partida para toda la lógica de negocios en Magento. La línea entre lo que se considera lógica de negocio (reglas que definen la metodología de una empresa) y cuál es la lógica de dominio (instrucciones acerca de un conjunto de datos) es borrosa en Magento. Algunas personas consideran la comprobación de los campos de formulario obligatorios y opcionales como “la lógica de negocios”, otras personas consideran que “la lógica de dominio”. La mayor parte de la lógica en Magento se hace en los modelos.

Los Controladores extienden una clase base de Mage_Core_Controller_Varien_Action, que es una copia final de la clase Zend_Controller_Action de Zend Framework. Los métodos importantes de esta clase son:

dispatch($action)
preDispatch()
postDispatch()

El resto de los métodos son simplemente las direcciones URL de utilidades para transmitir órdenes a otras partes clave del sistema. El método de dispatch comienza de la lógica empresarial de la solicitud actual. El valor de $action se determina desde la dirección URL y, en general “índice” como predeterminada. El método de dispatch primero llama preDispatch que dispare algunos eventos que se pueden escuchar por:

controller_action_predispatch
controller_action_predispatch_ModuleName
controller_action_predispatch_ModuleName_ControllerName_ActionName

El método de dispatch es llamado únicamente si el método preDispatch no marca la solicitud como enviado ya. El método de dispatch llama al método de la acción particular en la instancia de controlador que desee (Figura 1.1).

Método dispatch de Magento

Auxiliares (Helpers)

Helpers en Magento son simplemente una manera de resumir (o refactorizar) métodos de utilidad de las clases esenciales. La mayoría de acceso a los Helpers son doblemente envueltos dentro de varios Bloques y métodos de Modelo de cualquier forma, por lo que el valor de los Helpers es bastante dudosa. Es muy raro querer reemplazar o hacer subclase a un Helper. Es muy fácil añadir un nuevo Helper para proporcionar funcionalidad útil a los scripts.

Los dos métodos principales de los Helpers que deben interesarte son:

__ (sólo dos guiones bajos)
htmlEscape

El método de doble guión bajo __ es un Helper de traducción. Esta función auxiliar se envuelve desde casi cualquier contexto de objeto, lo que significa que con seguridad puede llamar a $this->__(‘Mi Texto en Inglés’) en casi cualquier punto en el código para traducir una frase. La función htmlspecialchars simplemente envuelve la función htmlEscape nativa de PHP, pero también puede aceptar una matriz (array) de datos y escapar cada artículo individualmente.

Archivos de Configuración (Config)

Los archivos de Módulo de configuración se encuentran en la carpeta etc bajo el directorio principal de módulos. Existen 3 archivos diferentes de configuración, los cuales son XML. El único archivo de configuración que afecta directamente el comportamiento de tu módulo es config.xml. Los otros dos, system.xml y convert.xml, crean automáticamente algunas formas de configuración por ti en el sistema principal de la página de configuración backend.

El contenido de todos los archivos de módulos de configuración se combinan en una colección masiva de valores. Esto significa que puedes reemplazar la configuración de cualquier módulo en cualquier otro módulo, simplemente poniendo las etiquetas XML correcta. Esta es la esencia de reemplazar en Magento.
Puedes crear cualquier clase para cualquier propósito, y para instalarlo en el sistema creas un archivo nuevo config.xml que especifica el nombre de la clase en el mismo lugar donde se definió la clase original.

Es por esto que verás las llamadas a métodos como getModel(‘catalog/product’) esadas en todo el sistema en lugar de un enfoque más simple como: new Catalog_Model_Product().

El uso de “etiquetas”, o nombres, para cada clase te proporciona una forma poderosa de reemplazar dicha parte del sistema.

Nota.- El uso de etiquetas para las clases supone un contexto de Bloque, Modelo o Helper.

Share

Escribe tus comentarios

«