Joomladay 2008 Madrid - desarrollo de extensiones

35
Por David Noguera Cifuentes JoomlaDay 2008, Madrid Desarrollo de extensiones con Joomla! 1.5

Transcript of Joomladay 2008 Madrid - desarrollo de extensiones

Page 1: Joomladay 2008 Madrid - desarrollo de extensiones

Por David Noguera CifuentesJoomlaDay 2008, Madrid

Desarrollo de extensiones con Joomla! 1.5

Page 2: Joomladay 2008 Madrid - desarrollo de extensiones

IntroducciónDesarrollo de MódulosDesarrollo de ComponentesDesarrollo de Plugins

Índice

Page 3: Joomladay 2008 Madrid - desarrollo de extensiones

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.

Page 4: Joomladay 2008 Madrid - desarrollo de extensiones

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.

Page 5: Joomladay 2008 Madrid - desarrollo de extensiones

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!

Page 6: Joomladay 2008 Madrid - desarrollo de extensiones

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.

Page 7: Joomladay 2008 Madrid - desarrollo de extensiones

Estructura de un módulo:

Page 8: Joomladay 2008 Madrid - desarrollo de extensiones

-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.

Page 9: Joomladay 2008 Madrid - desarrollo de extensiones

¿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.

Page 10: Joomladay 2008 Madrid - desarrollo de extensiones

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

Page 11: Joomladay 2008 Madrid - desarrollo de extensiones

¿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.

Page 12: Joomladay 2008 Madrid - desarrollo de extensiones

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.

Page 13: Joomladay 2008 Madrid - desarrollo de extensiones

Convections over configuration

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

se especifica que es cada cosa.-Usando convenciones.

Joomla! usa convenciones

Page 14: Joomladay 2008 Madrid - desarrollo de extensiones

¿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.

Page 15: Joomladay 2008 Madrid - desarrollo de extensiones

Convenciones del framework MVC de Joomla!

Objeto Controlador: NombreComponente + Controller

Objeto Vistas:nombreComponente+View+nombreVista

Objeto Modelo:nombreComponente+Model+Nombre del modelo

Page 16: Joomladay 2008 Madrid - desarrollo de extensiones
Page 17: Joomladay 2008 Madrid - desarrollo de extensiones

Comenzamos con el desarrollo..

Page 18: Joomladay 2008 Madrid - desarrollo de extensiones

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();?>

Page 19: Joomladay 2008 Madrid - desarrollo de extensiones

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.

Page 20: Joomladay 2008 Madrid - desarrollo de extensiones

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

Page 21: Joomladay 2008 Madrid - desarrollo de extensiones

<?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

Page 22: Joomladay 2008 Madrid - desarrollo de extensiones

com_prueba/views/prueba/tmpl/default.php

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

Page 23: Joomladay 2008 Madrid - desarrollo de extensiones

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”;    }}?>

Page 24: Joomladay 2008 Madrid - desarrollo de extensiones

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

Page 25: Joomladay 2008 Madrid - desarrollo de extensiones

Investiga por tu cuenta!!

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

Page 26: Joomladay 2008 Madrid - desarrollo de extensiones

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.

Page 27: Joomladay 2008 Madrid - desarrollo de extensiones

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.

Page 28: Joomladay 2008 Madrid - desarrollo de extensiones

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

Page 29: Joomladay 2008 Madrid - desarrollo de extensiones

Desarrollo de un plugin

Objetivo del plugin:

Mostrar un mensaje antes del cada artículo

Page 30: Joomladay 2008 Madrid - desarrollo de extensiones

Estructura del plugin

Page 31: Joomladay 2008 Madrid - desarrollo de extensiones

Fichero XML del plugin

Page 32: Joomladay 2008 Madrid - desarrollo de extensiones

<?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>[email protected]</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>

Page 33: Joomladay 2008 Madrid - desarrollo de extensiones

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;    }}?>

Page 34: Joomladay 2008 Madrid - desarrollo de extensiones

Resultado final

Page 35: Joomladay 2008 Madrid - desarrollo de extensiones

Fin de la presentación