SlideShare a Scribd company logo
1 of 104
Download to read offline
Desenvolvemento en Joomla! 1.5 Tomás Vilariño Fidalgo II Xornadas de Programación Web en Software Libre Ourense, 24 de Xuño de 2008
Contidos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Introdución
Introdución ,[object Object],[object Object],[object Object],[object Object]
Introdución ,[object Object],[object Object],[object Object]
Introdución ,[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],Introdución
Instalación
Instalación ,[object Object],[object Object],[object Object],[object Object],[object Object],http://joomlacode.org/gf/project/joomla/frs/?action=FrsReleaseBrowse&frs_package_id=3587   ,[object Object]
Instalación ,[object Object],[object Object],[object Object]
Instalación ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Instalación ,[object Object]
Instalación ,[object Object]
Instalación ,[object Object]
Instalación ,[object Object]
Instalación ,[object Object]
Instalación ,[object Object]
Instalación ,[object Object],[object Object]
Arquitectura
[object Object],Arquitectura
[object Object],Arquitectura
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],http://localhost/joomla/administrator/index.php?option= com_conten t&task= add Arquitectura
 
Arquitectura ,[object Object],[object Object],[object Object],[object Object]
Arquitectura
[object Object],[object Object],Arquitectura
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Arquitectura Onde atopar extensións para Joomla! ?
Arquitectura Joomla! está deseñado a partires dun framework  (agora todo son frameworks: CakePHP, Django, Ruby on Rails, FLOW3, ...  ;-)
Languages
Languages ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
No xestor de idiomas establécese o idioma por defecto.  Para ter un sitio con soporte multi idioma hai que botar man da extensión JoomFish:  http://www.joomfish.net/   Languages
Na configuración global habilítase a depuración da lingua Languages
Na configuración global habilitando o modo de depuración obtemos información dos ficheiros de idioma cargados, cadeas sen tradución, consultas realizadas a base de datos, ... Languages
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Languages
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Xerar o ficheiro PO para utilizar ferramentas de tradución de software: poEdit, Kbabel, gTranslator, ... Despois de traducir o ficheiro gl-ES.po convertilo a formato INI Languages
PoEdit facilita a edición de ficheiros PO Languages
Templates
[object Object],[object Object],[object Object],[object Object],Templates
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Templates
[object Object],[object Object],[object Object],Templates
 
[object Object],[object Object],Templates
[object Object],Templates
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Templates
<? xml   version = &quot;1.0&quot;   encoding = &quot;utf-8&quot; ?> <install  version = &quot;1.5&quot;   type = &quot;template&quot; > <name> Template Fortune </name> <version> 1.0 </version> <creationDate> 09/04/07 </creationDate> <authorEmail> [email_address] </authorEmail> <authorUrl> http://vifito.es </authorUrl> <license> GNU/GPL </license> <description> Template de exemplo </description> <files> <filename> index.php </filename> <filename> templateDetails.xml </filename> <filename> template.png </filename> <filename> template_thumbnail.png </filename> <filename> media/3.css </filename> ... <filename> media/xhtml10.gif </filename> </files> <positions> <position> left </position> <position> right </position> <position> top </position> <position> fortune </position> </positions> <params> </params> </install> Templates templateDetails.xml
[object Object],[object Object],Templates
[object Object],[object Object],[object Object],[object Object],[object Object],Templates
Modules
Modules ,[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],Modules
Estrutura do módulo “mod_fortune” Modules
Modules -  mod_fortune.php : ficheiro php co mesmo nome co módulo, tomará o control do módulo cando sexa chamado  -  helper.php : clase helper, serve para separar a lóxica da presentación. -  directorio / tmpl/ : aquí gardaremos as plantillas que usaremos para a presentación -Por defecto, úsase o template  default.php -  mod_fortune.xml : ficheiro xml necesario para xerar un instalable e onde especificaremos os parámetros do módulo.
Código do  punto de entrada  mod_fortune.php Modules <?php // Non permitir o acceso directo defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); require_once(  dirname ( __FILE__ ). DS . 'helper.php'  ); $mensaxe  =  modFortuneHelper :: getMensaxe (  $params  ); require(  JModuleHelper :: getLayoutPath ( 'mod_fortune' ,  'default' ) ); mod_fortune/mod_fortune.php
Modules <?php // Non permitir o acceso directo defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); class  modFortuneHelper  {     function  getMensaxe ( $params ) {          $linhas  = array();          $mensaxe  =  exec ( '/usr/games/fortune' ,  $linhas );                          return(  htmlentities ( implode ( '' ,  $linhas )) );      } }   Helper.php é o ficheiro que contén a lóxica do módulo. A clase  helper  debe chamarse co nome do módulo sen “_” seguido de helper  (modFortuneHelper) : mod_fortune/helper.php
Modules <?php // Non permitir o acceso directo defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); echo  $mensaxe ; ?>   mod_fortune/tmpl/default.php
<? xml   version = &quot;1.0&quot; ?> <install  type = &quot;module&quot;   version = &quot;1.5.0&quot; > <name> Fortune </name> <author> vifito </author> <version> 1.0 </version> <creationDate> 18-06-2008 </creationDate> <description> Módulo que amosa unha mensaxe fortune aleatoria. </description> <authorEmail> [email_address] </authorEmail> <files> <filename  module = &quot;mod_fortune&quot; > mod_fortune.php </filename> <filename> helper.php </filename> <filename> mod_fortune.xml </filename> <filename> tmpl/default.php </filename> </files> </install> Ficheiro XML utilizado polo instalador de Joomla! Modules
Resultado: Modules
Plugins
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Plugins
Plugins ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],Plugins
[object Object],[object Object],Plugins
<? xml   version = &quot;1.0&quot;   encoding = &quot;utf-8&quot; ?> <install  version = &quot;1.5&quot;   type = &quot;plugin&quot;   group = &quot;content&quot; >          <name> Fortune Content </name>          <author> vifito </author>          <creationDate> Xuño 2008 </creationDate>          <license> http://www.gnu.org/licenses/gpl-2.0.html </license>          <authorEmail> [email_address] </authorEmail>          <authorUrl> vifito.es </authorUrl>          <version> 1.0 </version>          <description> Insertar fortune antes do contido </description>          <files>                  <filename  plugin = &quot;fortune&quot; > fortune.php </filename>          </files>          <params/> </install> Plugins plugins/content/fortune.xml
Plugins <?php defined (  '_JEXEC'  ) or die(  'Acceso Restrinxido'  ); jimport (  'joomla.plugin.plugin'  ); // Convención : Nome da clase (plg + tipo plugin + nome do plugin) class  plgContentFortune  extends  JPlugin  {     function  plgContentFortune ( & $subject  ) {          parent :: __construct (  $subject  );     }          function  onBeforeDisplayContent (& $article , & $params ,  $limitstart = 0 ) {          $linhas  = array();          $mensaxe  =  exec ( '/usr/games/fortune' ,  $linhas );                          return(  htmlentities ( implode ( ' ' ,  $linhas )) );     } } plugins/content/fortune.php
[object Object],Plugins
Components
[object Object],[object Object],[object Object],[object Object],Component
[object Object],[object Object],[object Object],[object Object],[object Object],Component
 
