Tutorial para la creación de una Extensión de Magento (parte 1)

23 Comments

Este post inicia una serie de tutoriales para el desarrollo de módulos o extensiones para Magento intentando ayudar en el principal problema que tiene aprender a desarrollar extensiones para este CMS: saber por dónde empezar.

Magento utiliza una arquitectura MVC (Modelo-Vista-Controlador). En muy pocas palabras, la arquitectura MVC consiste en separar el código responsable de la lógica de negocio de una aplicación (modelo) de su representación visual (vista) y de las acciones que pueden realizarse sobre dicha lógica (controlador).

En esta primera parte del tutorial, crearemos una extensión muy simple, que no contendrá lógica de negocio alguna. Además, tampoco nos centraremos en la vista por el momento, ya que lo que queremos es símplemente indicar los pasos que hay que realizar para crear un módulo nuevo. No obstante, y para dotar de un mínimo de funcionalidad a nuestra primera extensión, y que podamos probarla y ver que funciona, sí que se tratará, de forma sencilla, cómo funcionan los controladores. Modelos y Vistas se tratarán en las siguientes partes del tutorial.

Empezamos!

Es necesario indicar a Magento la existencia de nuestra extensión. Esto se hace creando un fichero xml con el nombre del espacio de nombres y el nombre de la extensión en la caperta /app/etc/modules/ (en este tutorial asumiremos que / es la ruta de la carpeta de nuestra instalación de Magento).

[sourcecode light=»true»]/app/etc/modules/Brainsins_Holamundo.xml[/sourcecode]

 

[sourcecode language=»xml»]
<?xml version="1.0"?>
<config>
<modules>
<Brainsins_Holamundo>
<active>true</active>
<codePool>local</codePool>
</Brainsins_Holamundo>
</modules>
</config>
[/sourcecode]

Una vez creado este fichero, y tras actualizar la cache de Magento – System -> Cache Management – podremos ver que Magento ha reconocido nuestra extensión. Para ello, deberemos ir al menú System -> Configuration del backstore, y en el menú de la izquierda Advanzed -> Advanzed. Aquí se nos permitirá activar o desactivar la salida visual de todas las extensiones instaladas. Si nuestra extensión se encuentra instalada (reconocida por Magento) deberá encontrarse en esta lista. Respecto a la cache, por comodidad, yo recomiendo deshabilitarla mientras estemos desarrollando la extensión, y volver a habilitarla cuando hayamos terminado.

Lista de Extensiones en Disable Modules Output muestra la nueva extensión Brainsins_Holamundo

Brainsins_Holamundo aparece listada

Después, crearemos el directorio de nuestra Extensión:

[sourcecode light=»true»]/app/code/local/Brainsins/Holamundo[/sourcecode]

En este directorio se almacenarán los archivos de nuestra extensión. Según avancemos en otras partes del tutorial, iremos añadiendo subdirectorios. El subdirectorio Brainsins se corresponde con el espacio de nombres, o namespace, para todas nuestras extensiones, mientras que la carpeta HolaMundo es la carpeta que se corresponde directamente con la extensión. La razón del namespace es que así nuestra extensión HolaMundo podrá ser diferenciada de otras extensiones con el mismo nombre, ya que éstas pertenecerán a otros espacios de nombres.

Dentro de este directorio crearemos las siguientes carpetas:

[sourcecode light=»true»]

/app/code/local/Brainsins/Holamundo/etc

/app/code/local/Brainsins/Holamundo/controller

[/sourcecode]

A continuación, crearemos el fichero de configuración de nuestro módulo en el directorio etc

[sourcecode light=»true»]
/app/code/local/Brainsins/Holamundo/etc/config.xml
[/sourcecode]

 

[sourcecode language=»xml»]
<?xml version="1.0"?>
<config>
<modules>
<Brainsins_Holamundo>
<version>0.1.0</version>
</Brainsins_Holamundo>
</modules>
<frontend>
<routers>
<holamundo>
<use>standard</use>
<args>
<module>Brainsins_Holamundo</module>
<frontName>holamundo</frontName>
</args>
</holamundo>
</routers>
</frontend>
</config>
[/sourcecode]

