Joomladay 2008 Madrid - desarrollo de extensiones
-
Upload
deivit86 -
Category
Technology
-
view
5.833 -
download
0
Transcript of Joomladay 2008 Madrid - desarrollo de extensiones
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>[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>
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