Component ,[object Object]
[object Object],[object Object],[object Object],Component
[object Object],[object Object],[object Object],[object Object],Component ,[object Object]
[object Object],[object Object],[object Object],[object Object],Component
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Component
Component Punto de Entrada <?php // Non permitir o acceso directo defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); // Controlador base require_once(  JPATH_COMPONENT . DS . 'controller.php'  ); // Procurar o controlador si se pide na petición if(  $controller  =  JRequest :: getWord ( 'controller' ) ){      $path  =  JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ;     if ( file_exists ( $path )) {         require_once  $path ;     } else {          $controller  =  '' ;     }  } // Instanciar o controlador $classname  =  'FortuneAjaxController' . $controller ; $controller  = new  $classname (); // Executar a tarefa que vén da petición $controller -> execute (  JRequest :: getVar ( 'task' ) ); // Redirixir $controller -> redirect (); com_fortuneajax/fortuneajax.php
[object Object],[object Object],[object Object],[object Object],Component
Component Controlador <?php /**  * @package vifito.joomla  * @subpackage component  * @link http://vifito.es/   * @license GNU/GPL    */ defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); jimport ( 'joomla.application.component.controller' ); class  FortuneAjaxController  extends  JController  {     function  display () {          parent :: display ();     }  }  com_fortuneajax/controller.php
Component Vista <?php defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); jimport ( 'joomla.application.component.view' ); class  FortuneajaxViewFortuneajax  extends  JView  {     function  display ( $tpl = null ) {          $model  =&  $this -> getModel ( 'Fortuneajax' );          $mensaxe =  $model -> getFortune ();                  $this -> assignRef (  'mensaxe' ,  $mensaxe  );                   parent :: display ( $tpl );     }  } com_fortuneajax/views/fortuneajax/view.html.php
Component Template <?php // Non permitir o acceso directo defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); echo  $mensaxe ; ?>   com_fortuneajax/views/fortuneajax/tmpl/view.html.php
Component Modelo <?php defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); jimport ( 'joomla.application.component.model' ); class  FortuneajaxModelFortuneajax  extends  JModel  {     function  getFortune () {          $linhas  = array();          $mensaxe  =  exec ( '/usr/games/fortune' ,  $linhas );                           $str  =  htmlentities ( implode ( ' ' ,  $linhas ));         return(  $str  );     } }
Component <? 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> Fortune Ajax </name> <creationDate> Xuño 2008 </creationDate> <author> vifito </author> <authorEmail> [email_address] </authorEmail> <authorUrl> http://vifito.es </authorUrl> <copyright> Copyleft </copyright> <license> GNU/GPL </license> <version> 0.1 </version> <description> Componente Fortune Ajax </description> <files> <filename> fortuneajax.xml </filename> <filename> fortuneajax.php </filename> <filename> controller.php </filename> <filename> models/fortuneajax.php </filename> <filename> views/fortuneajax/view.html.php </filename> <filename> views/fortuneajax/view.raw.php </filename> <filename> views/fortuneajax/tmpl/default.php </filename> </files> <administration /> <install /> <unistall /> </install>
Component Resultado:
Component ,[object Object],[object Object]
[object Object]
[object Object],[object Object],Component
API Base de datos (core) ,[object Object],[object Object],[object Object],[object Object],[object Object]
API Base de datos (core) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
API Base de datos (core) ,[object Object],// Recuperar instancia da base de datos $db  =&  JFactory :: getDBO (); // Consulta $query  =  'SELECT * FROM #__fortune_frases' ; // Recoller o resultado da consulta $result  =  $db -> setQuery (  $query  ); ,[object Object]
API Base de datos (core) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
API Base de datos (JTable) ,[object Object]
[object Object],class  TableFortuneFrases  extends  JTable  {     var  $id  =  null ;     var  $content  =  null ;     var  $published  =  null ;     var  $hits  =  0 ;     var  $checking_out  =  0 ;     var  $checking_out_time  =  null ;     var  $ordering  =  null ;     var  $params  =  null ;     function  __construct  ( & $db  ){        parent :: __construct ( '#__fortune_frases' ,  'id' ,  $db );     } } API Base de datos (JTable)
[object Object],//  Obter unha instancia de JTable JTable :: addIncludePath ( JPATH_COMPONENT_ADMINISTRATOR . DS . 'tables' ); $table  =  JTable :: getInstance ( 'FortuneFrases' ,  'Table' ); // Create $table -> reset ();  // Vaciar buffer evita problemas $table -> set ( 'content' ,  &quot;Lorem ipsum dolor sit amet&quot; ); $table -> set ( 'ordering' ,  $table -> getNextOrder ()); if ( $table -> check ()) {  // Método check para comprobar o buffer      if (! $table -> store ()) {         die(  $table -> getError () );     } } else {          die(  $table -> getError () ); } API Base de datos (JTable)
// Read if (! $table -> load ( $id )) {     die(  $table -> getError () ); } // Update $table -> reset ();  // Vaciar buffer evita problemas $table -> set ( 'id' ,  $id ); $table -> set ( 'content' ,  JRequest :: getString ( 'content' )); if ( $table -> check ()) {      // ... } // Delete if (! $table -> delete ( $id )) {     die(  $table -> getError () ); } API Base de datos (JTable)
[object Object],// Published, publicar (=1) ou despublicar (=0) contidos  $table -> publish ( $array_ids ,  1 ,  $user -> get ( 'id' )); // Aumentar un máis as visitas do contido $table -> hit (); // Comprobar si esta checked out $table -> isCheckedOut (  $user -> get ( 'id' ) ); // Bloquea o rexistro para o usuario $table -> checkout (  $user -> get ( 'id' ) ); // Desbloquea o rexistro  $table -> checkin (); // Reordear os contidos $table -> reorder (); API Base de datos (JTable)
[object Object],// Manexo dos parámetros (clase JParameter) $params  = new  JParameter (  $table -> params  ); $parametro  =  $params -> get ( 'nome_parametro' ); $params -> set ( 'nome_parametro' ,  $valor ); $table -> params  =  $params -> toString (); API Base de datos (JTable)
Integración de Joomla! con outros frameworks
[object Object],[object Object],[object Object],[object Object],[object Object],Joomla! e outros frameworks
Joomla! e outros frameworks ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Joomla! e outros frameworks ,[object Object]
Joomla! e outros frameworks ,[object Object]
Joomla! e outros frameworks ,[object Object]
Referencias e conclusións
Referencia e conclusións ,[object Object],[object Object],[object Object],[object Object]
Dúbidas?

