ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
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 ±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô ±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô, configuraci¨®n e posta en funcionamento Arquitectura de Joomla! 1.5 Languages Templates Modules Plugins Components API Base de datos Integraci¨®n con outros frameworks Referencias e conclusi¨®ns
±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô
±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô Joomla!  ¨¦ un CMS desenvolvido en PHP baixo GNU/GPL. ? o resultado dunha bifurcaci¨®n e mellora de Mambo (Mambo 4.5.2.3). O nome de Joomla! v¨¦n da palabra suajili  jumla  que significa " todos xuntos " ou " como un todo ".  A primeira versi¨®n de Joomla! (Joomla! 1.0.0) publicouse 16 de setembro de 2005.  Actualmente est¨¢ dispo?ible a versi¨®n Joomla! 1.5.3 constru¨ªda baixo PHP 5.2
±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô Joomla ¨¦ un CMS moi flexible, en parte grazas ao f¨¢cil que resulta desenvolver  extensi¨®ns  (compo?entes, plugins, modules) . As extensi¨®ns ser¨¢n o mecanismo co que conta Joomla! 1.5 para dotarse de maiores funcionalidades e contrarrestar as s¨²as deficiencias (multi idioma, multi sitio, xesti¨®n de usuarios limitadas, ...). Isto propicia a aparici¨®n dunha gran comunidade de desenvolvedores que xera unha gran cantidade de extensi¨®ns.
±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô A tendencia de Joomla! comparada con Drupal e TYPO3 en Google Trends Joomla! 1.0 publicouse o 16 de setembro 2005
O desenvolvemento de extensi¨®ns de Joomla! evolucionou coa aparici¨®n da nova versi¨®n 1.5 Creouse un potente  framework  e potenciouse o aspecto de  POO  aproveitando as vantaxes de PHP 5. Olvid¨¦monos de PHP4: http://gophp5.org/   ±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Requisitos (recomendados): GNU/Linux Apache 2.x PHP 5.x MySQL 5.x http://joomlacode.org/gf/project/joomla/frs/?action=FrsReleaseBrowse&frs_package_id=3587   Descargar Joomla! 1.5 dende:
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Antes de comezar a instalaci¨®n ¨¦ recomendable crear a base de datos: $ mysqladmin ¨Cu db_user ¨Cp create joomla   dende li?a de comandos ou dende phpmyadmin
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô O asistente de instalaci¨®n de  Joomla componse de sete pasos: Escoller o idioma do instalador Chequeo de pre-instalaci¨®n Licenza Configuraci¨®n da base de datos Configuraci¨®n do FTP Outras configuraci¨®ns Finalizar
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Paso 1: selecci¨®n do idioma
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Paso 2: revisi¨®n previa
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Paso 3: licenza
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Paso 4: configuraci¨®n da base de datos
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Paso 5: configuraci¨®n do servidor FTP
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Paso 6: configuraci¨®n principal
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Ao finalizar a instalaci¨®n  recom¨¦ndase   obr¨ªgannos  a eliminar o directorio de instalaci¨®n para poder comezar a traballar Despois de eliminar o directorio de instalaci¨®n xa podemos traballar co Site ou Admin
Arquitectura
O site de Joomla 1.5  (Frontend/Principal/Sitio)   Arquitectura
O administrator de Joomla 1.5  (Backend/Administraci¨®n) Arquitectura
Estrutura de directorios separadas  parte de administraci¨®n  (Administrator, Backend, administraci¨®n, ...)  parte p¨²blica  (Site, Frontend, frontal, ...) Parte de administraci¨®n e p¨²blica te?en similitudes Comparten o cartafol /libraries/ O funcionamento interno da administraci¨®n ¨¦ similar ao da parte p¨²blica http://localhost/joomla/administrator/index.php?option= com_conten t&task= add Arquitectura
?
Arquitectura Joomla 1.5 esta composto de m¨®dulos, compo?entes e plugins. ( Tam¨¦n poder¨ªamos considerar aos  templates  e aos  ficheiros de idioma  extensi¨®ns de Joomla!) Os  m¨®dulo s  son pequenos anacos de contido como pode ser un men¨²,  isto ¨¦ un modulo: O  compo?ente  ¨¦ onde se mostra o contido principal en Joomla! (miniaplicaci¨®n)  ->  s¨® se executa un por petici¨®n, o que se especifica no par¨¢metro  option Os  plugin s  responden a eventos do sistema  (login de usuarios, ao mostrar contidos, cando se autentican, ... )
Arquitectura
A parte das extensi¨®ns inclu¨ªdas en Joomla! ¨¦ posible extender as funcionalidades por medio de novas extensi¨®ns As extensi¨®ns instalaranse dende o administrador de extensi¨®ns (no backend, obvio :-) Arquitectura
Component Module Plugin Language Tool : aplicaci¨®ns externas que permiten xestionar ou facilitar o traballo dun sitio Joomla! Special : extensi¨®n espec¨ªficas que requiren doutras extensi¨®ns para o seu funcionamento. http://extensions.joomla.org   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 Joomla! permite importar paquetes de idioma tendo traducida a interface do sitio ( site )  e/ou   administraci¨®n ( administrator ).  Entre as configuraci¨®ns de Joomla! ¨¦ posible activar a depuraci¨®n de cadeas de idioma  (Configuraci¨®n global | Sistema) . Paquetes de idioma galego: https://forxa.mancomun.org/projects/joomlagalego/ En castel¨¢n: http://www.todosjuntos.org/content/view/55/1/
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
Formato dun ficheiro de idioma INI (p.e.: <path_joomla>/language/gl-ES/gl-ES.com_content.ini) ACCESS LEVEL=Nivel de Acceso ADD=Agregar ALIGN=Ali?ar ALL PAGES=Todas as p¨¢xinas ALT TEXT=Texto alternativo ALREADY EXISTS=Xa existe ... API para empregar a traduci¨®n <?php echo Jtext::_('ADD'); ?> Languages
$ mv en-GB.ini en-GB.properties $  prop2po  -P en-GB.properties en-GB.pot processing 1 files... [###########################################] 100% $ cp en-GB.pot gl-ES.po $  po2prop  -t en-GB.pot gl-ES.po gl-ES.properties $ mv gl-ES.properties gl-ES.ini  http://translate.sourceforge.net/wiki/toolkit/prop2po   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
O sistema de templates da versi¨®n 1.5 de Joomla sufriu  cambios destacables  durante o proceso de desenvolvemento.  Inicialmente ¨ªase botar man do motor de plantillas  patTemplate  e por cuesti¨®ns de rendemento desbotouse a idea.  A biblioteca inda est¨¢ no cartafos /libraries/ incl¨²ese por raz¨®ns de compatibilidade.  http://trac.php-tools.net/patTemplate Templates
Novidades no motor de plantillas en J! 1.5: Accesibilidade nas plantillas por defecto Compatibilidade cara atr¨¢s, versi¨®ns 1.0.x (legacy mode). $this->countModules('user1 + user2'). Sentencias condicionais. <jdoc :include ... /> Detecci¨®n autom¨¢tica do uso do editor WYSIWYG. Parametrizaci¨®n. Soporte para m¨²ltiples follas de estilo (CSS). Overrides, sobrescriben a sa¨ªda por defecto das extensi¨®ns. http://www.joomla.org/component/option,com_jd-wp/Itemid,33/p,210/   Templates
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô de temas creados para Joomla! Descargamos un tema p.e.- ¡°Go Vista Plain¡± e instal¨¢molo empregando o xestor de extensi¨®ns do administrador de Joomla! http://www.augs-burg.de/joomla/joomla1.5-templates.php Templates
?
Dese?amos unha plantilla de Joomla! propia Partimos do seguinte dese?o: http://www.intensivstation.ch/files/en_templates/2/template-3.html Templates
Definimos as nosas posici¨®ns (positions) onde situaremos os m¨®dulos e o compo?ente (left, right, user1, ...) Templates
Empregamos <jdoc:include ... /> para definir as posici¨®ns < html  xmlns= &quot; http://www.w3.org/1999/xhtml &quot;  xml: lang = &quot;en&quot;   lang = &quot;en&quot; > < head > < jdoc :include  type = &quot;head&quot;  /> </ head > < body > < div   id = &quot;container&quot; > < jdoc :include  type = &quot;message&quot;  /> < div   id = &quot;outer&quot; > < div   id = &quot;inner&quot; > < div   id = &quot;left&quot; >< h2 > Esquerda </ h2 > < jdoc :include  type = &quot;modules&quot;   name = &quot;left&quot;  />   </ div > < div   id = &quot;content&quot; > < h2 > Contido </ h2 > < jdoc :include  type = &quot;component&quot;  /> </ div > <!-- end content --> ... 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
Constru¨ªmos un ficheiro .zip e instalamos a plantilla dende o administrador de extensi¨®ns. Resultado Templates
Referencias: Titorial sobre plantillas para a versi¨®n 1.5 http://www.joomla.org/component/option,com_jd-wp/Itemid,33/p,210/ O titorial de referencia obrigatoria (imprescindible) http://dev.joomla.org/downloads/Joomla15TemplateTutorial.zip Templates
Modules
Modules Imos desenvolver un m¨®dulo simple que amose unha frase recuperada do programa  fortune  ( http://fortune-gui.sourceforge.net/ ) Por motivos de tempo vanse a quedar moitas cousas sen explicar, como o uso de par¨¢metros, etc.
Os m¨®dulos at¨®panse situados no directorio  /modules/  dentro do directorio de instalaci¨®n de Joomla e por cada m¨®dulo hai un cartafol con nome  mod_nomeModulo  . O noso m¨®dulo vaise a chamar   fortune . o cartafol do m¨®dulo chamarase   / mod_fortune/ . Vemos a continuaci¨®n a estrutura do m¨®dulo .   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
Que son os plugins? Son extensi¨®ns que permiten modificar o comportamento do programa Que fan os plugins? Interceptan certos eventos prefijados para executar o noso c¨®digo antes ou despois do evento.  Existen varios tipos de plugins Por cada tipo de plugin existe un directorio dentro do directorio plugins Polo tanto temos o directorio  plugins/content   para os plugins de tipo content e as¨ª con todos os tipos.   Plugins
Plugins authentication : autenticaci¨®n dos usuarios no proceso de login ( LDAP , openid, contas de google, ...) content : procesar os ¨ªtems de contidos editors : editores WYSIWYG que poden ser utilizados para a edici¨®n de contidos. editors-xtd : extensi¨®ns do editor (creaci¨®n de bot¨®ns adicionais) search : personalizaci¨®n das procuras realizadas nun sitio (inclu¨ªr nas buscas resultados de novos compo?entes) system : escoita eventos do sistema user : procesa as acci¨®ns dun usuario xmlrpc : crea respostas XML-RPC (APIs blogger, SITEMan, ...)
Implementaci¨®n do plugin Un plugin ¨¦ un obxecto que deriva da clase  JPlugin .  Esta clase ten uns m¨¦todos definidos que responden aos eventos do sistema (hooks)   Polo tanto teremos que sobrescribir o hook preciso para que reaccione a acci¨®n que desexemos.  Plugins
Obxectivo do plugin: Amosar  unha mensaxe antes do cada artigo Estrutura do plugin Fortune 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
Resultado: Plugins
Components
O compo?ente ¨¦ a mini-aplicaci¨®n que executa Joomla!  (http://.../index.php?option=com_...) Os compo?entes p¨®dense implementar empregando o patr¨®n MVC  (recomendable para aproveitar as vantaxes do framework) MVC ¨¦ un patr¨®n de arquitectura de software que separa os datos dunha aplicaci¨®n, a interfaz de usuario, e a l¨®xica de control en tres compo?entes distintos.  http://es.wikipedia.org/wiki/Modelo_Vista_Controlador   Component
Por que ¨¦ tan importante? Seguindo este patr¨®n crearemos c¨®digo m¨¢is ordenado. Ser¨¢ m¨¢is f¨¢cil entender o c¨®digo de terceiros (e o noso), xa que segue un patr¨®n co?ecido. Aumenta a produtividade. En Joomla! as clases que  implementan o patr¨®n  son: JModel ¨C JView - JController Component
?
Component Estrutura dun compo?ente  en Joomla! simplificada  (imos ver s¨® a parte do frontend con varias vistas para soportar Ajax).
O controlador:  o controlador ¨¦ o  punto de entrada  da aplicaci¨®n, mantense a escoita de todas as petici¨®ns, executa a l¨®xica da aplicaci¨®n, e amosa a vista apropiada para cada caso.  O modelo:  o modelo cont¨¦n todo o c¨®digo relacionado co  acceso a datos . ? importante que sexa un c¨®digo o m¨¢is xen¨¦rico posible e se poida reutilizar. Nunca incluiremos l¨®xica no modelo, soamente consultas ¨¢ base de datos e validaci¨®ns de entrada de datos.  A vista :  a vista cont¨¦n o c¨®digo que representar¨¢  o que vemos por pantalla , neste caso tr¨¢tase de c¨®digo html (tam¨¦n feed RSS, PDF, ...)  Component
Existen d¨²as formas de traballar: -Usando un ficheiro XML onde se especifica que ¨¦ cada cousa (Struts). -Usando convenci¨®ns (Joomla!). Paradigma de dise?o ¡°Convention over Configuration¡± (CoC) Component http://en.wikipedia.org/wiki/Convention_over_Configuration
Que son as convenci¨®ns? Son normas a seguir para crear as vistas (JView), os modelos (JModel) e os controladores (JController). Usar convenci¨®ns adoita resultar m¨¢is r¨¢pido que usar ficheiros XML. Os ficheiros XML poden crecer desorbitadamente ata o punto de facerse pouco mantenibles. Component
Obxecto  Controlador  (JController):  NomeCompo?ente + Controller Obxecto  Vistas  (JView): nomeCompo?ente + View + nomeVista Obxecto  Modelo  (JModel): nomeCompo?ente + Model + Nome do modelo 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
Compr¨®base se v¨¦n un par¨¢metro na  query string  que estableza un controlador, e se v¨¦n imp¨®rtase o ficheiro co controlador.   Instanciase o controlador.  Exec¨²tase o m¨¦todo  execute  do controlador.  Exec¨²tase o m¨¦todo  redirect  do controlador.  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 Grazas a vista ¡°raw¡± ¨¦ posible facer petici¨®ns Ajax. Agora un m¨®dulo poder¨ªa facer petici¨®ns HTTP v¨ªa Ajax. (ver m¨®dulo mod_fortuneajax) Joomla! integra a librer¨ªa javascript MooTools.  OLLO: a ¨²ltima versi¨®n de MooTools ¨¦ a 1.12 e en Joomla! incl¨²ese a 1.11
mod_fortuneajax fai petici¨®ns Ajax ao componente com_fortuneajax, pedindo a vista ¡°raw¡± para que devolva s¨® o contido e non todo o layout do sistema.
Quedar¨ªa pendente toda a parte da administraci¨®n: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/ id,components:hello_world_mvc4/ Component
API Base de datos (core) Para aproveitar as funcionalidades do framework de Joomla! usar  convenci¨®ns : Nome das t¨¢boas, recomendable en min¨²sculas e coa seguinte sintaxe: #__ <nome_componente> _ <nome_t¨¢boa>  p.e. jos_fortune_frases.  ( #__  prefixo definido na instalaci¨®n, por defecto jos_) Nome da clave primaria ¡° id ¡±, (integer auto_increment not null) Nomes dos campos en min¨²scula, palabras separadas por ¡°_¡±.  p.e. email_secundario
API Base de datos (core) Nomes de campos com¨²ns con funcionalidades extra: published : 0 -> no publicado  1 -> publicado hits : enteiro que garda os accesos dende o frontend dos visitantes (estat¨ªsticas) Bloqueo da edici¨®n:  checking_out , garda o id de usuario (0 por defecto) checking_out_time  , o datetime ordering : garda a orde na que se amosan parameters : garda par¨¢metros en formato INI (variable=valor).  Clase de utilidade  JParameter
API Base de datos (core) C¨®digo b¨¢sico para acceso a base de datos: //?Recuperar?instancia?da?base?de?datos $db? =&? JFactory :: getDBO (); //?Consulta $query? =? 'SELECT?*?FROM?#__fortune_frases' ; //?Recoller?o?resultado?da?consulta $result? =? $db -> setQuery (? $query  ); Estase traballando para emular as funci¨®ns do API de ADOdb.  OLLO!  non hai intenci¨®n de integrar a librer¨ªa ADOdb
API Base de datos (core) M¨¦todos API:  $db =& JFactory::getDBO(); $db->loadResult() $db->loadResultArray([$key]) $db->loadAssoc() $db->loadAssocList([$key]) $db->loadObject() $db->loadObjectList([$key]) $db->loadRow() $db->loadRowList([$key]) ...
API Base de datos (JTable) JTable proporciona un conxunto de funcionalides (CRUD) abstraendo cuesti¨®ns internas coma SQL, ...
Clase ¡°TableFortuneFrases¡± herda de JTable  funcionalidades ORM. As clases JTable g¨¢rdanse no cartafol /tables/ do compo?ente: JPATH_COMPONENT_ADMINISTRATOR.DS.'tables'.DS.'fortunefrases.php' 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)
CRUD ( C reate,  R ead,  U pdate e  D elete) //? 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)
M¨¦todos de JTable para aproveitar as funcionalidades dos campos com¨²ns: //?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)
Manexo do campo params, ¨²til para personalizar propiedades dun contido. Os par¨¢metros def¨ªnense no ficheiro XML que cont¨¦n os detalles da extensi¨®n: //?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
Joomla! p¨®dese integrar con outros proxectos coma phpBB por medio de compo?entes, plugins, m¨®dulos, ... Por medio dunha interface XML-RPC gar¨¢ntese a  interoperabilidade . Tam¨¦n se pode integrar dentro de Joomla! proxectos desenvolvidos con frameworks web: p.e.- CakePHP e Symfony Joomla! + CakePHP = Jake http://cakeforge.org/frs/?group_id=76&release_id=314   Joomla! + Symfony = sfJoomla15Bridge, inspirado en Jake http://trac.symfony-project.com/wiki/sfJoomla15BridgePlugin   Joomla! e outros frameworks
Joomla! e outros frameworks Instalamos unha aplicaci¨®n CakePHP existente (Cheesecake Photoblog) en Joomla!. Pasos: 1) Instalar o componente Jake: http://cakeforge.org/frs/download.php/354/jake_1.0.3.38b-joomla_1.5.zip   2) Instalar Cheesecake: http://cakeforge.org/frs/download.php/510/cheesecake_cake.tar.gz   3) Configuramos a aplicaci¨®n en Joomla!  com_jake/jake.ini [settings] default = &quot;cheesecake&quot; [cheesecake] path = &quot;/var/www/cheesecake/app/webroot&quot; url = &quot;/cheesecake&quot; 4) Obter URL de Jake a aplicaci¨®n
Joomla! e outros frameworks ±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô de Jake / Jake no men¨² de compo?entes
Joomla! e outros frameworks Resultado da integraci¨®n de Cheesecake en Joomla!
Joomla! e outros frameworks SITEman,  aplicaci¨®n de escritorio  implementada en Java que permite  aos usuarios administrar un sitio  Joomla! 1.5 dende un ambiente de escritorio.
Referencias e conclusi¨®ns
Referencia e conclusi¨®ns Gracias a David Noguera Cifuentes Parte desta presentaci¨®n inspirada no seu material  http://www.nosolocodigo.com/tag/joomla   P¨¢xina oficial de Joomla! http://joomla.org   Directorio de extensi¨®ns de Joomla! http://extensions.joomla.org   Traduci¨®n Joomla! ao galego https://forxa.mancomun.org/projects/joomlagalego/
¶Ù¨²²ú¾±»å²¹²õ?

More Related Content

Viewers also liked (18)

Restas 2
Restas 2Restas 2
Restas 2
Luis Guti¨¦rrez
?
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
?
Les cellulesLes cellules
Les cellules
Rana Habchy
?
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¨¦...
Allo-Media
?
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
Departament de Just¨ªcia. Generalitat de Catalunya.
?
In Vivo le leadership ¨¤ visage humainIn Vivo le leadership ¨¤ visage humain
In Vivo le leadership ¨¤ visage humain
patatra68
?
Reflexi¨® criminol¨°gica. Maria del Puerto SolarReflexi¨® criminol¨°gica. Maria del Puerto Solar
Reflexi¨® criminol¨°gica. Maria del Puerto Solar
Departament de Just¨ªcia. Generalitat de Catalunya.
?
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
ousli07
?
IPTB con Bambuser y UstreamIPTB con Bambuser y Ustream
IPTB con Bambuser y Ustream
Gorka J Palacio Arko
?
150709 - FFBB Infos 051150709 - FFBB Infos 051
150709 - FFBB Infos 051
ComiteBasketCalvados
?
El gusto de investigar 2011 12El gusto de investigar 2011 12
El gusto de investigar 2011 12
smestref
?
La verdadera histiria de zidaneLa verdadera histiria de zidane
La verdadera histiria de zidane
josorio
?
140528 - FFBB Infos 024140528 - FFBB Infos 024
140528 - FFBB Infos 024
ComiteBasketCalvados
?
Urlaub in Dubai w?hrend des RamadanUrlaub in Dubai w?hrend des Ramadan
Urlaub in Dubai w?hrend des Ramadan
JT Touristik
?
BusinessUp - Taller de Ecosistema y NetworkingBusinessUp - Taller de Ecosistema y Networking
BusinessUp - Taller de Ecosistema y Networking
Eduardo Reyes
?
Dia internacional dona noticiashuanglong wu ÎâË«Áú
Dia internacional dona noticiashuanglong wu ÎâË«ÁúDia internacional dona noticiashuanglong wu ÎâË«Áú
Dia internacional dona noticiashuanglong wu ÎâË«Áú
Josep Gregori
?
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
?
Les cellulesLes cellules
Les cellules
Rana Habchy
?
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¨¦...
Allo-Media
?
In Vivo le leadership ¨¤ visage humainIn Vivo le leadership ¨¤ visage humain
In Vivo le leadership ¨¤ visage humain
patatra68
?
Reflexi¨® criminol¨°gica. Maria del Puerto SolarReflexi¨® criminol¨°gica. Maria del Puerto Solar
Reflexi¨® criminol¨°gica. Maria del Puerto Solar
Departament de Just¨ªcia. Generalitat de Catalunya.
?
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
ousli07
?
IPTB con Bambuser y UstreamIPTB con Bambuser y Ustream
IPTB con Bambuser y Ustream
Gorka J Palacio Arko
?
150709 - FFBB Infos 051150709 - FFBB Infos 051
150709 - FFBB Infos 051
ComiteBasketCalvados
?
El gusto de investigar 2011 12El gusto de investigar 2011 12
El gusto de investigar 2011 12
smestref
?
La verdadera histiria de zidaneLa verdadera histiria de zidane
La verdadera histiria de zidane
josorio
?
140528 - FFBB Infos 024140528 - FFBB Infos 024
140528 - FFBB Infos 024
ComiteBasketCalvados
?
Urlaub in Dubai w?hrend des RamadanUrlaub in Dubai w?hrend des Ramadan
Urlaub in Dubai w?hrend des Ramadan
JT Touristik
?
BusinessUp - Taller de Ecosistema y NetworkingBusinessUp - Taller de Ecosistema y Networking
BusinessUp - Taller de Ecosistema y Networking
Eduardo Reyes
?
Dia internacional dona noticiashuanglong wu ÎâË«Áú
Dia internacional dona noticiashuanglong wu ÎâË«ÁúDia internacional dona noticiashuanglong wu ÎâË«Áú
Dia internacional dona noticiashuanglong wu ÎâË«Áú
Josep Gregori
?

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)
Wireless Galicia S.L.
?
Ponencia Drupal
Ponencia DrupalPonencia Drupal
Ponencia Drupal
ceip.solanas
?
Web 2.0 en galego (pdf)
Web 2.0 en galego (pdf)Web 2.0 en galego (pdf)
Web 2.0 en galego (pdf)
Luciano Fern¨¢ndez
?
Mutimedia opensource parte_ii
Mutimedia opensource parte_iiMutimedia opensource parte_ii
Mutimedia opensource parte_ii
xose anton Vila
?
Moodle (Nivel III)
Moodle (Nivel III) Moodle (Nivel III)
Moodle (Nivel III)
Juan Marcos Filgueira
?
Como facer PHP fodidamente r¨¢pido
Como facer PHP fodidamente r¨¢pidoComo facer PHP fodidamente r¨¢pido
Como facer PHP fodidamente r¨¢pido
Fran 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 PHP
Fran Di¨¦guez
?
Drupal (Nivel I)
Drupal (Nivel I)Drupal (Nivel I)
Drupal (Nivel I)
Juan Marcos Filgueira
?
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 web
Juan Marcos Filgueira
?
±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô a Linux: Primeiros pasos
±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô a Linux: Primeiros pasos±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô a Linux: Primeiros pasos
±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô a Linux: Primeiros pasos
Juan 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 2015
Alberto Permuy Leal
?
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
rukia2111
?
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
guest2716a2
?
Programaci¨®N Avanzada
Programaci¨®N AvanzadaProgramaci¨®N Avanzada
Programaci¨®N Avanzada
carmenguede
?
Li?as de tempo
Li?as de tempoLi?as de tempo
Li?as de tempo
Juan Marcos Filgueira
?
Mutimedia opensource parte_ii
Mutimedia opensource parte_iiMutimedia opensource parte_ii
Mutimedia opensource parte_ii
xose anton Vila
?
Como facer PHP fodidamente r¨¢pido
Como facer PHP fodidamente r¨¢pidoComo facer PHP fodidamente r¨¢pido
Como facer PHP fodidamente r¨¢pido
Fran 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 PHP
Fran 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 web
Juan Marcos Filgueira
?
±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô a Linux: Primeiros pasos
±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô a Linux: Primeiros pasos±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô a Linux: Primeiros pasos
±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô a Linux: Primeiros pasos
Juan 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 2015
Alberto Permuy Leal
?
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
rukia2111
?
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
guest2716a2
?
Programaci¨®N Avanzada
Programaci¨®N AvanzadaProgramaci¨®N Avanzada
Programaci¨®N Avanzada
carmenguede
?

