• Increase font size
  • Default font size
  • Decrease font size
  • dark
  • light
  • leftlayout
  • rightlayout

Como crear componentes MVC para Joomla 1.5

Este artículo pretende explicar la creación de un componente usando la metodología MVC (Model View Controller) que utiliza el nuevo Joomla 1.5 (En desarrollo).

Se aceptan comentarios, sugerencias, insultos y demases con el fin de mejorar estos textos.

Conceptos básicos 

 Los componentes son pequeños programas que se instalan en Joomla que permiten la manipulación de los datos hacia un objetivo particular.

Existen miles de componentes ya realizados, algunos con licencias libres y otros no, para la actual versión de Joomla (la 1.0) y poco se sabe de como hacer componentes para la versión en desarrollo (1.5).

En esta nueva versión se realizo una completa reestructuración del sistema con mejoras en todos los aspectos.

Estructura de los archivos

  • hmundo.php
  • controller.php
  • views/frontpage/view.html.php
  • views/frontpage/tmpl/default.php 

Que es MVC ?

El MVC o Model View Controller (Modelo Vista Controlador) es un patrón que se utiliza en la arquitectura de algún software que separa el manejo de datos de una aplicación, la interfaz del usuario y la lógica de control.

Esta forma de programar es utilizada bastante en el ámbito de la programación Web para facilitar el ordenamiento del código y la simplicidad para crearlos. 

De esta manera se separan los componentes en la nueva versión de Joomla (1.5).

En 3 partes:

  1. Model (Modelo)
  2. View (Vista)
  3. Controller (Controlador)

Model (Modelo)

La parte de modelo es la que encapsula toda la información del componente. Ofrece varias rutinas para manipular la información recibida del usuario.

Nosotros vamos a empezar poniendo esta parte en el archivo principal del componente que se va a llamar hmundo.php. Después al hacer un componente mas grande supongo que se debería mover esta parte a algún directorio aparte para hacer mas fácil las cosas.

<?php
// No permitimos el acceso directo
defined( '_JEXEC' ) or die( 'Restricted access' );
// Cargamos el controlador
require_once (JPATH_COMPONENT.DS.'controller.php');

// Creamos nuestro propio controlador (controller.php)
$classname  = 'HMundoController'.$controller;
$controller = new $classname( );
// Ejecutamos la tarea
$controller->execute( JRequest::getVar('task'));
$controller->redirect();
?>

La primer linea refiere a la seguridad que tiene Joomla de que no se acceda al componente de otra manera.

Joomla 1.5 nos permite utilizar variables globales como JPATH_COMPONENT que es el path hacia el componente mismo (en este caso components/com_hmundo). Si se necesita especificar el path del componente (components/com_hmundo) o el path del componente de administración (administrator/components/com_hmundo) se puede utilizar las variables globales JPATH_COMPONENT_SITE o JPATH_COMPONENT_ADMINISTRATOR respectivamente.

DS imprime una barra / o \ dependiendo de lo que se necesite. Esta tarea la hace automáticamente así que no nos tendremos que preocupar mas si el servidor esta basado en *unix o en Mocosoft Windows.

La función JRequest:getVar('variable') obtiene las variables definidas en la URL o mediante POST (formularios). Si tenemos la URL index.php?option=com_hmundo&task=nombredelatarea, la funcion JRequest:getVar('task') devolveria nombredelatarea.

Controller (Controlador)

El controlador es el responsable de responder a las peticiones de los usuarios y manipular los datos para después devolverlos. Como en este componente de prueba que estamos realizando vamos a tener una sola tarea (que es la de mostrar el texto 'Hola Mundo!') solamente tendríamos  que poner el método display() en nuestro controlador.

<?php

// No permitimos el acceso directo
defined('_JEXEC') or die();

// Importamos el controlador de Joomla
jimport('joomla.application.component.controller');

// Iniciamos nuestro propio controlador 'HMundoController'
class HMundoController extends JController {

    function display() {
        parent::display();
    }
}

?>

La linea de jimport importa los archivos del controlador de Joomla. Después creamos nuestro propio controlador extendiendo el de Joomla.

View (Vista)

El método de "vista" de Joomla es muy simple. Lo único que hace es obtener la información a mostrar y pasarla al template html (tmpl).

Para realizar esto se utiliza el método JView::assignRef descripto en el ejemplo de abajo.

<?php
   
defined('_JEXEC') or die();

jimport('joomla.application.component.view');

class hmundoViewfrontpage extends JView
{

    function display($tpl = null)
    {      
        $hola = "Hola Mundo!";
        $this->assignRef( 'hola',   $hola );

        parent::display($tpl);
    }

}
?>

Ahora lo que restaría hacer es crear un archivo de template que se va a llamar default.php y se va a ubicar en el directorio views/frontpage/tmpl/.

Lo que hace esto es recibir la información de la "vista" (el archivo view.html.php) y maquetarla en código html para su visualización.

<?php
    defined('_JEXEC') or die('Restricted access');
?>

<h1><?php echo $this->hola; ?></h1>

Archivo de instalación XML 

Para finalizar necesitamos crear el archivo XML para la instalación del componente. En este caso lo vamos a llamar hmundo.xml y se trata de una descripción del componente, quien lo creo y otros datos particulares.

Si bien podemos instalar nuestro componente directamente copiando los archivos al directorio components/com_hmundo es recomendable crear este archivo para hacer un componente instalable desde la administración del Joomla.

El código seria algo asi:

 <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/component-install.dtd">
<install type="component" version="1.5.0">
    <name>Hola Mundo</name>
    <creationDate>27/03/2007</creationDate>
    <author>Matias Aguirre</author>
    <authorEmail> Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla </authorEmail>
    <authorUrl>http://www.matware.com.ar</authorUrl>
    <copyright>?</copyright>
    <license>GNU</license>
    <version>0.0.1</version>
    <description>Este es un componente de ejemplo para Joomla 1.5</description>
    
    <files folder="site">
        <filename>index.html</filename>
        <filename>hmundo.php</filename>
        <filename>controller.php</filename>
        <filename>views/index.html</filename>
        <filename>views/frontpage/index.html</filename>
        <filename>views/frontpage/view.html.php</filename>
        <filename>views/frontpage/tmpl/index.html</filename>
        <filename>views/frontpage/tmpl/default.php</filename>
    </files>
    
    <administration>
        <menu>Hola Mundo</menu>
        
        <files folder="admin">
        </files>        
    </administration>
</install>

Componente de este articulo

Bibliografía