More Related Content

Viewers also liked

Upgrade oracle people soft 9.2 a quoi faut-il s’attendre quelle est la mei...
Upgrade oracle people soft 9.2   a quoi faut-il s’attendre  quelle est la mei...Upgrade oracle people soft 9.2   a quoi faut-il s’attendre  quelle est la mei...
Upgrade oracle people soft 9.2 a quoi faut-il s’attendre quelle est la mei...Business At Work
 
lesson template..
lesson template..lesson template..
lesson template..pgbhavan
 
Master call tracking web-to-call et qualification en temps réel de leads télé...
Master call tracking web-to-call et qualification en temps réel de leads télé...Master call tracking web-to-call et qualification en temps réel de leads télé...
Master call tracking web-to-call et qualification en temps réel de leads télé...Allo-Media
 
In Vivo le leadership à visage humain
In Vivo le leadership à visage humainIn Vivo le leadership à visage humain
In Vivo le leadership à visage humainpatatra68
 
Webs Dinámicas, web nos centros educativos baseadas en Software Libre
Webs Dinámicas, web nos centros educativos baseadas en Software LibreWebs Dinámicas, web nos centros educativos baseadas en Software Libre
Webs Dinámicas, web nos centros educativos baseadas en Software Libreousli07
 
El gusto de investigar 2011 12
El gusto de investigar 2011 12El gusto de investigar 2011 12
El gusto de investigar 2011 12smestref
 
