Joomladay 2008 Madrid - desarrollo de extensiones

Preview:

Citation preview

Por David Noguera CifuentesJoomlaDay 2008, Madrid

Desarrollo de extensiones con Joomla! 1.5

IntroducciónDesarrollo de MódulosDesarrollo de ComponentesDesarrollo de Plugins

Índice

IntroducciónJoomla es un CMS muy flexible, en parte gracia a lo fácil que resulta desarrollar extensiones.Esto propicia la aparición de una gran comunidad de desarrolladores que genera una gran cantidad de extensiones.Vamos a ver como crear extensiones para Joomla! 1.5.

El desarrollo de extensiones de Joomla! ha evolucionado con la aparición de la nueva versión de este popular CMS.

Se ha creado un potente framework y se ha potenciado el aspecto de POO aprovechando las cualidades de PHP 5.

Sin embargo, se ha pensado en la compatibilidad hacia atrás y en el funcionamiento en servidores con PHP 4.

Joomla 1.5 esta compuesto de módulos, componentes y plugins.

-Los módulos son pequeños trozos de contenido como puede ser un menú, esto es un modulo:

-El componente es donde se muestra el contenido principal en Joomla!

1. Desarrollo de módulosLos módulos se encuentran situados en el directorio modules dentro del directorio de instalación de Joomla y por cada módulo hay una carpeta con nombre mod_nombredelModulo .Nuestro módulo se va a llamar prueba.

la carpeta del módulo se llamará

mod_Prueba.

Estructura de un módulo:

-mod_Prueba.php : fichero php con el mismo nombre que el módulo, tomará en control del módulo cuando este sea llamado

-helper.php : clase helper , sirve para separar la lógica de la presentación.

-directorio tmpl: aquí guardaremos las plantillas que usaremos para la presentación -Por defecto, se usa el template default.php-mod_prueba.xml : fichero xml necesario para generar un instalable y donde especificaremos los parametros del módulo.

¿Qué va a hacer nuestro módulo?

Vamos a realizar un módulo simple que muestre un mensaje por pantalla: Hola MundoPor motivos de tiempo se van a quedar muchas cosas sin explicar, como el acceso a datos, uso de parámetros, etc.

2. Desarrollo de un componente MVC

¿Qué es MVC?Es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos.

http://es.wikipedia.org/wiki/Modelo_Vista_Controlador

¿Por qué es tan importante?Siguiendo este patrón crearemos código más ordenado.Será más fácil entender el código de terceros (y el nuestro), ya que sigue un patrón conocido.Aumenta la productividad.

El controlador: el controlador es el punto de entrada de la aplicación, se mantiene a la escucha de todas las peticiones, ejecuta la lógica de la aplicación, y muestra la vista apropiada para cada caso. El modelo : el modelo contiene todo el código relacionado con el acceso a datos. Es importante que sea un código lo más genérico posible y se pueda reutilizar. Nunca incluiremos lógica en el modelo, solamente consultas a la base de datos y validaciones de entrada de datos. La vista : la vista contiene el código que representará lo que nosotros veremos por pantalla, en este caso se trata de código html.

Convections over configuration

Existen dos formas de trabajar:-Usando un fichero XML donde

se especifica que es cada cosa.-Usando convenciones.

Joomla! usa convenciones

¿Qué son las convenciones?

Son normas a seguir para crear las vistas, los modelos y los controladores

Usar convenciones suele resultar más rápido que usar ficheros XML.

Los ficheros XML pueden crecer desorbitadamente hasta el punto de hacerse poco mantenibles.

Convenciones del framework MVC de Joomla!

Objeto Controlador: NombreComponente + Controller

Objeto Vistas:nombreComponente+View+nombreVista

Objeto Modelo:nombreComponente+Model+Nombre del modelo

Comenzamos con el desarrollo..

Punto de Entrada