La parte importante de este fichero es la contenida en la etiqueta <frontend>. Con ella especificamos elementos de interacción con los usuarios para nuestra extensión. La etiqueta <routers> indicará los controladores que tendrá el módulo. La etiqueta <frontName> será la url relativa a nuestra tienda para que se ejecute el controlador. Es decir, que si la url de nuestra tienda es www.mitiendamagento.com, nuestro controlador se ejecutará en las urls que comiencen por www.mitiendamagento.com/holamundo.

Hemos indicado en el fichero de configuración que disponemos de controladores para la extensión, ahora hay que crear un controlador:

[sourcecode light=»true»]
/app/code/local/Brainsins/Holamundo/controllers/IndexController.php
[/sourcecode]

 

[sourcecode language=»php» wraplines=»false»]
<?php
class Brainsins_Holamundo_IndexController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
echo ‘Hola Mundo!’;
}
}
[/sourcecode]

Sobre este fichero, quiero destacar unas cuantas cosas:

  • Si nos fijamos en el nombre de la clase: Brainsins_Holamundo_IndexController, podemos notar cómo tiene una relación con la ruta y el nombre dle fichero que la contiene: /app/code/local/Brainsins/Holamundo/controllers/IndexController.php. Veremos este comportamiento repetido con todas las clases que creemos.
  • Todas las clases que creemos utilizarán el mecanismo de Herencia. En este caso heredamos de la clase Mage_Core_Controller_Front_Action, por eso el código de nuestro controlador es tan simple.

Una vez hecho esto, ya podremos observar el comportamiento de nuestra extensión! Para ello, basta con acceder a la url de nuestra tienda añadiendo /holamundo. Por ejemplo, www.mitiendamagento.com/holamundo. Como era de esperar, veremos una página en blanco con el mensaje «Hola Mundo!». También veremos el mismo mensaje si entramos en las direcciones www.mitiendamagento.com/holamundo/index y www.mitiendamagento.com/holamundo/index/index. Esto se debe a que «index» es tanto el controlador por defecto como la acción por defecto, y en Magento, para decidir qué controlador ejecutar y qué método ejecutar (acción) dentro de dicho controlador, se utiliza la siguiente estructura de url:

www.mitienda.com/controlador/acción

Si nos fijamos, el controlador index se asocia al controlador IndexController y la acción index al método indexAction.

Para añadir otra acción, basta con implementar un segundo método, por ejemplo, saludarAction(), en nuestro controlador:

[sourcecode light=»true»]
/app/code/local/Brainsins/Holamundo/controllers/IndexController.php
[/sourcecode]

 

[sourcecode language=»php» wraplines=»false» highlight=»7,8,9,10,11″]
<?php
class Brainsins_Holamundo_IndexController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
echo("Hola Mundo!");
}

public function saludarAction() {
$input = $this->getRequest()->getParam("nombre");
$name = $input ? $input : "Desconocido";
echo("Hola " . $name . "!");
}
}
[/sourcecode]

Aunque no es objeto de este tutorial, puede verse cómo se ha capturado un parámetro pasado en la url (GET) para obtener el valor del nombre a quien saludar. De esta forma, al haber creado la acción saludar para el controlador index, el acceso a la url www.mitiendamagento.com/holamundo/index/saludar mostrará el mensaje «Hola Desconocido!», mientras que si pasámos un parámetro nombre, como en www.mitiendamagento.com/holamundo/index/saludar?nombre=Alex el mensaje mostrado será «Hola Alex!».
En la segunda parte del tutorial veremos cómo incorporar un modelo a nuestra extensión.

Referencias

Magento for Developers: Part 1 – Introduction to Magento 
Custom Module with Custom Database Table 
Magento Controller Dispatch and Hello World
 
 
 
 

Suscríbete a nuestra newsletter