La verdadera histiria de zidane
La verdadera histiria de zidaneLa verdadera histiria de zidane
La verdadera histiria de zidanejosorio
 
Urlaub in Dubai während des Ramadan
Urlaub in Dubai während des RamadanUrlaub in Dubai während des Ramadan
Urlaub in Dubai während des RamadanJT Touristik
 
BusinessUp - Taller de Ecosistema y Networking
BusinessUp - Taller de Ecosistema y NetworkingBusinessUp - Taller de Ecosistema y Networking
BusinessUp - Taller de Ecosistema y NetworkingEduardo Reyes
 
Dia internacional dona noticiashuanglong wu 吴双龙
Dia internacional dona noticiashuanglong wu 吴双龙Dia internacional dona noticiashuanglong wu 吴双龙
Dia internacional dona noticiashuanglong wu 吴双龙Josep Gregori
 

Viewers also liked (18)

Restas 2
Restas 2Restas 2
Restas 2
 
Upgrade oracle people soft 9.2 a quoi faut-il s’attendre quelle est la mei...
Upgrade oracle people soft 9.2   a quoi faut-il s’attendre  quelle est la mei...Upgrade oracle people soft 9.2   a quoi faut-il s’attendre  quelle est la mei...
Upgrade oracle people soft 9.2 a quoi faut-il s’attendre quelle est la mei...
 
Les cellules
Les cellulesLes cellules
Les cellules
 
lesson template..
lesson template..lesson template..
lesson template..
 
Master call tracking web-to-call et qualification en temps réel de leads télé...
Master call tracking web-to-call et qualification en temps réel de leads télé...Master call tracking web-to-call et qualification en temps réel de leads télé...
Master call tracking web-to-call et qualification en temps réel de leads télé...
 
El rol de l'activitat fisica i esportiva en els programes tractament
El rol de l'activitat fisica i esportiva en els programes tractamentEl rol de l'activitat fisica i esportiva en els programes tractament
El rol de l'activitat fisica i esportiva en els programes tractament
 
In Vivo le leadership à visage humain
In Vivo le leadership à visage humainIn Vivo le leadership à visage humain
In Vivo le leadership à visage humain
 
20121015112020754.Cert.2
20121015112020754.Cert.220121015112020754.Cert.2
20121015112020754.Cert.2
 
Reflexió criminològica. Maria del Puerto Solar
Reflexió criminològica. Maria del Puerto SolarReflexió criminològica. Maria del Puerto Solar
Reflexió criminològica. Maria del Puerto Solar
 
Webs Dinámicas, web nos centros educativos baseadas en Software Libre
Webs Dinámicas, web nos centros educativos baseadas en Software LibreWebs Dinámicas, web nos centros educativos baseadas en Software Libre
Webs Dinámicas, web nos centros educativos baseadas en Software Libre
 
IPTB con Bambuser y Ustream
IPTB con Bambuser y UstreamIPTB con Bambuser y Ustream
IPTB con Bambuser y Ustream
 
150709 - FFBB Infos 051
150709 - FFBB Infos 051150709 - FFBB Infos 051
150709 - FFBB Infos 051
 
El gusto de investigar 2011 12
El gusto de investigar 2011 12El gusto de investigar 2011 12
El gusto de investigar 2011 12
 
La verdadera histiria de zidane
La verdadera histiria de zidaneLa verdadera histiria de zidane
La verdadera histiria de zidane
 
140528 - FFBB Infos 024
140528 - FFBB Infos 024140528 - FFBB Infos 024
140528 - FFBB Infos 024
 
Urlaub in Dubai während des Ramadan
Urlaub in Dubai während des RamadanUrlaub in Dubai während des Ramadan
Urlaub in Dubai während des Ramadan
 
BusinessUp - Taller de Ecosistema y Networking
BusinessUp - Taller de Ecosistema y NetworkingBusinessUp - Taller de Ecosistema y Networking
BusinessUp - Taller de Ecosistema y Networking
 
Dia internacional dona noticiashuanglong wu 吴双龙
Dia internacional dona noticiashuanglong wu 吴双龙Dia internacional dona noticiashuanglong wu 吴双龙
Dia internacional dona noticiashuanglong wu 吴双龙
 

Similar to Dev con Joomla componentes modulos plugins

Mutimedia opensource parte_ii
Mutimedia opensource parte_iiMutimedia opensource parte_ii
Mutimedia opensource parte_iixose anton Vila
 
Como facer PHP fodidamente rápido
Como facer PHP fodidamente rápidoComo facer PHP fodidamente rápido
Como facer PHP fodidamente rápidoFran Diéguez
 
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...Juan Marcos Filgueira
 
Como facer apps fodidamente rápidas: con PHP
 Como facer apps fodidamente rápidas: con PHP Como facer apps fodidamente rápidas: con PHP
Como facer apps fodidamente rápidas: con PHPFran Diéguez
 
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...Juan Marcos Filgueira
 
