Your SlideShare is downloading. ×
0
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Joomladay 2008 Madrid - desarrollo de extensiones

5,830

Published on

Published in: Technology
2 Comments
1 Like
Statistics
Notes
No Downloads
Views
Total Views
5,830
On Slideshare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
220
Comments
2
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Por David Noguera Cifuentes JoomlaDay 2008, Madrid Desarrollo de extensiones con Joomla! 1.5
  • 2.
    • Introducción
    • Desarrollo de Módulos
    • Desarrollo de Componentes
    • Desarrollo de Plugins
    Índice
  • 3. Introducción
    • Joomla 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.
  • 4.
    • 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.
  • 5.
    • 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!
  • 6.
    • Los 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 .
    1. Desarrollo de módulos
  • 7. Estructura de un módulo:
  • 8. - 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.
  • 9. ¿Qué va a hacer nuestro módulo?
    • Vamos a realizar un módulo simple que muestre un mensaje por pantalla: Hola Mundo
    • Por motivos de tiempo se van a quedar muchas cosas sin explicar, como el acceso a datos, uso de parámetros, etc.
  • 10. Código del punto de entrada mod_prueba.php <?php   // no permitir acceso directo defined ( ‘_JEXEC’ ) or die ( ‘Restricted access’ );   // incluir al helper que devolverá los datos, solo una vez require_once( dirname (__FILE__).DS.‘helper.php’ );   $mensaje = modPruebaHelper::getMensaje( $params ); require( JModuleHelper::getLayoutPath( ‘mod_prueba’,‘default’) ); ?>
  • 11. Código del helper: <?php class modPruebaHelper {     function getMensaje( $params )     {                 return “Hola Mundo”;     } } ?> La clase helper ha de llamarse con el nombre del modulo sin “_” seguido de helper: Nombre del módulo sin “_” + Helper
  • 12. Código del template: default.php <?php echo $mensaje; ?>
  • 13. Fichero XML del módulo <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?> <install type=&quot;module&quot; version=&quot;1.5.0&quot;>     <name>Prueba</name>     <author>David Noguera</author>     <version>1.0</version>     <creationDate>02-04-2008</creationDate>     <description>Modulo que muestra un mensaje de Hola Mundo</description>     <authorEmail>david@nosolocodigo.com</authorEmail>     <files>     <filename module=&quot;mod_prueba&quot;>mod_prueba.php</filename>          <filename>helper.php</filename>         <filename>mod_prueba.xml</filename>          <filename>tmpl/default.php</filename>     </files> </install>
  • 14. Resultado final
  • 15. 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
  • 16.
    • ¿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.
  • 17.
    • 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.
  • 18. Convections over configuration
    • Existen dos formas de trabajar:
    • -Usando un fichero XML donde se especifica que es cada cosa.
    • -Usando convenciones.
    • Joomla! usa convenciones
  • 19.
    • ¿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.
  • 20. Convenciones del framework MVC de Joomla!
    • Objeto Controlador:
    • NombreComponente + Controller
    • Objeto Vistas:
    • nombreComponente+View+nombreVista
    • Objeto Modelo:
    • nombreComponente+Model+Nombre del modelo
  • 21.  
  • 22. Comenzamos con el desarrollo..
  • 23. 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(); ?>
  • 24. 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.
  • 25. Controlador <?php     defined ( ‘_JEXEC’ ) or die ( ‘Restricted access’ );        jimport(’joomla.application.component.controller’);       class PruebaController extends JController     {         function display()       {             parent::display();       }     }     ?>
  • 26. com_prueba/views/prueba/view.html.php <?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);       }       }     ?>
  • 27. com_prueba/views/prueba/tmpl/default.php <h1><?php echo $this->mensaje ?></h1>
  • 28. 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”;       } } ?>
  • 29. Fichero XML del componente <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?> <!DOCTYPE install SYSTEM &quot;http://dev.joomla.org/xml/1.5/component- install.dtd&quot;> <install type=&quot;component&quot; version=&quot;1.5&quot;> <name>My Extension</name> <creationDate>MonthName Year</creationDate> <author>Author's Name</author> <authorEmail>Author's Email</authorEmail> <authorUrl>Author's Website</authorUrl> <copyright>Copyright Notice</copyright> <license>Component License Agreement</license> <version>Component Version</version> <description>Component Description</description>
  • 30. <administration> <menu>My Extension</menu> <submenu> <menu task=&quot;view&quot;>Items</menu> <menu link=&quot;option=com_categories&section=com_wfaqs;&quot;>Categories</menu> </submenu> <files folder=&quot;administration&quot;> <filename>index.html</filename> <filename>admin.myextension.php</filename> <filename>install.sql</filename> <filename>install.noutf8.sql</filename> <filename>uninstall.sql</filename> <folder>models</folder> <folder>views</folder> <folder>controllers</folder> <folder>tables</folder> </files>
  • 31. <languages folder=&quot;administration&quot;> <language tag=&quot;en-GB&quot;>en-GB.com_myextension.ini</language> <language tag=&quot;de-DE&quot;>de-DE.com_myextension.ini</language> </languages> <media destination=&quot;com_myextension&quot;> <filename>logo.jpg</filename> <filename>index.html</filename> </media> </administration> <install> <sql> <file driver=&quot;mysql&quot; charset=&quot;utf8&quot;>install.sql</file> <file driver=&quot;mysql&quot; charset=&quot;&quot;>install.noutf8.sql</file> </sql> </install> <uninstall> <sql> <file driver=&quot;mysql&quot;>uninstall.sql</file> </sql> </uninstall>
  • 32. <installfile>install.myextension.php</installfile> <uninstallfile>uninstall.myextension.php</uninstallfile> <files> <filename>index.html</filename> <filename>myextension.php</filename> <folder>models</folder> <folder>views</folder> <folder>controllers</folder> <folder>tables</folder> </files> <languages> <language tag=&quot;en-GB&quot;>en-GB.com_myextension.ini</language> <language tag=&quot;de-DE&quot;>de-DE.com_myextension.ini</language> </languages> <media destination=&quot;com_myextension&quot;> <filename>logo.jpg</filename> <filename>index.html</filename> </media> </install>
  • 33. Resultado Final URL: index.php?option=com_prueba&view=prueba
  • 34. Investiga por tu cuenta!!
    • Si no sabes como hacer algo, entra en los componentes que tiene Joomla! instalados y mira su código.
  • 35. 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.
  • 36. Tipos de plugins
    • Existen varios tipos de plugins
    • Por cada tipo de plugin existe un directorio dentro del directorio plugins
    • Por 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.
  • 37. 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
  • 38. Desarrollo de un plugin
    • Objetivo del plugin:
    • Mostrar un mensaje antes del cada artículo
  • 39. Estructura del plugin
  • 40. Fichero XML del plugin
  • 41. <?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>
  • 42. Fichero holaMundo.php <?php defined ( ‘_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;     } } ?>
  • 43. Resultado final
  • 44. Fin de la presentación

×