More from ousli07 (20)

Comunidade BlogalizaComunidade Blogaliza
Comunidade Blogaliza
ousli07
?
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 migratorias
ousli07
?
Aplicaci¨®n docente del software libreAplicaci¨®n docente del software libre
Aplicaci¨®n docente del software libre
ousli07
?
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
ousli07
?
Iniciativa EducaMadrid - MadridLinux.Iniciativa EducaMadrid - MadridLinux.
Iniciativa EducaMadrid - MadridLinux.
ousli07
?
Software Libre e terminais lixeiros en aulas: TCOSSoftware Libre e terminais lixeiros en aulas: TCOS
Software Libre e terminais lixeiros en aulas: TCOS
ousli07
?
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
ousli07
?
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
ousli07
?
Forja Universitaria de RedIRISForja Universitaria de RedIRIS
Forja Universitaria de RedIRIS
ousli07
?
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
ousli07
?
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 LibreAula Cesga, un campus virtual basado en Software Libre
Aula Cesga, un campus virtual basado en Software Libre
ousli07
?
Presentacion Rede DSIPresentacion Rede DSI
Presentacion Rede DSI
ousli07
?
Docencia Redes con Open SourceDocencia Redes con Open Source
Docencia Redes con Open Source
ousli07
?
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
ousli07
?
Acercamiento al Software LibreAcercamiento al Software Libre
Acercamiento al Software Libre
ousli07
?
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô e configuraci¨®n de lamp±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô e configuraci¨®n de lamp
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô e configuraci¨®n de lamp
ousli07
?
Achegando o mundo de GNU/Linux
Achegando o mundo de GNU/LinuxAchegando o mundo de GNU/Linux
Achegando o mundo de GNU/Linux
ousli07
?
Comunidade BlogalizaComunidade Blogaliza
Comunidade Blogaliza
ousli07
?
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 migratorias
ousli07
?
Aplicaci¨®n docente del software libreAplicaci¨®n docente del software libre
Aplicaci¨®n docente del software libre
ousli07
?
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
ousli07
?
Iniciativa EducaMadrid - MadridLinux.Iniciativa EducaMadrid - MadridLinux.
Iniciativa EducaMadrid - MadridLinux.
ousli07
?
Software Libre e terminais lixeiros en aulas: TCOSSoftware Libre e terminais lixeiros en aulas: TCOS
Software Libre e terminais lixeiros en aulas: TCOS
ousli07
?
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
ousli07
?
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
ousli07
?
Forja Universitaria de RedIRISForja Universitaria de RedIRIS
Forja Universitaria de RedIRIS
ousli07
?
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
ousli07
?
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 LibreAula Cesga, un campus virtual basado en Software Libre
Aula Cesga, un campus virtual basado en Software Libre
ousli07
?
Presentacion Rede DSIPresentacion Rede DSI
Presentacion Rede DSI
ousli07
?
Docencia Redes con Open SourceDocencia Redes con Open Source
Docencia Redes con Open Source
ousli07
?
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
ousli07
?
Acercamiento al Software LibreAcercamiento al Software Libre
Acercamiento al Software Libre
ousli07
?
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô e configuraci¨®n de lamp±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô e configuraci¨®n de lamp
±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô e configuraci¨®n de lamp
ousli07
?
Achegando o mundo de GNU/Linux
Achegando o mundo de GNU/LinuxAchegando o mundo de GNU/Linux
Achegando o mundo de GNU/Linux
ousli07
?

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. Contidos ±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô ±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô, configuraci¨®n e posta en funcionamento Arquitectura de Joomla! 1.5 Languages Templates Modules Plugins Components API Base de datos Integraci¨®n con outros frameworks Referencias e conclusi¨®ns
  • 4. ±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô Joomla! ¨¦ un CMS desenvolvido en PHP baixo GNU/GPL. ? o resultado dunha bifurcaci¨®n e mellora de Mambo (Mambo 4.5.2.3). O nome de Joomla! v¨¦n da palabra suajili jumla que significa &quot; todos xuntos &quot; ou &quot; como un todo &quot;. A primeira versi¨®n de Joomla! (Joomla! 1.0.0) publicouse 16 de setembro de 2005. Actualmente est¨¢ dispo?ible a versi¨®n Joomla! 1.5.3 constru¨ªda baixo PHP 5.2
  • 5. ±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô Joomla ¨¦ un CMS moi flexible, en parte grazas ao f¨¢cil que resulta desenvolver extensi¨®ns (compo?entes, plugins, modules) . As extensi¨®ns ser¨¢n o mecanismo co que conta Joomla! 1.5 para dotarse de maiores funcionalidades e contrarrestar as s¨²as deficiencias (multi idioma, multi sitio, xesti¨®n de usuarios limitadas, ...). Isto propicia a aparici¨®n dunha gran comunidade de desenvolvedores que xera unha gran cantidade de extensi¨®ns.
  • 6. ±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô A tendencia de Joomla! comparada con Drupal e TYPO3 en Google Trends Joomla! 1.0 publicouse o 16 de setembro 2005
  • 7. O desenvolvemento de extensi¨®ns de Joomla! evolucionou coa aparici¨®n da nova versi¨®n 1.5 Creouse un potente framework e potenciouse o aspecto de POO aproveitando as vantaxes de PHP 5. Olvid¨¦monos de PHP4: http://gophp5.org/ ±õ²Ô³Ù°ù´Ç»å³Ü³¦¾±¨®²Ô
  • 9. ±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Requisitos (recomendados): GNU/Linux Apache 2.x PHP 5.x MySQL 5.x http://joomlacode.org/gf/project/joomla/frs/?action=FrsReleaseBrowse&frs_package_id=3587 Descargar Joomla! 1.5 dende:
  • 10. ±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Antes de comezar a instalaci¨®n ¨¦ recomendable crear a base de datos: $ mysqladmin ¨Cu db_user ¨Cp create joomla dende li?a de comandos ou dende phpmyadmin
  • 11. ±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô O asistente de instalaci¨®n de Joomla componse de sete pasos: Escoller o idioma do instalador Chequeo de pre-instalaci¨®n Licenza Configuraci¨®n da base de datos Configuraci¨®n do FTP Outras configuraci¨®ns Finalizar
  • 15. ±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Paso 4: configuraci¨®n da base de datos
  • 16. ±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Paso 5: configuraci¨®n do servidor FTP
  • 18. ±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô Ao finalizar a instalaci¨®n recom¨¦ndase obr¨ªgannos a eliminar o directorio de instalaci¨®n para poder comezar a traballar Despois de eliminar o directorio de instalaci¨®n xa podemos traballar co Site ou Admin
  • 20. O site de Joomla 1.5 (Frontend/Principal/Sitio) Arquitectura
  • 21. O administrator de Joomla 1.5 (Backend/Administraci¨®n) Arquitectura
  • 22. Estrutura de directorios separadas parte de administraci¨®n (Administrator, Backend, administraci¨®n, ...) parte p¨²blica (Site, Frontend, frontal, ...) Parte de administraci¨®n e p¨²blica te?en similitudes Comparten o cartafol /libraries/ O funcionamento interno da administraci¨®n ¨¦ similar ao da parte p¨²blica http://localhost/joomla/administrator/index.php?option= com_conten t&task= add Arquitectura
  • 23. ?
  • 24. Arquitectura Joomla 1.5 esta composto de m¨®dulos, compo?entes e plugins. ( Tam¨¦n poder¨ªamos considerar aos templates e aos ficheiros de idioma extensi¨®ns de Joomla!) Os m¨®dulo s son pequenos anacos de contido como pode ser un men¨², isto ¨¦ un modulo: O compo?ente ¨¦ onde se mostra o contido principal en Joomla! (miniaplicaci¨®n) -> s¨® se executa un por petici¨®n, o que se especifica no par¨¢metro option Os plugin s responden a eventos do sistema (login de usuarios, ao mostrar contidos, cando se autentican, ... )
  • 26. A parte das extensi¨®ns inclu¨ªdas en Joomla! ¨¦ posible extender as funcionalidades por medio de novas extensi¨®ns As extensi¨®ns instalaranse dende o administrador de extensi¨®ns (no backend, obvio :-) Arquitectura
  • 27. Component Module Plugin Language Tool : aplicaci¨®ns externas que permiten xestionar ou facilitar o traballo dun sitio Joomla! Special : extensi¨®n espec¨ªficas que requiren doutras extensi¨®ns para o seu funcionamento. http://extensions.joomla.org Arquitectura Onde atopar extensi¨®ns para Joomla! ?
  • 28. Arquitectura Joomla! est¨¢ dese?ado a partires dun framework (agora todo son frameworks: CakePHP, Django, Ruby on Rails, FLOW3, ... ;-)
  • 30. Languages Joomla! permite importar paquetes de idioma tendo traducida a interface do sitio ( site ) e/ou administraci¨®n ( administrator ). Entre as configuraci¨®ns de Joomla! ¨¦ posible activar a depuraci¨®n de cadeas de idioma (Configuraci¨®n global | Sistema) . Paquetes de idioma galego: https://forxa.mancomun.org/projects/joomlagalego/ En castel¨¢n: http://www.todosjuntos.org/content/view/55/1/
  • 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. Formato dun ficheiro de idioma INI (p.e.: <path_joomla>/language/gl-ES/gl-ES.com_content.ini) ACCESS LEVEL=Nivel de Acceso ADD=Agregar ALIGN=Ali?ar ALL PAGES=Todas as p¨¢xinas ALT TEXT=Texto alternativo ALREADY EXISTS=Xa existe ... API para empregar a traduci¨®n <?php echo Jtext::_('ADD'); ?> Languages
  • 35. $ mv en-GB.ini en-GB.properties $ prop2po -P en-GB.properties en-GB.pot processing 1 files... [###########################################] 100% $ cp en-GB.pot gl-ES.po $ po2prop -t en-GB.pot gl-ES.po gl-ES.properties $ mv gl-ES.properties gl-ES.ini http://translate.sourceforge.net/wiki/toolkit/prop2po 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
  • 36. PoEdit facilita a edici¨®n de ficheiros PO Languages
  • 38. O sistema de templates da versi¨®n 1.5 de Joomla sufriu cambios destacables durante o proceso de desenvolvemento. Inicialmente ¨ªase botar man do motor de plantillas patTemplate e por cuesti¨®ns de rendemento desbotouse a idea. A biblioteca inda est¨¢ no cartafos /libraries/ incl¨²ese por raz¨®ns de compatibilidade. http://trac.php-tools.net/patTemplate Templates
  • 39. Novidades no motor de plantillas en J! 1.5: Accesibilidade nas plantillas por defecto Compatibilidade cara atr¨¢s, versi¨®ns 1.0.x (legacy mode). $this->countModules('user1 + user2'). Sentencias condicionais. <jdoc :include ... /> Detecci¨®n autom¨¢tica do uso do editor WYSIWYG. Parametrizaci¨®n. Soporte para m¨²ltiples follas de estilo (CSS). Overrides, sobrescriben a sa¨ªda por defecto das extensi¨®ns. http://www.joomla.org/component/option,com_jd-wp/Itemid,33/p,210/ Templates
  • 40. ±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô de temas creados para Joomla! Descargamos un tema p.e.- ¡°Go Vista Plain¡± e instal¨¢molo empregando o xestor de extensi¨®ns do administrador de Joomla! http://www.augs-burg.de/joomla/joomla1.5-templates.php Templates
  • 41. ?
  • 42. Dese?amos unha plantilla de Joomla! propia Partimos do seguinte dese?o: http://www.intensivstation.ch/files/en_templates/2/template-3.html Templates
  • 43. Definimos as nosas posici¨®ns (positions) onde situaremos os m¨®dulos e o compo?ente (left, right, user1, ...) Templates
  • 44. Empregamos <jdoc:include ... /> para definir as posici¨®ns < html xmlns= &quot; http://www.w3.org/1999/xhtml &quot; xml: lang = &quot;en&quot; lang = &quot;en&quot; > < head > < jdoc :include type = &quot;head&quot; /> </ head > < body > < div id = &quot;container&quot; > < jdoc :include type = &quot;message&quot; /> < div id = &quot;outer&quot; > < div id = &quot;inner&quot; > < div id = &quot;left&quot; >< h2 > Esquerda </ h2 > < jdoc :include type = &quot;modules&quot; name = &quot;left&quot; /> </ div > < div id = &quot;content&quot; > < h2 > Contido </ h2 > < jdoc :include type = &quot;component&quot; /> </ div > <!-- end content --> ... Templates
  • 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. Constru¨ªmos un ficheiro .zip e instalamos a plantilla dende o administrador de extensi¨®ns. Resultado Templates
  • 47. Referencias: Titorial sobre plantillas para a versi¨®n 1.5 http://www.joomla.org/component/option,com_jd-wp/Itemid,33/p,210/ O titorial de referencia obrigatoria (imprescindible) http://dev.joomla.org/downloads/Joomla15TemplateTutorial.zip Templates
  • 49. Modules Imos desenvolver un m¨®dulo simple que amose unha frase recuperada do programa fortune ( http://fortune-gui.sourceforge.net/ ) Por motivos de tempo vanse a quedar moitas cousas sen explicar, como o uso de par¨¢metros, etc.
  • 50. Os m¨®dulos at¨®panse situados no directorio /modules/ dentro do directorio de instalaci¨®n de Joomla e por cada m¨®dulo hai un cartafol con nome mod_nomeModulo . O noso m¨®dulo vaise a chamar fortune . o cartafol do m¨®dulo chamarase / mod_fortune/ . Vemos a continuaci¨®n a estrutura do m¨®dulo . Modules
  • 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. Que son os plugins? Son extensi¨®ns que permiten modificar o comportamento do programa Que fan os plugins? Interceptan certos eventos prefijados para executar o noso c¨®digo antes ou despois do evento. Existen varios tipos de plugins Por cada tipo de plugin existe un directorio dentro do directorio plugins Polo tanto temos o directorio plugins/content para os plugins de tipo content e as¨ª con todos os tipos. Plugins
  • 60. Plugins authentication : autenticaci¨®n dos usuarios no proceso de login ( LDAP , openid, contas de google, ...) content : procesar os ¨ªtems de contidos editors : editores WYSIWYG que poden ser utilizados para a edici¨®n de contidos. editors-xtd : extensi¨®ns do editor (creaci¨®n de bot¨®ns adicionais) search : personalizaci¨®n das procuras realizadas nun sitio (inclu¨ªr nas buscas resultados de novos compo?entes) system : escoita eventos do sistema user : procesa as acci¨®ns dun usuario xmlrpc : crea respostas XML-RPC (APIs blogger, SITEMan, ...)
  • 61. Implementaci¨®n do plugin Un plugin ¨¦ un obxecto que deriva da clase JPlugin . Esta clase ten uns m¨¦todos definidos que responden aos eventos do sistema (hooks) Polo tanto teremos que sobrescribir o hook preciso para que reaccione a acci¨®n que desexemos. Plugins
  • 62. Obxectivo do plugin: Amosar unha mensaxe antes do cada artigo Estrutura do plugin Fortune Plugins
  • 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
  • 67. O compo?ente ¨¦ a mini-aplicaci¨®n que executa Joomla! (http://.../index.php?option=com_...) Os compo?entes p¨®dense implementar empregando o patr¨®n MVC (recomendable para aproveitar as vantaxes do framework) MVC ¨¦ un patr¨®n de arquitectura de software que separa os datos dunha aplicaci¨®n, a interfaz de usuario, e a l¨®xica de control en tres compo?entes distintos. http://es.wikipedia.org/wiki/Modelo_Vista_Controlador Component
  • 68. Por que ¨¦ tan importante? Seguindo este patr¨®n crearemos c¨®digo m¨¢is ordenado. Ser¨¢ m¨¢is f¨¢cil entender o c¨®digo de terceiros (e o noso), xa que segue un patr¨®n co?ecido. Aumenta a produtividade. En Joomla! as clases que implementan o patr¨®n son: JModel ¨C JView - JController Component
  • 69. ?
  • 70. Component Estrutura dun compo?ente en Joomla! simplificada (imos ver s¨® a parte do frontend con varias vistas para soportar Ajax).
  • 71. O controlador: o controlador ¨¦ o punto de entrada da aplicaci¨®n, mantense a escoita de todas as petici¨®ns, executa a l¨®xica da aplicaci¨®n, e amosa a vista apropiada para cada caso. O modelo: o modelo cont¨¦n todo o c¨®digo relacionado co acceso a datos . ? importante que sexa un c¨®digo o m¨¢is xen¨¦rico posible e se poida reutilizar. Nunca incluiremos l¨®xica no modelo, soamente consultas ¨¢ base de datos e validaci¨®ns de entrada de datos. A vista : a vista cont¨¦n o c¨®digo que representar¨¢ o que vemos por pantalla , neste caso tr¨¢tase de c¨®digo html (tam¨¦n feed RSS, PDF, ...) Component
  • 72. Existen d¨²as formas de traballar: -Usando un ficheiro XML onde se especifica que ¨¦ cada cousa (Struts). -Usando convenci¨®ns (Joomla!). Paradigma de dise?o ¡°Convention over Configuration¡± (CoC) Component http://en.wikipedia.org/wiki/Convention_over_Configuration
  • 73. Que son as convenci¨®ns? Son normas a seguir para crear as vistas (JView), os modelos (JModel) e os controladores (JController). Usar convenci¨®ns adoita resultar m¨¢is r¨¢pido que usar ficheiros XML. Os ficheiros XML poden crecer desorbitadamente ata o punto de facerse pouco mantenibles. Component
  • 74. Obxecto Controlador (JController): NomeCompo?ente + Controller Obxecto Vistas (JView): nomeCompo?ente + View + nomeVista Obxecto Modelo (JModel): nomeCompo?ente + Model + Nome do modelo Component
  • 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. Compr¨®base se v¨¦n un par¨¢metro na query string que estableza un controlador, e se v¨¦n imp¨®rtase o ficheiro co controlador. Instanciase o controlador. Exec¨²tase o m¨¦todo execute do controlador. Exec¨²tase o m¨¦todo redirect do controlador. Component
  • 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. Component Grazas a vista ¡°raw¡± ¨¦ posible facer petici¨®ns Ajax. Agora un m¨®dulo poder¨ªa facer petici¨®ns HTTP v¨ªa Ajax. (ver m¨®dulo mod_fortuneajax) Joomla! integra a librer¨ªa javascript MooTools. OLLO: a ¨²ltima versi¨®n de MooTools ¨¦ a 1.12 e en Joomla! incl¨²ese a 1.11
  • 84. mod_fortuneajax fai petici¨®ns Ajax ao componente com_fortuneajax, pedindo a vista ¡°raw¡± para que devolva s¨® o contido e non todo o layout do sistema.
  • 85. Quedar¨ªa pendente toda a parte da administraci¨®n: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/ id,components:hello_world_mvc4/ Component
  • 86. API Base de datos (core) Para aproveitar as funcionalidades do framework de Joomla! usar convenci¨®ns : Nome das t¨¢boas, recomendable en min¨²sculas e coa seguinte sintaxe: #__ <nome_componente> _ <nome_t¨¢boa> p.e. jos_fortune_frases. ( #__ prefixo definido na instalaci¨®n, por defecto jos_) Nome da clave primaria ¡° id ¡±, (integer auto_increment not null) Nomes dos campos en min¨²scula, palabras separadas por ¡°_¡±. p.e. email_secundario
  • 87. API Base de datos (core) Nomes de campos com¨²ns con funcionalidades extra: published : 0 -> no publicado 1 -> publicado hits : enteiro que garda os accesos dende o frontend dos visitantes (estat¨ªsticas) Bloqueo da edici¨®n: checking_out , garda o id de usuario (0 por defecto) checking_out_time , o datetime ordering : garda a orde na que se amosan parameters : garda par¨¢metros en formato INI (variable=valor). Clase de utilidade JParameter
  • 88. API Base de datos (core) C¨®digo b¨¢sico para acceso a base de datos: //?Recuperar?instancia?da?base?de?datos $db? =&? JFactory :: getDBO (); //?Consulta $query? =? 'SELECT?*?FROM?#__fortune_frases' ; //?Recoller?o?resultado?da?consulta $result? =? $db -> setQuery (? $query ); Estase traballando para emular as funci¨®ns do API de ADOdb. OLLO! non hai intenci¨®n de integrar a librer¨ªa ADOdb
  • 89. API Base de datos (core) M¨¦todos API: $db =& JFactory::getDBO(); $db->loadResult() $db->loadResultArray([$key]) $db->loadAssoc() $db->loadAssocList([$key]) $db->loadObject() $db->loadObjectList([$key]) $db->loadRow() $db->loadRowList([$key]) ...
  • 90. API Base de datos (JTable) JTable proporciona un conxunto de funcionalides (CRUD) abstraendo cuesti¨®ns internas coma SQL, ...
  • 91. Clase ¡°TableFortuneFrases¡± herda de JTable funcionalidades ORM. As clases JTable g¨¢rdanse no cartafol /tables/ do compo?ente: JPATH_COMPONENT_ADMINISTRATOR.DS.'tables'.DS.'fortunefrases.php' 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)
  • 92. CRUD ( C reate, R ead, U pdate e D elete) //? 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)
  • 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. M¨¦todos de JTable para aproveitar as funcionalidades dos campos com¨²ns: //?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)
  • 95. Manexo do campo params, ¨²til para personalizar propiedades dun contido. Os par¨¢metros def¨ªnense no ficheiro XML que cont¨¦n os detalles da extensi¨®n: //?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)
  • 96. Integraci¨®n de Joomla! con outros frameworks
  • 97. Joomla! p¨®dese integrar con outros proxectos coma phpBB por medio de compo?entes, plugins, m¨®dulos, ... Por medio dunha interface XML-RPC gar¨¢ntese a interoperabilidade . Tam¨¦n se pode integrar dentro de Joomla! proxectos desenvolvidos con frameworks web: p.e.- CakePHP e Symfony Joomla! + CakePHP = Jake http://cakeforge.org/frs/?group_id=76&release_id=314 Joomla! + Symfony = sfJoomla15Bridge, inspirado en Jake http://trac.symfony-project.com/wiki/sfJoomla15BridgePlugin Joomla! e outros frameworks
  • 98. Joomla! e outros frameworks Instalamos unha aplicaci¨®n CakePHP existente (Cheesecake Photoblog) en Joomla!. Pasos: 1) Instalar o componente Jake: http://cakeforge.org/frs/download.php/354/jake_1.0.3.38b-joomla_1.5.zip 2) Instalar Cheesecake: http://cakeforge.org/frs/download.php/510/cheesecake_cake.tar.gz 3) Configuramos a aplicaci¨®n en Joomla! com_jake/jake.ini [settings] default = &quot;cheesecake&quot; [cheesecake] path = &quot;/var/www/cheesecake/app/webroot&quot; url = &quot;/cheesecake&quot; 4) Obter URL de Jake a aplicaci¨®n
  • 99. Joomla! e outros frameworks ±õ²Ô²õ³Ù²¹±ô²¹³¦¾±¨®²Ô de Jake / Jake no men¨² de compo?entes
  • 100. Joomla! e outros frameworks Resultado da integraci¨®n de Cheesecake en Joomla!
  • 101. Joomla! e outros frameworks SITEman, aplicaci¨®n de escritorio implementada en Java que permite aos usuarios administrar un sitio Joomla! 1.5 dende un ambiente de escritorio.
  • 103. Referencia e conclusi¨®ns Gracias a David Noguera Cifuentes Parte desta presentaci¨®n inspirada no seu material http://www.nosolocodigo.com/tag/joomla P¨¢xina oficial de Joomla! http://joomla.org Directorio de extensi¨®ns de Joomla! http://extensions.joomla.org Traduci¨®n Joomla! ao galego https://forxa.mancomun.org/projects/joomlagalego/