joomladay 2008 madrid - desarrollo de extensiones
TRANSCRIPT
![Page 1: Joomladay 2008 Madrid - desarrollo de extensiones](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/1.jpg)
Por David Noguera CifuentesJoomlaDay 2008, Madrid
Desarrollo de extensiones con Joomla! 1.5
![Page 2: Joomladay 2008 Madrid - desarrollo de extensiones](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/2.jpg)
IntroducciónDesarrollo de MódulosDesarrollo de ComponentesDesarrollo de Plugins
Índice
![Page 3: Joomladay 2008 Madrid - desarrollo de extensiones](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/3.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/4.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/5.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/6.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/7.jpg)
Estructura de un módulo:
![Page 8: Joomladay 2008 Madrid - desarrollo de extensiones](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/8.jpg)
-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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/9.jpg)
¿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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/10.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/11.jpg)
¿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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/12.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/13.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/14.jpg)
¿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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/15.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/16.jpg)
![Page 17: Joomladay 2008 Madrid - desarrollo de extensiones](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/17.jpg)
Comenzamos con el desarrollo..
![Page 18: Joomladay 2008 Madrid - desarrollo de extensiones](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/18.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/19.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/20.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/21.jpg)
<?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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/22.jpg)
com_prueba/views/prueba/tmpl/default.php
<h1><?php echo $this->mensaje ?></h1>
![Page 23: Joomladay 2008 Madrid - desarrollo de extensiones](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/23.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/24.jpg)
Resultado FinalURL: index.php?option=com_prueba&view=prueba
![Page 25: Joomladay 2008 Madrid - desarrollo de extensiones](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/25.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/26.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/27.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/28.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/29.jpg)
Desarrollo de un plugin
Objetivo del plugin:
Mostrar un mensaje antes del cada artículo
![Page 30: Joomladay 2008 Madrid - desarrollo de extensiones](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/30.jpg)
Estructura del plugin
![Page 31: Joomladay 2008 Madrid - desarrollo de extensiones](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/31.jpg)
Fichero XML del plugin
![Page 32: Joomladay 2008 Madrid - desarrollo de extensiones](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/32.jpg)
<?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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/33.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/34.jpg)
Resultado final
![Page 35: Joomladay 2008 Madrid - desarrollo de extensiones](https://reader038.vdocuments.pub/reader038/viewer/2022110308/556efc5fd8b42adc368b46e8/html5/thumbnails/35.jpg)
Fin de la presentación