BLOG

Arquitectura basada en módulos de Magento

Descripción de la arquitectura de un módulo

Fuente: http://www.magentocommerce.com/wiki/_detail/general/doc/page-request-flow.png

Fuente: http://www.magentocommerce.com/wiki/_detail/general/doc/page-request-flow.png

Elementos de un módulo y su localización

Elementos del módulo:

  • /app/etc/modules/Namespace_Module.xml – Fichero de creación y registro de un módulo, define el codepool
  • /app/code/codepool/Namespace/Module/etc – Archivos de configuración del módulo, define el resto de elementos a usar (Modelos, bloques, controladores, etc)
  • /app/code/codepool/Namespace/Module/Block – Clases que preparan los datos para su salida visual
  • /app/code/codepool/Namespace/Module/controllers – Define los procesos a ejecutar ante las solicitudes del usuario.
  • /app/code/codepool/Namespace/Module/Helper – Funciones útiles para su uso frecuente desde el propio módulo o desde otros
  • /app/code/codepool/Namespace/Module/Model – Manejan los objetos y proceso de acceso a la base de datos para su construcción.
  • /app/code/codepool/Namespace/Module/sql – Contiene los archivos de configuración de la base de datos ante la instalación o actualización del módulo

Elementos en la parte visual:

  • /app/design/{package}/{theme}/layout/Name.xml – Define la estructura de bloques en los distintos casos de la visualización. Cada bloque del layout está definido por un bloque de código (/app/code/codepool/Namespace/Module/Block) y un template que lo renderiza /app/design/{package}/{theme}/template/…/Name.phtml

Estructura de directorios de Magento

Fuente: http://www.magentocommerce.com/wiki/2_-_magento_concepts_and_architecture/magento-folder-structure

  • / app / etc – configuración global y definición módulos a cargar
  • / app / code – dónde se define para cada modulo sus elementos y se encuentra el código (bloques, modelos, controladores,…) de los mismos. Se clasifican por codepools
  • / app / code / core – codepool que almacena los módulos nativos de magento (no debería alterarse nunca su contenido)
  • / app / code / community – codepool que almacena los módulos de la comunidad de magento
  • / app / code / local – codepool que almacen los módulos propios (y normalmente los de pago)
  • / app / code / {codepool} / {namespace} – Espacio de trabajo “namespace” que contiene varios módulos; suele hacer referencia a la empresa/proyecto que los desarrolla
  • / app / code / {codepool} / {namespace} / {Module} – Raíz del modulo “Namespace_Module”
  • / app / code / {codepool} / {namespace} / {Module} / etc – Archivos de configuración del módulo
  • / app / code / {codepool} / {namespace} / {Module} / controllers – Controladores del módulo
  • / app / code / {codepool} / {namespace} / {Module} / Block – Bloques del módulo
  • / app / code / {codepool} / {namespace} / {Module} / Model – Modelos de datos del módulo
  • / app / code / {codepool} / {namespace} / {Module} / sql – Archivos de instalación y actualización de la base de datos
  • / app / code / {codepool} / {namespace} / {Module} / sql / {resource} / – instalación y actualización para un modelo de datos específico
  • / app / code / {codepool} / {namespace} / {Module} / sql / {resource} / {type}-{action}-{versions}.(sql|php) – Archivos de actualización/instalación. Ejemplos: mysql4-install-0.1.0.php o mysql4-upgrade-0.1.0-0.2.0.sql
  • / app / design – localización de los paquetes de diseño (layouts, templates, translations)
  • / app / design / frontend – diseño de frontend
  • / app / design / adminhtml – diseño del backend
  • / app / design / {area} / {package} – paquete de diseño, cotiene uno o varios themes, theme “default” elemento común de ultimo recurso
  • / app / design / {area} / {package} / {theme} – theme de magento
  • / app / design / {area} / {package} / {theme} / layout – archivos .xml que definen la estructura de bloques para diferentes controladores del sitio web. Para cada bloque definen el par bloque de código-plantilla phtml.
  • / app / design / {area} / {package} / {theme} / template – plantillas .phtml (html con insercciones php) que reciben el objeto $this del bloque de código
  • / app / design / {area} / {package} / {theme} / locale – archivos de traducción para el tema
  • / app / locale – archivos de traducción generales
  • / app / locale / {locale (en_US)} – archivos de traducción para la localización idioma-país. En el caso inglés-EEUU (en_US) son los paquetes completos
  • / skin / {area} / {package} / {theme} / – contiene los archivos css, js e imágenes asociados a un theme
  • / errors – procesado de la salida visual de errores de la aplicación
  • / lib – contiene las librerías de código base sobre el que se construye Magento. Destacan Zend y Varien
  • / js – archivos javascript a nivel de aplicación
  • / media – archivos subidos (imágenes de producto o categoría, wysiwyg, documentos pdf, etc)
  • / shell – herramientas por sh (reindexado, gestión de logs, compilador de código)
  • / var – temporary files

