Menu Principal
Categorias Articulos
Quien esta en linea?
Hay 6 invitados en línea
Publicidad
25 Mar
Como crear componentes MVC para Joomla 1.5 PDF Imprimir E-Mail
Escrito por Matias Aguirre   
26 03 07

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 de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla </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

 
< Anterior

Contenidos al azar

20 Jun
30 May
29 May
27 May
26 May
  • Blog >> Reflexiones

    La desprestigiada forma de suspender las sanciones a Cuba que acaba de adoptar la Unión Europea el 19 de junio ha sido abordada por 16 despachos internacionales de prensa. No implica en lo absoluto consecuencia económica alguna para nuestro país. Por el contrario, las leyes extraterritoriales de Estados Unidos y, por lo tanto, su bloqueo económico y financiero continúan plenamente vigentes.

     

    A mi edad y en mi estado de salud, uno no sabe qué tiempo va a vivir, pero desde ahora deseo consignar mi desprecio por la enorme hipocresía que encierra tal decisión. Esto se hace aún más evidente cuando coincide con la brutal medida europea de expulsar a los inmigrantes no autorizados procedentes de los países latinoamericanos, en algunos de los cuales la población en su mayoría es de origen europeo. Los emigrantes son además fruto de la explotación colonial, semicolonial y capitalista.

  • Blog >> Linux

    Uy... mi distribucion favorita es Slackware....Money mouth

  • Blog >> Joomla

    Hay un problema para ver los nombres en la ultima versión estable de RSGallery2 (1.14.3 Alpha - SVN 649). Este patch arregla ese problema.

     $ diff rsgcomments.class.php.old rsgcomments.class.php
    --- rsgcomments.class.php.old   2008-05-29 14:38:49.000000000 -0300
    +++ rsgcomments.class.php       2008-05-29 14:39:04.000000000 -0300
    @@ -384,7 +384,7 @@
                                    <td colspan="2" class="title"><span class='posttitle'><?php echo $comment['subject'];?></span></td>
                            </tr>
                            <tr>
    -                               <td valign="top" width="100"><span class="postusername"><?php echo galleryUtils::genericGetUsername( $comment['user_id'] );?></span></td>
    +                               <td valign="top" width="100"><span class="postusername"><?php echo $comment['user_name'] ;?></span></td>
                                    <td valign="top" class="content_area">
                                    <?php echo mosFormatDate($comment['datetime']);?>
                                    <hr />
  • Blog >> Noticias
     
    El proyecto Tren para Todos es una alternativa a la construcción del Tren Bala que va a construirse en la Ciudad de Buenos Aires hasta Rosario y Cordoba.
    Hay que juntar un millon de firmas para parar el proyecto de Tren Bala, van 500 mil. Me gustaria saber que pasa si se llega al millon...
  • Blog >> Musica
    Un mundo cruel
    una noche cruel
    una ciudad dormida
    y sin sueños
    un beso final,
    sonrisa y después
    te vas alejando
    sin remedio
    Nunca te vi en ningún aviso
    nunca te vi en la televisión
    nunca te vi en ningún diario
    nunca nunca nunca escuché tu voz...
    Lavan tu razón
    queman tu corazón
    la única aventura es ver colores
    Te despertaré
    despertame ya
    de esta pesadilla
    de ilusiones
    Nunca te vi en ningún aviso
    nunca te vi en la televisión
    nunca te vi en ningún diario
    nunca nunca nunca escuché tu voz...
    Una noche mas ya no voy a dormir
    en tus brazos
    No sé que me tomo, no sé donde estoy
    no sé hacia donde van mis pasos
    Que rara y vacía y desierta y perdida
    está la avenida hoy
    que rara y vacía y desierta y perdida
    estás...
    La la la la
    somos fantasmas peleándole al viento
    La la la la
    somos fantasmas peleándole al viento.