23 Comments
    • Marc Rodríguez Espinach
    • 11/06/2014
    Responder

    Hola Alejandro, estoy siguiendo tu tutorial y me parece tremendo.

    Muchas gracias por el aporte, simpelmente comentarte un pequeño fallito que con lo puñetero que es magento para estos temas….

    Justo al comienzo del tutorial cuando defines la estructura de directorios del modulo, debajo de:

    «Dentro de este directorio crearemos las siguientes carpetas:»

    Definir directorio «/app/code/local/Brainsins/Holamundo/controller» tienes que cambiar el nombre de controller por controllers.

    Me ha dado un poco de morcilla hasta que mas abajo he visto el nombre bien puesto.

    Un saludo!

      • Estela Gil
      • 11/06/2014
      Responder

      Gracias Marc, gracias por el apunte. Y gracias por leernos y que te haya servido. Un abrazo.

    • Kinon
    • 07/04/2014
    Responder

    Me parece perfecto, gracias. ¿Para cuando el complemento? Parametros en backend. 🙂

  1. Pingback: Top 10 consejos básicos sobre e-commerce

    • Zuthiel
    • 20/06/2012
    Responder

    Yo amé tu tutorial, muchas gracias \o/

    • Aaron
    • 10/04/2012
    Responder

    Interesantisimo documento, tengo que crear un modulo en el panel de administrador, seguire con tus tutoriales y si tengo dudas te preguntare…

    eres un Crack!

    • Josue Hernandez
    • 07/03/2012
    Responder

    Muchas Gracias me a side muchisima utilidad ahora solo buscare como incluir el modulo desde un bloque en el header xD Gracias

    • Abra
    • 13/02/2012
    Responder

    Saludos, pueden ayudarme, estoy trabajando 25 horas 🙁 y necesito hacer una extensión para método de pago, según yo debe ser fácil, pero no conozco mucho de magento.

    Alguien podría ayudarme, gracias

    • Harold Castañeda
    • 27/09/2011
    Responder

    Hola amigo, me parecio excelente este tuto, aunque tuve inconvenientes debido a que dentro de la descripcion del mismo, te falto una «s» en la parte en que hay que crear los controladores y la carpeta etc. Seria bueno lo corrigieras para que otras personas no pasen horas pensando que ocurrio.

    Gracias de todas formas.

    • javier
    • 27/08/2011
    Responder

    https://127.0.0.1/tienda/index.php/holamundo
    marca un error The page you requested was not found, and we have a fine guess why.
    es magento 1.5
    me puede ayudar la estoy trabajando local esta es la url
    https://127.0.0.1/tienda/holamundo

    • Javier, prueba a deshabilitar la cache de tu instalación de Magento. En versiones anteriores de Magento yo tuve problemas al acceder a través de la dirección 127.0.0.1, ya que el navegador no guardaba cookies. Un saludo!

  2. Pingback: Tutorial para la creación de una Extensión de Magento (parte 1) | BrainSINS | Magento Training Course

  3. Pingback: Bitacoras.com

    • matias
    • 20/07/2011
    Responder

    Hola de nuevo Alex. Probé en la version magento 1.5 y si funciona.
    Gracias!!!
    Cuando publicas las partes siguientes!?

    • Responder

      Matías, Las siguiente parte la publicaré a principios de la semana que viene. La tercera a principios de la semana siguiente.

    • matias
    • 20/07/2011
    Responder

    Hola Alex. Si, tengo la cache descativada.

  4. Por fin; Explicado para gente normal, con conocimientos, pero no genios. Enhorabuena Alex

    • matias
    • 20/07/2011
    Responder

    Hola, segui todos los pasos pero magento no encuentra la pagina.
    cuando escribo midominio/holamundo.
    Arroja el error 404.

    Uso Magento 1.3.3
    Que puede estar pasando?

    • Responder

      Matías, aunque no lo digo en el POST, el tutorial está probado sobre la versión 1.5. He trabajado con la versión 1.4 pero no con la 1.3, así que no sé si hay cambios significativos. Por si acaso, ¿has probado a invalidar o a actualizar la cache?

  5. Responder

    Vaya, una entrada parecida tenía yo en mente, pero esta me parece genial, creo que no la voy a hacer y mencionaré la vuestra. Un saludo

 

Deja tu comentario