Codepools

  • community: codepool para módulos de la comunidad (normalmente gratuitos)
  • code: codepool para módulos del sistema. Se diferencian 2 grandes grupos de módulos, “Zend” y “Mage”
  • local: codepool para módulos propios (normalmente de pago o desarrollados por uno mismo.

Estos codepools tienen una jerarquía de sobreescritura, siendo su orden de mayor a menor preferencia en la jerarquía:

  1. local
  2. community
  3. code

Esto supone, que en caso de existir algún elemento (módulo completo, configuración del módulo, modelo, helper, bloque, etc) en la misma ruta de una piscina se aplicará el de mayor jerarquía.

Ejemplo práctico:

Copiar /app/code/core/Mage/Page/Block/Html/Head.php a /app/code/local/Mage/Page/Block/Html/Head.php

Modificar getTitle(), reemplazando:

public function getTitle()
    {
        if (empty($this->_data['title'])) {
            $this->_data['title'] = $this->getDefaultTitle();
        }
        return htmlspecialchars(html_entity_decode(trim($this->_data['title']), ENT_QUOTES, 'UTF-8'));
    }

Por:

public function getTitle()
    {
        if (empty($this->_data['title'])) {
            $this->_data['title'] = $this->getDefaultTitle();
        }
        return htmlspecialchars(html_entity_decode(trim(‘prueba - ’ . $this->_data['title']), ENT_QUOTES, 'UTF-8'));
    }

Acceder a cualquier página del sitio y observar que el título ahora incluye en todas las páginas el prefijo.

** Advertencia: esta forma de sobreescribir elementos de los módulos no está recomendada, puede suponer problemas en la actualización de Magento o en la funcionalidad de módulos que no son del core.

Recorrido por los módulos del Core

Fuente: http://www.magentocommerce.com/wiki/_detail/doc/all-packages.png

Fuente: http://www.magentocommerce.com/wiki/_detail/doc/all-packages.png

· Mage_Admin

· Mage_Adminhtml

· Mage_AdminNotification

· Mage_Api

· Mage_Authorizenet

· Mage_Backup

· Mage_Bundle

· Mage_Cart

· Mage_Catalog

· Mage_CatalogIndex

· Mage_CatalogInventory

· Mage_CatalogRule

· Mage_CatalogSearch

· Mage_Centinel

· Mage_Checkout

· Mage_Cms

· Mage_Compiler

· Mage_Connect

· Mage_Contacts

· Mage_Core

· Mage_Cron

· Mage_Customer

· Mage_Dataflow

· Mage_Directory

· Mage_DirtectPost

· Mage_Downloadable

· Mage_Eav

· Mage_GiftMessage

· Mage_GoogleAnalytics

· Mage_GoogleBase

· Mage_GoogleCheckout

· Mage_GoogleOptimizer

· Mage_ImportExport

· Mage_Index

· Mage_Install

· Mage_Log

· Mage_Media

· Mage_Newsletter

· Mage_package

· Mage_Page

· Mage_PageCache

· Mage_Paygate

· Mage_Payment

· Mage_Paypal

· Mage_PaypalUk

· Mage_Poll

· Mage_ProductAlert

· Mage_Rating

· Mage_Reports

· Mage_Review

· Mage_Rss

· Mage_Rule

· Mage_Sales

· Mage_SalesRule

· Mage_Sedfriend

· Mage_Sendfriend

· Mage_Shipping

· Mage_Sitemap

· Mage_Tag

· Mage_Tax

· Mage_Usa

· Mage_Weee

· Mage_Widget

· Mage_Wishlist

· Mage_XmlConnect

Publicado

Categoría Fundamentos Magento

Etiquetado como arquitectura codepool Magento 1.x module