Está en: » Blog »

HMVC – Sistema modular en codeIgniter

HMVC – Sistema modular en codeIgniter

codeIgniter

HMVC es un “plugin” que nos permite pogramar módulos bajo el framework codeigniter.

En un principio, la librería nos permite tener para cada módulo los controladores, modelos, vistas y librerías que necesitemos. Es una librería realmente potente ya que incluso nos permite cargar la salida de una función de un controlador en otro controlador.

Página y archivo de descarga:
http://codeigniter.com/wiki/Modular_Extensions_-_HMVC/

Instalación:

Copiamos todos los archivos (Controller.php, Modules.php y MY_Router.php) en la ruta application/libraries.

Una vez copiados dichos archivos, creamos una carpeta llamada modules dentro de application y en su interior crearemos los módulos necesarios. Cada módulo deberá tener varias carpetas: config, controllers, models, libraries y views.

Lógicamente, dentro de controllers, meteremos los controladores, así como en las respectivas carpetas.

Funcionamiento básico:

Si el nombre y clase del controlador tiene el mismo nombre que la carpeta del módulo, este se llamará automáticamente cuando accedamos sólo especificando el nombre del módulo (ej: http://miaplicacion/modulo ó http://miaplicacion/modulo/funcion). En caso contrario, para acceder a dicho controlador lo haríamos así: http://miaplicacion/modulo/clase/funcion

La carpeta config sólo nos servirá (de momento) para:

  • autoload.php: funcionamiento como el de codeigniter. Nos servirá para cargar automáticamente las librerías, modelos… necesarios para el módulo.
  • routes.php: funcionamiento como el de codeigniter. Nos servirá para hacer la configuración de rutas y redirecciones para dicho módulo.

Cuando llamamos a una librería, modelo o vista, por defecto se busca dentro de la carpeta del módulo y si no se encuentra las busca en application y si tampoco las encuenta busca ya en último lugar en system.

Métodos básicos de funcionamiento:

El funcionamiento de cada módulo es como si fuese una aplicación diferente para cada uno. La ventaja de la modificación que he realizado es que nos permite reutilizar código de otros módulos.

Podemos recojer la salida del controlador/vista de otro módulo y guardarla o mostrarla según nos convenga (sólo para la versión php5). Sería como llamar a una vista pasándole como tercer parámetro TRUE.

$retorno = modules::run('modulo/controlador/funcion/', $parametro1, $parametro2, $parametro...);

Podemos cargar también un controlador como si fuese una librería:

$this->load->module('modulo/controlador', $parametro1, $parametro2, $parametro...);
$retorno = $this->controlador->funcion();

Aunque lo carguemos como una librería, el controlador cargado seguirá llamando a sus modelos, vistas y demás como si fuese independiente.

Para modelos, vistas y librerías, el funcionamiento es tal cual a codeigniter y podemos acceder a otros módulos anteponiendo el nombre del módulo al archivo:

$this->load->model('modulo/modelo_model');

En la página de la librería podemos encontrar algunos módulos ya desarrollados como una galería fotográfica, captcha, etc…

Discussion

  1. julian dice:

    Hola, muy interesante. Podrías comentarme a ver si esto de usar módulos sirve por ejemplo en el caso donde tengo un cuadro de login, y quiero que ese cuadro aparezca en el sidebar de una página? O por ejemplo si quisiera tener un cuadro de Carrito de Compra y hacerlo aparecer siempre en determinada posición de las páginas? Estoy vbien rumeado o no?

  2. Tu ejemplo y pregunta me ha dejado un poco descolocado.
    No sé exáctamente si entiendo tu pregunta así que intentaré resumir un poco para qué sería esto.
    Para empezar, es php, lo cual es un lenguaje de programación de servidor.
    CodeIgniter es un framework para php y poco tiene que ver con formularios de HTML.

    Dicho esto, HMVC es una librería que nos aporta la funcionalidad de la programación modular en el framework codeIgniter (programación php en el lado del servidor).

    Esta librería nos permite hacer partes independientes de una aplicación, de forma que al unirlas, nos queda la aplicación funcional.

    Por ejemplo, un módulo podría ser una galería fotográfica.
    Imaginemos que tenemos un módulo de galería fotográfica que se llama galeria. Al entrar a http://miaplicacion.com/galeria estaríamos accediendo a la programación de dicho módulo. Osease, una función de ese módulo se ejecutaría y por ejemplo, leería las fotografías guardadas en una base de datos, comprobaría si están guardadas en el servidor y las maquetaría en html para enviárselo al navegador y que este las muestre.

    Espero haberte aclarado el dilema…
    Saludos

Deje su comentario

Previsualización de comentario
  1. Anónimo dice:





Pings para esta entrada