<?php defined( ‘_JEXEC’ ) or die( ‘Restricted access’ ); require_once( JPATH_COMPONENT.DS.‘controller.php’ ); if($controller = JRequest::getWord(‘controller’)) {    $path = JPATH_COMPONENT.DS.‘controllers’.DS.$controller.‘.php’;    if (file_exists($path)) {        require_once $path;    } else {        $controller = “”;    }} $classname    = ‘PruebaController’.$controller;$controller   = new $classname( );$controller->execute( JRequest::getVar( ‘task’ ) ); $controller->redirect();?>

Funcionamiento del punto de entrada

Se comprueba si viene un parámetro en la query string que establezca un controlador, y si viene se importa el fichero con el controlador. Se instancia el controlador. Se ejecuta el método execute del controlador. Se ejecuta el método redirect del controlador.

Controlador<?php    defined( ‘_JEXEC’ ) or die( ‘Restricted access’ );      jimport(’joomla.application.component.controller’);     class PruebaController extends JController    {       function display()      {            parent::display();      }    }    ?>

<?php    defined( ‘_JEXEC’ ) or die( ‘Restricted access’ );    jimport( ‘joomla.application.component.view’);    class PruebaViewPrueba extends JView    {    function display($tpl = null)  {    $model =& $this->getModel();      $mensaje= $model->getMensaje()      $this->assignRef( ‘mensaje’, $mensaje );       parent::display($tpl);     }     }    ?>

com_prueba/views/prueba/view.html.php

com_prueba/views/prueba/tmpl/default.php

<h1><?php echo $this->mensaje ?></h1>

Modelo<?php defined(’_JEXEC’) or die();jimport( ‘joomla.application.component.model’ ); class PruebaModelPrueba extends JModel{   function getMensaje(){       //Aquí se obtienen datos de la BD       return “Hola soy un valor que ha devuelto el modelo”;    }}?>

Resultado FinalURL: index.php?option=com_prueba&view=prueba

Investiga por tu cuenta!!

Si no sabes como hacer algo, entra en los componentes que tiene Joomla! instalados y mira su código.

3. Desarrollo de Plugins

¿Qué son los plugins?Son extensiones que permiten modificar

el comportamiento del programa

¿Qué hacen los plugins?Interceptan ciertos eventos prefijados

para ejecutar nuestro código antes o después del evento.

Tipos de plugins

Existen varios tipos de pluginsPor cada tipo de plugin existe un directorio dentro del directorio pluginsPor lo tanto tenemos el directorio plugins/content para los plugins de tipo content y así con todos los tipos.Existen varios tipos, mira en tu carpeta plugins y comprueba los tipos.

Ganchos

Un plugin es un objeto que deriva de la clase JPlugin. Esta clase tiene unos métodos definidos que son ganchos (hooks) Por lo tanto tendremos que sobrescribir las funciones gancho que necesitemos y escribir nuestro código allí. Ejemplo: onLoginUser

Desarrollo de un plugin

Objetivo del plugin:

Mostrar un mensaje antes del cada artículo

Estructura del plugin

Fichero XML del plugin

<?xml version=”1.0″ encoding=”utf-8″ ?><install version=”1.5″ type=”plugin” group=”content”><name>Content - Prueba</name><author>David Noguera</author><creationDate>15-02-2008</creationDate><authorEmail>david@nosolocodigo.com</authorEmail><authorUrl>www.nosolocodigo.com</authorUrl><version>1.0</version><description>Muestra un mensaje antes de mostrar el contenido</description><files><filename plugin=”Prueba”>Prueba.php</filename><filename>Prueba.xml</filename></files></install>

Fichero holaMundo.php<?phpdefined( ‘_JEXEC’ ) or die( ‘Acceso Restringido’ );jimport( ‘joomla.plugin.plugin’ ); // Convención : Nombre de la clase (plg + tipo plugin + nombre del plugin)class plgContentPrueba extends JPlugin { function plgContentPrueba( &$subject ) {    parent::__construct( $subject );} function onBeforeDisplayContent(&$article, &$params, $limitstart=0) {     $salidaPantalla = ‘<h2>Hola Mundo</h2>’;    return $salidaPantalla;    }}?>

Resultado final

Fin de la presentación