Elaboracion de recursos educativos en formato web
Elaboracion de recursos educativos en formato webElaboracion de recursos educativos en formato web
Elaboracion de recursos educativos en formato webJuan Marcos Filgueira
 
Introdución a Linux: Primeiros pasos
Introdución a Linux: Primeiros pasosIntrodución a Linux: Primeiros pasos
Introdución a Linux: Primeiros pasosJuan Marcos Filgueira
 
Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015Alberto Permuy Leal
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativosrukia2111
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativosguest2716a2
 
ProgramacióN Avanzada
ProgramacióN AvanzadaProgramacióN Avanzada
ProgramacióN Avanzadacarmenguede
 

Similar to Dev con Joomla componentes modulos plugins (20)

Sistemas CMS libres - Joomla! (GL)
Sistemas CMS libres - Joomla! (GL)Sistemas CMS libres - Joomla! (GL)
Sistemas CMS libres - Joomla! (GL)
 
Ponencia Drupal
Ponencia DrupalPonencia Drupal
Ponencia Drupal
 
Drupal2
Drupal2Drupal2
Drupal2
 
Web 2.0 en galego (pdf)
Web 2.0 en galego (pdf)Web 2.0 en galego (pdf)
Web 2.0 en galego (pdf)
 
131125 grupos traballo_e-groupware
131125 grupos traballo_e-groupware131125 grupos traballo_e-groupware
131125 grupos traballo_e-groupware
 
Mutimedia opensource parte_ii
Mutimedia opensource parte_iiMutimedia opensource parte_ii
Mutimedia opensource parte_ii
 
Tema1
Tema1Tema1
Tema1
 
Moodle (Nivel III)
Moodle (Nivel III) Moodle (Nivel III)
Moodle (Nivel III)
 
Como facer PHP fodidamente rápido
Como facer PHP fodidamente rápidoComo facer PHP fodidamente rápido
Como facer PHP fodidamente rápido
 
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
 
Como facer apps fodidamente rápidas: con PHP
 Como facer apps fodidamente rápidas: con PHP Como facer apps fodidamente rápidas: con PHP
Como facer apps fodidamente rápidas: con PHP
 
Drupal (Nivel I)
Drupal (Nivel I)Drupal (Nivel I)
Drupal (Nivel I)
 
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
 
Elaboracion de recursos educativos en formato web
Elaboracion de recursos educativos en formato webElaboracion de recursos educativos en formato web
Elaboracion de recursos educativos en formato web
 
Introdución a Linux: Primeiros pasos
Introdución a Linux: Primeiros pasosIntrodución a Linux: Primeiros pasos
Introdución a Linux: Primeiros pasos
 
Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
ProgramacióN Avanzada
ProgramacióN AvanzadaProgramacióN Avanzada
ProgramacióN Avanzada
 
Liñas de tempo
Liñas de tempoLiñas de tempo
Liñas de tempo
 

More from ousli07

Comunidade Blogaliza
Comunidade BlogalizaComunidade Blogaliza
Comunidade Blogalizaousli07
 
Perspectivas de la realidad desde los medios de comunicacion frente los medio...
Perspectivas de la realidad desde los medios de comunicacion frente los medio...Perspectivas de la realidad desde los medios de comunicacion frente los medio...
Perspectivas de la realidad desde los medios de comunicacion frente los medio...ousli07
 
Directrices migratorias
Directrices migratoriasDirectrices migratorias
Directrices migratoriasousli07
 
Aplicación docente del software libre
Aplicación docente del software libreAplicación docente del software libre
Aplicación docente del software libreousli07
 
O software libre para a xestión da rede educativa máis grande do mundo
O software libre para a xestión da rede educativa máis grande do mundoO software libre para a xestión da rede educativa máis grande do mundo
O software libre para a xestión da rede educativa máis grande do mundoousli07
 
Iniciativa EducaMadrid - MadridLinux.
Iniciativa EducaMadrid - MadridLinux.Iniciativa EducaMadrid - MadridLinux.
Iniciativa EducaMadrid - MadridLinux.ousli07
 
Software Libre e terminais lixeiros en aulas: TCOS
Software Libre e terminais lixeiros en aulas: TCOSSoftware Libre e terminais lixeiros en aulas: TCOS
Software Libre e terminais lixeiros en aulas: TCOSousli07
 
Impulso al Software Libre desde la Junta de Andalucia
Impulso al Software Libre desde la Junta de AndaluciaImpulso al Software Libre desde la Junta de Andalucia
Impulso al Software Libre desde la Junta de Andaluciaousli07
 
Formando ao futuro profesional en Software Libre
Formando ao futuro profesional en Software LibreFormando ao futuro profesional en Software Libre
Formando ao futuro profesional en Software Libreousli07
 
Forja Universitaria de RedIRIS
Forja Universitaria de RedIRISForja Universitaria de RedIRIS
Forja Universitaria de RedIRISousli07
 
