La primera tarea que debemos abordar a la hora de comenzar a programar dentro de Magento es la creación de un módulo. Es muy práctico y sencillo atacar a los componentes de Magento desde simples scripts que importan el autocargador y así poder trabajar con los datos. Pero tarde o temprano necesitaremos integrarlo todo dentro de Magento y así quedará más limpio. Podremos modificar el comportamiento de Magento desde dentro, aumentando sus funcionalidades si es que lo necesitamos.
Este post está escrito usando un Magento 1.9.2.4.
Dónde van los códigos
Primero de todo, saber que dentro del directorio /app es donde va a ir la mayoría de la programación de servidor. A su vez, dentro de /app tenemos los siguientes directorios:
- /app/code/ <– códigos de programación de servidor y otras configuraciones.
- /app/code/community <– códigos de módulos de la comunidad, ya sean comprados o gratis.
- /app/code/core <– el core, esto nunca debemos de tocarlo, podemos hacer overriding para evitar tocarlo.
- /app/code/local <– aquí van los archivos de módulos propios de esta instalación.
- /app/design <– como su nombre indica, ficheros relacionados con el diseño.
- /app/etc/modules <– declaración, activación, configuraciones iniciales.
- /app/locale <– ficheros de traducciones.
Simplificando mucho esto es lo que tenemos y por donde vamos a empezar a programar. Para comprender cómo podemos modificar el funcionamiento del core de Magento sin tocar los ficheros de dicho core, podemos duplicar los ficheros que necesitemos en nuestra carpeta /app/code/local guiándonos con los que hay en /app/code/core
El overriding en Magento funciona buscando los códigos primero en la carpeta /app/code/local, luego en /app/code/community, y si no lo encuentra entonces va a /app/code/core . Así podremos modificar el core y las extensiones de terceros sin editar los originales, copiando dichos ficheros a la carpeta /app/code/local y así podremos seguir actualizando tanto el propio Magento como las extensiones de la comunidad.
Activando el módulo
Ponemos un fichero .xml en /app/etc/modules/Jnjsite_All.xml como el siguiente:
<?xml version="1.0"?> <config> <modules> <Jnjsite_Jnjinitial> <active>true</active> <codePool>local</codePool> </Jnjsite_Jnjinitial> </modules> </config>
Esto le dice a Magento que active el módulo que va a estar en /app/code/local/Jnjsite/Jnjinitial, lo ideal es que pongas /app/code/local/[vendorname]/[modulename] . Muchas extensiones llevan dentro varios módulos, todos están dentro del mismo directorio con su ‘vendorname’, con sus respectivos ‘modulename’. Luego podemos encontrarnos todos los módulos activados mediante un sólo fichero como el de arriba. O podemos tener un fichero para cada módulo independiente.
Para el nombre de este fichero, sueles encontrar la forma [vendorname]_[modulename].xml . O como en el ejemplo de arriba [vendorname]_All.xml si quieres activar desde un sólo fichero todos tus módulos. O si los quieres tener unidos sin llevártelos de un Magento a otro independientemente.
Configuración inicial del módulo
Ahora necesitamos crear el fichero de configuración del módulo. Esto ya es dentro del propio carpeta del módulo. Para esto lo que hacemos es crear el archivo /app/code/local/Jnjsite/Jnjinitial/etc/config.xml como el siguiente:
<?xml version="1.0"?> <config> <modules> <Jnjsite_Jnjinitial> <version>0.0.1</version> </Jnjsite_Jnjinitial> </modules> </config>
Muy bien, ya tenemos un módulo base creado dentro de Magento. Ahora mismo no hace nada pero es la estructura básica sobre la que construiremos nuestras funcionalidades.
Comprobando
Ahora tenemos que refrescar los ficheros de cache de Magento y se regenerarán con nuestro nuevo módulo. Para esto, eliminamos el contenido del directorio /var/cache/
Este módulo no hace nada, simplemente se declara y existe dentro de Magento. Será la base sobre la que construiremos nuestras funcionalidades. Para ver que realmente está correctamente hecho tenemos que ir a Sistema > Configuración > Avanzado > Avanzado y debería de estar junto con el resto de módulos. En esta sección es donde podremos habilitar o deshabilitar módulos.
Si lo estamos viendo es que todo ha ido bien.
Diferencia entre módulo y extensión
Dentro de Magento, todo son módulos que añaden funcionalidades al core de Magento. La única diferencia que hay, es que los módulos se convierten en extensiones cuando se empaquetan para compartirlos, venderlos, publicarlos en el Magento Connect, etc. Es decir, una extensión es un módulo o varios módulos empaquetados.
A ver si puedo pronto seguir escribiendo otro post con cómo añadir más y más funcionalidades a nuestro Magento.
Un saludo.