A Galipedia, libre e colaborativa, tamén para a aprendizaxe e o ensino
 A Galipedia, libre e colaborativa, tamén para a aprendizaxe e o ensino A Galipedia, libre e colaborativa, tamén para a aprendizaxe e o ensino
A Galipedia, libre e colaborativa, tamén para a aprendizaxe e o ensinoousli07
 
Software Libre e accesibilidade ás novas tecnoloxías, posibilitando a ensinan...
Software Libre e accesibilidade ás novas tecnoloxías, posibilitando a ensinan...Software Libre e accesibilidade ás novas tecnoloxías, posibilitando a ensinan...
Software Libre e accesibilidade ás novas tecnoloxías, posibilitando a ensinan...ousli07
 
Aula Cesga, un campus virtual basado en Software Libre
Aula Cesga, un campus virtual basado en Software LibreAula Cesga, un campus virtual basado en Software Libre
Aula Cesga, un campus virtual basado en Software Libreousli07
 
Presentacion Rede DSI
Presentacion Rede DSIPresentacion Rede DSI
Presentacion Rede DSIousli07
 
Docencia Redes con Open Source
Docencia Redes con Open SourceDocencia Redes con Open Source
Docencia Redes con Open Sourceousli07
 
Sistema y soporte informático en un centro educativo basado en software libre
Sistema y soporte informático en un centro educativo basado en software libreSistema y soporte informático en un centro educativo basado en software libre
Sistema y soporte informático en un centro educativo basado en software libreousli07
 
Acercamiento al Software Libre
Acercamiento al Software LibreAcercamiento al Software Libre
Acercamiento al Software Libreousli07
 
Instalación e configuración de lamp
Instalación e configuración de lampInstalación e configuración de lamp
Instalación e configuración de lampousli07
 
Achegando o mundo de GNU/Linux
Achegando o mundo de GNU/LinuxAchegando o mundo de GNU/Linux
Achegando o mundo de GNU/Linuxousli07
 

More from ousli07 (20)

Comunidade Blogaliza
Comunidade BlogalizaComunidade Blogaliza
Comunidade Blogaliza
 
Perspectivas de la realidad desde los medios de comunicacion frente los medio...
Perspectivas de la realidad desde los medios de comunicacion frente los medio...Perspectivas de la realidad desde los medios de comunicacion frente los medio...
Perspectivas de la realidad desde los medios de comunicacion frente los medio...
 
Directrices migratorias
Directrices migratoriasDirectrices migratorias
Directrices migratorias
 
Aplicación docente del software libre
Aplicación docente del software libreAplicación docente del software libre
Aplicación docente del software libre
 
O software libre para a xestión da rede educativa máis grande do mundo
O software libre para a xestión da rede educativa máis grande do mundoO software libre para a xestión da rede educativa máis grande do mundo
O software libre para a xestión da rede educativa máis grande do mundo
 
Iniciativa EducaMadrid - MadridLinux.
Iniciativa EducaMadrid - MadridLinux.Iniciativa EducaMadrid - MadridLinux.
Iniciativa EducaMadrid - MadridLinux.
 
Magasi
MagasiMagasi
Magasi
 
Software Libre e terminais lixeiros en aulas: TCOS
Software Libre e terminais lixeiros en aulas: TCOSSoftware Libre e terminais lixeiros en aulas: TCOS
Software Libre e terminais lixeiros en aulas: TCOS
 
Impulso al Software Libre desde la Junta de Andalucia
Impulso al Software Libre desde la Junta de AndaluciaImpulso al Software Libre desde la Junta de Andalucia
Impulso al Software Libre desde la Junta de Andalucia
 
Formando ao futuro profesional en Software Libre
Formando ao futuro profesional en Software LibreFormando ao futuro profesional en Software Libre
Formando ao futuro profesional en Software Libre
 
Forja Universitaria de RedIRIS
Forja Universitaria de RedIRISForja Universitaria de RedIRIS
Forja Universitaria de RedIRIS
 
A Galipedia, libre e colaborativa, tamén para a aprendizaxe e o ensino
 A Galipedia, libre e colaborativa, tamén para a aprendizaxe e o ensino A Galipedia, libre e colaborativa, tamén para a aprendizaxe e o ensino
A Galipedia, libre e colaborativa, tamén para a aprendizaxe e o ensino
 
Software Libre e accesibilidade ás novas tecnoloxías, posibilitando a ensinan...
Software Libre e accesibilidade ás novas tecnoloxías, posibilitando a ensinan...Software Libre e accesibilidade ás novas tecnoloxías, posibilitando a ensinan...
Software Libre e accesibilidade ás novas tecnoloxías, posibilitando a ensinan...
 
Aula Cesga, un campus virtual basado en Software Libre
Aula Cesga, un campus virtual basado en Software LibreAula Cesga, un campus virtual basado en Software Libre
Aula Cesga, un campus virtual basado en Software Libre
 
Presentacion Rede DSI
Presentacion Rede DSIPresentacion Rede DSI
Presentacion Rede DSI
 
Docencia Redes con Open Source
Docencia Redes con Open SourceDocencia Redes con Open Source
Docencia Redes con Open Source
 
Sistema y soporte informático en un centro educativo basado en software libre
Sistema y soporte informático en un centro educativo basado en software libreSistema y soporte informático en un centro educativo basado en software libre
Sistema y soporte informático en un centro educativo basado en software libre
 
Acercamiento al Software Libre
Acercamiento al Software LibreAcercamiento al Software Libre
Acercamiento al Software Libre
 
Instalación e configuración de lamp
Instalación e configuración de lampInstalación e configuración de lamp
Instalación e configuración de lamp
 
Achegando o mundo de GNU/Linux
Achegando o mundo de GNU/LinuxAchegando o mundo de GNU/Linux
Achegando o mundo de GNU/Linux
 

Dev con Joomla componentes modulos plugins

  • 1. Desenvolvemento en Joomla! 1.5 Tomás Vilariño Fidalgo II Xornadas de Programación Web en Software Libre Ourense, 24 de Xuño de 2008
  • 2.
  • 4.
  • 5.
  • 6.
  • 7.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 20.
  • 21.
  • 22.
  • 23.  
  • 24.
  • 26.
  • 27.
  • 28. Arquitectura Joomla! está deseñado a partires dun framework (agora todo son frameworks: CakePHP, Django, Ruby on Rails, FLOW3, ... ;-)
  • 30.
  • 31. No xestor de idiomas establécese o idioma por defecto. Para ter un sitio con soporte multi idioma hai que botar man da extensión JoomFish: http://www.joomfish.net/ Languages
  • 32. Na configuración global habilítase a depuración da lingua Languages
  • 33. Na configuración global habilitando o modo de depuración obtemos información dos ficheiros de idioma cargados, cadeas sen tradución, consultas realizadas a base de datos, ... Languages
  • 34.
  • 35.
  • 36. PoEdit facilita a edición de ficheiros PO Languages
  • 38.
  • 39.
  • 40.
  • 41.  
  • 42.
  • 43.
  • 44.
  • 45. <? xml version = &quot;1.0&quot; encoding = &quot;utf-8&quot; ?> <install version = &quot;1.5&quot; type = &quot;template&quot; > <name> Template Fortune </name> <version> 1.0 </version> <creationDate> 09/04/07 </creationDate> <authorEmail> [email_address] </authorEmail> <authorUrl> http://vifito.es </authorUrl> <license> GNU/GPL </license> <description> Template de exemplo </description> <files> <filename> index.php </filename> <filename> templateDetails.xml </filename> <filename> template.png </filename> <filename> template_thumbnail.png </filename> <filename> media/3.css </filename> ... <filename> media/xhtml10.gif </filename> </files> <positions> <position> left </position> <position> right </position> <position> top </position> <position> fortune </position> </positions> <params> </params> </install> Templates templateDetails.xml
  • 46.
  • 47.
  • 49.
  • 50.
  • 51. Estrutura do módulo “mod_fortune” Modules
  • 52. Modules - mod_fortune.php : ficheiro php co mesmo nome co módulo, tomará o control do módulo cando sexa chamado - helper.php : clase helper, serve para separar a lóxica da presentación. - directorio / tmpl/ : aquí gardaremos as plantillas que usaremos para a presentación -Por defecto, úsase o template default.php - mod_fortune.xml : ficheiro xml necesario para xerar un instalable e onde especificaremos os parámetros do módulo.
  • 53. Código do punto de entrada mod_fortune.php Modules <?php // Non permitir o acceso directo defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); require_once(  dirname ( __FILE__ ). DS . 'helper.php'  ); $mensaxe  =  modFortuneHelper :: getMensaxe (  $params  ); require(  JModuleHelper :: getLayoutPath ( 'mod_fortune' ,  'default' ) ); mod_fortune/mod_fortune.php
  • 54. Modules <?php // Non permitir o acceso directo defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); class  modFortuneHelper  {     function  getMensaxe ( $params ) {          $linhas  = array();          $mensaxe  =  exec ( '/usr/games/fortune' ,  $linhas );                          return(  htmlentities ( implode ( '' ,  $linhas )) );      } } Helper.php é o ficheiro que contén a lóxica do módulo. A clase helper debe chamarse co nome do módulo sen “_” seguido de helper (modFortuneHelper) : mod_fortune/helper.php
  • 55. Modules <?php // Non permitir o acceso directo defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); echo  $mensaxe ; ?> mod_fortune/tmpl/default.php
  • 56. <? xml version = &quot;1.0&quot; ?> <install type = &quot;module&quot; version = &quot;1.5.0&quot; > <name> Fortune </name> <author> vifito </author> <version> 1.0 </version> <creationDate> 18-06-2008 </creationDate> <description> Módulo que amosa unha mensaxe fortune aleatoria. </description> <authorEmail> [email_address] </authorEmail> <files> <filename module = &quot;mod_fortune&quot; > mod_fortune.php </filename> <filename> helper.php </filename> <filename> mod_fortune.xml </filename> <filename> tmpl/default.php </filename> </files> </install> Ficheiro XML utilizado polo instalador de Joomla! Modules
  • 59.
  • 60.
  • 61.
  • 62.
  • 63. <? xml   version = &quot;1.0&quot;   encoding = &quot;utf-8&quot; ?> <install  version = &quot;1.5&quot;   type = &quot;plugin&quot;   group = &quot;content&quot; >          <name> Fortune Content </name>          <author> vifito </author>          <creationDate> Xuño 2008 </creationDate>          <license> http://www.gnu.org/licenses/gpl-2.0.html </license>          <authorEmail> [email_address] </authorEmail>          <authorUrl> vifito.es </authorUrl>          <version> 1.0 </version>          <description> Insertar fortune antes do contido </description>          <files>                  <filename  plugin = &quot;fortune&quot; > fortune.php </filename>          </files>          <params/> </install> Plugins plugins/content/fortune.xml
  • 64. Plugins <?php defined (  '_JEXEC'  ) or die(  'Acceso Restrinxido'  ); jimport (  'joomla.plugin.plugin'  ); // Convención : Nome da clase (plg + tipo plugin + nome do plugin) class  plgContentFortune  extends  JPlugin  {     function  plgContentFortune ( & $subject  ) {          parent :: __construct (  $subject  );     }          function  onBeforeDisplayContent (& $article , & $params ,  $limitstart = 0 ) {          $linhas  = array();          $mensaxe  =  exec ( '/usr/games/fortune' ,  $linhas );                          return(  htmlentities ( implode ( ' ' ,  $linhas )) );     } } plugins/content/fortune.php
  • 65.
  • 67.
  • 68.
  • 69.  
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75. Component Punto de Entrada <?php // Non permitir o acceso directo defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); // Controlador base require_once(  JPATH_COMPONENT . DS . 'controller.php'  ); // Procurar o controlador si se pide na petición if(  $controller  =  JRequest :: getWord ( 'controller' ) ){      $path  =  JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ;     if ( file_exists ( $path )) {         require_once  $path ;     } else {          $controller  =  '' ;     }  } // Instanciar o controlador $classname  =  'FortuneAjaxController' . $controller ; $controller  = new  $classname (); // Executar a tarefa que vén da petición $controller -> execute (  JRequest :: getVar ( 'task' ) ); // Redirixir $controller -> redirect (); com_fortuneajax/fortuneajax.php
  • 76.
  • 77. Component Controlador <?php /**  * @package vifito.joomla  * @subpackage component  * @link http://vifito.es/   * @license GNU/GPL    */ defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); jimport ( 'joomla.application.component.controller' ); class  FortuneAjaxController  extends  JController  {     function  display () {          parent :: display ();     }  }  com_fortuneajax/controller.php
  • 78. Component Vista <?php defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); jimport ( 'joomla.application.component.view' ); class  FortuneajaxViewFortuneajax  extends  JView  {     function  display ( $tpl = null ) {          $model  =&  $this -> getModel ( 'Fortuneajax' );          $mensaxe =  $model -> getFortune ();                  $this -> assignRef (  'mensaxe' ,  $mensaxe  );                   parent :: display ( $tpl );     }  } com_fortuneajax/views/fortuneajax/view.html.php
  • 79. Component Template <?php // Non permitir o acceso directo defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); echo  $mensaxe ; ?> com_fortuneajax/views/fortuneajax/tmpl/view.html.php
  • 80. Component Modelo <?php defined ( '_JEXEC' ) or die( 'Acceso restrinxido' ); jimport ( 'joomla.application.component.model' ); class  FortuneajaxModelFortuneajax  extends  JModel  {     function  getFortune () {          $linhas  = array();          $mensaxe  =  exec ( '/usr/games/fortune' ,  $linhas );                           $str  =  htmlentities ( implode ( ' ' ,  $linhas ));         return(  $str  );     } }
  • 81. Component <? 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> Fortune Ajax </name> <creationDate> Xuño 2008 </creationDate> <author> vifito </author> <authorEmail> [email_address] </authorEmail> <authorUrl> http://vifito.es </authorUrl> <copyright> Copyleft </copyright> <license> GNU/GPL </license> <version> 0.1 </version> <description> Componente Fortune Ajax </description> <files> <filename> fortuneajax.xml </filename> <filename> fortuneajax.php </filename> <filename> controller.php </filename> <filename> models/fortuneajax.php </filename> <filename> views/fortuneajax/view.html.php </filename> <filename> views/fortuneajax/view.raw.php </filename> <filename> views/fortuneajax/tmpl/default.php </filename> </files> <administration /> <install /> <unistall /> </install>
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93. // Read if (! $table -> load ( $id )) {     die(  $table -> getError () ); } // Update $table -> reset ();  // Vaciar buffer evita problemas $table -> set ( 'id' ,  $id ); $table -> set ( 'content' ,  JRequest :: getString ( 'content' )); if ( $table -> check ()) {      // ... } // Delete if (! $table -> delete ( $id )) {     die(  $table -> getError () ); } API Base de datos (JTable)
  • 94.
  • 95.
  • 96. Integración de Joomla! con outros frameworks
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 103.