SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
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 <ul><li>Introdución </li></ul><ul><li>Instalación, configuración e posta en funcionamento </li></ul><ul><li>Arquitectura de Joomla! 1.5 </li></ul><ul><ul><li>Languages </li></ul></ul><ul><ul><li>Templates </li></ul></ul><ul><ul><li>Modules </li></ul></ul><ul><ul><li>Plugins </li></ul></ul><ul><ul><li>Components </li></ul></ul><ul><li>API Base de datos </li></ul><ul><li>Integración con outros frameworks </li></ul><ul><li>Referencias e conclusións </li></ul>
4.
Introdución <ul><li>Joomla! é un CMS desenvolvido en PHP baixo GNU/GPL. É o resultado dunha bifurcación e mellora de Mambo (Mambo 4.5.2.3). </li></ul><ul><li>O nome de Joomla! vén da palabra suajili jumla que significa " todos xuntos " ou " como un todo ". </li></ul><ul><li>A primeira versión de Joomla! (Joomla! 1.0.0) publicouse 16 de setembro de 2005. </li></ul><ul><li>Actualmente está dispoñible a versión Joomla! 1.5.3 construída baixo PHP 5.2 </li></ul>
5.
Introdución <ul><li>Joomla é un CMS moi flexible, en parte grazas ao fácil que resulta desenvolver extensións (compoñentes, plugins, modules) . </li></ul><ul><li>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, ...). </li></ul><ul><li>Isto propicia a aparición dunha gran comunidade de desenvolvedores que xera unha gran cantidade de extensións. </li></ul>
6.
Introdución <ul><li>A tendencia de Joomla! comparada con Drupal e TYPO3 en Google Trends </li></ul><ul><ul><li>Joomla! 1.0 publicouse o 16 de setembro 2005 </li></ul></ul>
7.
<ul><li>O desenvolvemento de extensións de Joomla! evolucionou coa aparición da nova versión 1.5 </li></ul><ul><li>Creouse un potente framework e potenciouse o aspecto de POO aproveitando as vantaxes de PHP 5. </li></ul><ul><li>Olvidémonos de PHP4: </li></ul><ul><ul><li>http://gophp5.org/ </li></ul></ul>Introdución
10.
Instalación <ul><ul><ul><li>Antes de comezar a instalación é recomendable crear a base de datos: </li></ul></ul></ul><ul><li>$ mysqladmin –u db_user –p create joomla dende liña de comandos </li></ul><ul><li>ou dende phpmyadmin </li></ul>
11.
Instalación <ul><ul><ul><li>O asistente de instalación de Joomla componse de sete pasos: </li></ul></ul></ul><ul><li>Escoller o idioma do instalador </li></ul><ul><li>Chequeo de pre-instalación </li></ul><ul><li>Licenza </li></ul><ul><li>Configuración da base de datos </li></ul><ul><li>Configuración do FTP </li></ul><ul><li>Outras configuracións </li></ul><ul><li>Finalizar </li></ul>
12.
Instalación <ul><ul><ul><li>Paso 1: selección do idioma </li></ul></ul></ul>
15.
Instalación <ul><ul><ul><li>Paso 4: configuración da base de datos </li></ul></ul></ul>
16.
Instalación <ul><ul><ul><li>Paso 5: configuración do servidor FTP </li></ul></ul></ul>
17.
Instalación <ul><ul><ul><li>Paso 6: configuración principal </li></ul></ul></ul>
18.
Instalación <ul><li>Ao finalizar a instalación recoméndase obrígannos a eliminar o directorio de instalación para poder comezar a traballar </li></ul><ul><li>Despois de eliminar o directorio de instalación xa podemos traballar co Site ou Admin </li></ul>
20.
<ul><li>O site de Joomla 1.5 (Frontend/Principal/Sitio) </li></ul>Arquitectura
21.
<ul><li>O administrator de Joomla 1.5 (Backend/Administración) </li></ul>Arquitectura
22.
<ul><li>Estrutura de directorios separadas </li></ul><ul><ul><li>parte de administración (Administrator, Backend, administración, ...) </li></ul></ul><ul><ul><li>parte pública (Site, Frontend, frontal, ...) </li></ul></ul><ul><li>Parte de administración e pública teñen similitudes </li></ul><ul><li>Comparten o cartafol /libraries/ </li></ul><ul><li>O funcionamento interno da administración é similar ao da parte pública </li></ul>http://localhost/joomla/administrator/index.php?option= com_conten t&task= add Arquitectura
24.
Arquitectura <ul><li>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!) </li></ul><ul><li>Os módulo s son pequenos anacos de contido como pode ser un menú, isto é un modulo: </li></ul><ul><li>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 </li></ul><ul><li>Os plugin s responden a eventos do sistema (login de usuarios, ao mostrar contidos, cando se autentican, ... ) </li></ul>
26.
<ul><li>A parte das extensións incluídas en Joomla! é posible extender as funcionalidades por medio de novas extensións </li></ul><ul><li>As extensións instalaranse dende o administrador de extensións (no backend, obvio :-) </li></ul>Arquitectura
27.
<ul><li>Component </li></ul><ul><li>Module </li></ul><ul><li>Plugin </li></ul><ul><li>Language </li></ul><ul><li>Tool : aplicacións externas que permiten xestionar ou facilitar o traballo dun sitio Joomla! </li></ul><ul><li>Special : extensión específicas que requiren doutras extensións para o seu funcionamento. </li></ul><ul><li>http://extensions.joomla.org </li></ul>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 <ul><li>Joomla! permite importar paquetes de idioma tendo traducida a interface do sitio ( site ) e/ou administración ( administrator ). </li></ul><ul><li>Entre as configuracións de Joomla! é posible activar a depuración de cadeas de idioma (Configuración global | Sistema) . </li></ul><ul><li>Paquetes de idioma galego: </li></ul><ul><ul><li>https://forxa.mancomun.org/projects/joomlagalego/ </li></ul></ul><ul><li>En castelán: </li></ul><ul><ul><li>http://www.todosjuntos.org/content/view/55/1/ </li></ul></ul>
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.
<ul><li>Formato dun ficheiro de idioma INI (p.e.: <path_joomla>/language/gl-ES/gl-ES.com_content.ini) </li></ul><ul><ul><li>ACCESS LEVEL=Nivel de Acceso </li></ul></ul><ul><ul><li>ADD=Agregar </li></ul></ul><ul><ul><li>ALIGN=Aliñar </li></ul></ul><ul><ul><li>ALL PAGES=Todas as páxinas </li></ul></ul><ul><ul><li>ALT TEXT=Texto alternativo </li></ul></ul><ul><ul><li>ALREADY EXISTS=Xa existe </li></ul></ul><ul><ul><li>... </li></ul></ul><ul><li>API para empregar a tradución </li></ul><ul><ul><li><?php echo Jtext::_('ADD'); ?> </li></ul></ul>Languages
35.
<ul><li>$ mv en-GB.ini en-GB.properties </li></ul><ul><li>$ prop2po -P en-GB.properties en-GB.pot </li></ul><ul><ul><li>processing 1 files... </li></ul></ul><ul><ul><li>[###########################################] 100% </li></ul></ul><ul><li>$ cp en-GB.pot gl-ES.po </li></ul><ul><li>$ po2prop -t en-GB.pot gl-ES.po gl-ES.properties </li></ul><ul><li>$ mv gl-ES.properties gl-ES.ini </li></ul><ul><li>http://translate.sourceforge.net/wiki/toolkit/prop2po </li></ul>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.
<ul><li>O sistema de templates da versión 1.5 de Joomla sufriu cambios destacables durante o proceso de desenvolvemento. </li></ul><ul><li>Inicialmente íase botar man do motor de plantillas patTemplate e por cuestións de rendemento desbotouse a idea. </li></ul><ul><li>A biblioteca inda está no cartafos /libraries/ inclúese por razóns de compatibilidade. </li></ul><ul><ul><li>http://trac.php-tools.net/patTemplate </li></ul></ul>Templates
39.
<ul><li>Novidades no motor de plantillas en J! 1.5: </li></ul><ul><ul><li>Accesibilidade nas plantillas por defecto </li></ul></ul><ul><ul><li>Compatibilidade cara atrás, versións 1.0.x (legacy mode). </li></ul></ul><ul><ul><li>$this->countModules('user1 + user2'). </li></ul></ul><ul><ul><li>Sentencias condicionais. </li></ul></ul><ul><ul><li><jdoc :include ... /> </li></ul></ul><ul><ul><li>Detección automática do uso do editor WYSIWYG. </li></ul></ul><ul><ul><li>Parametrización. </li></ul></ul><ul><ul><li>Soporte para múltiples follas de estilo (CSS). </li></ul></ul><ul><ul><li>Overrides, sobrescriben a saída por defecto das extensións. </li></ul></ul><ul><li>http://www.joomla.org/component/option,com_jd-wp/Itemid,33/p,210/ </li></ul>Templates
40.
<ul><li>Instalación de temas creados para Joomla! </li></ul><ul><li>Descargamos un tema p.e.- “Go Vista Plain” e instalámolo empregando o xestor de extensións do administrador de Joomla! </li></ul><ul><ul><li>http://www.augs-burg.de/joomla/joomla1.5-templates.php </li></ul></ul>Templates
42.
<ul><li>Deseñamos unha plantilla de Joomla! propia </li></ul><ul><li>Partimos do seguinte deseño: http://www.intensivstation.ch/files/en_templates/2/template-3.html </li></ul>Templates
43.
<ul><li>Definimos as nosas posicións (positions) onde situaremos os módulos e o compoñente (left, right, user1, ...) </li></ul>Templates
44.
<ul><li>Empregamos <jdoc:include ... /> para definir as posicións </li></ul><ul><li>< html xmlns= " http://www.w3.org/1999/xhtml " xml: lang = "en" lang = "en" > </li></ul><ul><li>< head > </li></ul><ul><li>< jdoc :include type = "head" /> </li></ul><ul><li></ head > </li></ul><ul><li>< body > </li></ul><ul><li>< div id = "container" > </li></ul><ul><li>< jdoc :include type = "message" /> </li></ul><ul><li>< div id = "outer" > </li></ul><ul><li>< div id = "inner" > </li></ul><ul><li>< div id = "left" >< h2 > Esquerda </ h2 > </li></ul><ul><li>< jdoc :include type = "modules" name = "left" /> </li></ul><ul><li></ div > </li></ul><ul><li>< div id = "content" > </li></ul><ul><li>< h2 > Contido </ h2 > </li></ul><ul><li>< jdoc :include type = "component" /> </li></ul><ul><li></ div > <!-- end content --> </li></ul><ul><li>... </li></ul>Templates
46.
<ul><li>Construímos un ficheiro .zip e instalamos a plantilla dende o administrador de extensións. </li></ul><ul><li>Resultado </li></ul>Templates
47.
<ul><li>Referencias: </li></ul><ul><ul><li>Titorial sobre plantillas para a versión 1.5 </li></ul></ul><ul><ul><li>http://www.joomla.org/component/option,com_jd-wp/Itemid,33/p,210/ </li></ul></ul><ul><ul><li>O titorial de referencia obrigatoria (imprescindible) </li></ul></ul><ul><ul><li>http://dev.joomla.org/downloads/Joomla15TemplateTutorial.zip </li></ul></ul>Templates
49.
Modules <ul><li>Imos desenvolver un módulo simple que amose unha frase recuperada do programa fortune ( http://fortune-gui.sourceforge.net/ ) </li></ul><ul><li>Por motivos de tempo vanse a quedar moitas cousas sen explicar, como o uso de parámetros, etc. </li></ul>
50.
<ul><li>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 . </li></ul><ul><li>O noso módulo vaise a chamar fortune . </li></ul><ul><li>o cartafol do módulo chamarase / mod_fortune/ . </li></ul><ul><li>Vemos a continuación a estrutura do módulo . </li></ul>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 = "1.0" ?> <install type = "module" version = "1.5.0" > <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 = "mod_fortune" > 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.
<ul><li>Que son os plugins? </li></ul><ul><li>Son extensións que permiten modificar o comportamento do programa </li></ul><ul><li>Que fan os plugins? </li></ul><ul><li>Interceptan certos eventos prefijados para executar o noso código antes ou despois do evento. </li></ul><ul><li>Existen varios tipos de plugins </li></ul><ul><li>Por cada tipo de plugin existe un directorio dentro do directorio plugins </li></ul><ul><li>Polo tanto temos o directorio plugins/content para os plugins de tipo content e así con todos os tipos. </li></ul>Plugins
60.
Plugins <ul><li>authentication : autenticación dos usuarios no proceso de login ( LDAP , openid, contas de google, ...) </li></ul><ul><li>content : procesar os ítems de contidos </li></ul><ul><li>editors : editores WYSIWYG que poden ser utilizados para a edición de contidos. </li></ul><ul><li>editors-xtd : extensións do editor (creación de botóns adicionais) </li></ul><ul><li>search : personalización das procuras realizadas nun sitio (incluír nas buscas resultados de novos compoñentes) </li></ul><ul><li>system : escoita eventos do sistema </li></ul><ul><li>user : procesa as accións dun usuario </li></ul><ul><li>xmlrpc : crea respostas XML-RPC (APIs blogger, SITEMan, ...) </li></ul>
61.
<ul><li>Implementación do plugin </li></ul><ul><li>Un plugin é un obxecto que deriva da clase JPlugin . </li></ul><ul><li>Esta clase ten uns métodos definidos que responden aos eventos do sistema (hooks) </li></ul><ul><li>Polo tanto teremos que sobrescribir o hook preciso para que reaccione a acción que desexemos. </li></ul>Plugins
62.
<ul><li>Obxectivo do plugin: Amosar unha mensaxe antes do cada artigo </li></ul><ul><li>Estrutura do plugin Fortune </li></ul>Plugins
63.
<? xml version = "1.0" encoding = "utf-8" ?> <install version = "1.5" type = "plugin" group = "content" > <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 = "fortune" > 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.
<ul><li>O compoñente é a mini-aplicación que executa Joomla! (http://.../index.php?option=com_...) </li></ul><ul><li>Os compoñentes pódense implementar empregando o patrón MVC (recomendable para aproveitar as vantaxes do framework) </li></ul><ul><li>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. </li></ul><ul><li>http://es.wikipedia.org/wiki/Modelo_Vista_Controlador </li></ul>Component
68.
<ul><li>Por que é tan importante? </li></ul><ul><li>Seguindo este patrón crearemos código máis ordenado. </li></ul><ul><li>Será máis fácil entender o código de terceiros (e o noso), xa que segue un patrón coñecido. </li></ul><ul><li>Aumenta a produtividade. </li></ul><ul><li>En Joomla! as clases que implementan o patrón son: JModel – JView - JController </li></ul>Component
70.
Component <ul><li>Estrutura dun compoñente en Joomla! simplificada (imos ver só a parte do frontend con varias vistas para soportar Ajax). </li></ul>
71.
<ul><li>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. </li></ul><ul><li>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. </li></ul><ul><li>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, ...) </li></ul>Component
72.
<ul><li>Existen dúas formas de traballar: </li></ul><ul><ul><li>-Usando un ficheiro XML onde se especifica que é cada cousa (Struts). </li></ul></ul><ul><ul><li>-Usando convencións (Joomla!). </li></ul></ul><ul><li>Paradigma de diseño “Convention over Configuration” (CoC) </li></ul>Component <ul><ul><ul><li>http://en.wikipedia.org/wiki/Convention_over_Configuration </li></ul></ul></ul>
73.
<ul><li>Que son as convencións? </li></ul><ul><li>Son normas a seguir para crear as vistas (JView), os modelos (JModel) e os controladores (JController). </li></ul><ul><li>Usar convencións adoita resultar máis rápido que usar ficheiros XML. </li></ul><ul><li>Os ficheiros XML poden crecer desorbitadamente ata o punto de facerse pouco mantenibles. </li></ul>Component
74.
<ul><li>Obxecto Controlador (JController): </li></ul><ul><li>NomeCompoñente + Controller </li></ul><ul><li>Obxecto Vistas (JView): </li></ul><ul><li>nomeCompoñente + View + nomeVista </li></ul><ul><li>Obxecto Modelo (JModel): </li></ul><ul><li>nomeCompoñente + Model + Nome do modelo </li></ul>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.
<ul><li>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. </li></ul><ul><li>Instanciase o controlador. </li></ul><ul><li>Execútase o método execute do controlador. </li></ul><ul><li>Execútase o método redirect do controlador. </li></ul>Component
83.
Component <ul><li>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) </li></ul><ul><li>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 </li></ul>
84.
<ul><li>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. </li></ul>
85.
<ul><li>Quedaría pendente toda a parte da administración: </li></ul><ul><li>http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/ id,components:hello_world_mvc4/ </li></ul>Component
86.
API Base de datos (core) <ul><li>Para aproveitar as funcionalidades do framework de Joomla! usar convencións : </li></ul><ul><ul><li>Nome das táboas, recomendable en minúsculas e coa seguinte sintaxe: </li></ul></ul><ul><ul><ul><li>#__ <nome_componente> _ <nome_táboa> p.e. jos_fortune_frases. ( #__ prefixo definido na instalación, por defecto jos_) </li></ul></ul></ul><ul><ul><li>Nome da clave primaria “ id ”, (integer auto_increment not null) </li></ul></ul><ul><ul><li>Nomes dos campos en minúscula, palabras separadas por “_”. p.e. email_secundario </li></ul></ul>
87.
API Base de datos (core) <ul><li>Nomes de campos comúns con funcionalidades extra: </li></ul><ul><ul><li>published : 0 -> no publicado 1 -> publicado </li></ul></ul><ul><ul><li>hits : enteiro que garda os accesos dende o frontend dos visitantes (estatísticas) </li></ul></ul><ul><ul><li>Bloqueo da edición: </li></ul></ul><ul><ul><ul><li>checking_out , garda o id de usuario (0 por defecto) </li></ul></ul></ul><ul><ul><ul><li>checking_out_time , o datetime </li></ul></ul></ul><ul><ul><li>ordering : garda a orde na que se amosan </li></ul></ul><ul><ul><li>parameters : garda parámetros en formato INI (variable=valor). Clase de utilidade JParameter </li></ul></ul>
88.
API Base de datos (core) <ul><li>Código básico para acceso a base de datos: </li></ul>// Recuperar instancia da base de datos $db =& JFactory :: getDBO (); // Consulta $query = 'SELECT * FROM #__fortune_frases' ; // Recoller o resultado da consulta $result = $db -> setQuery ( $query ); <ul><li>Estase traballando para emular as funcións do API de ADOdb. OLLO! non hai intención de integrar a librería ADOdb </li></ul>
89.
API Base de datos (core) <ul><li>Métodos API: $db =& JFactory::getDBO(); </li></ul><ul><li>$db->loadResult() </li></ul><ul><li>$db->loadResultArray([$key]) </li></ul><ul><li>$db->loadAssoc() </li></ul><ul><li>$db->loadAssocList([$key]) </li></ul><ul><li>$db->loadObject() </li></ul><ul><li>$db->loadObjectList([$key]) </li></ul><ul><li>$db->loadRow() </li></ul><ul><li>$db->loadRowList([$key]) </li></ul><ul><li>... </li></ul>
90.
API Base de datos (JTable) <ul><li>JTable proporciona un conxunto de funcionalides (CRUD) abstraendo cuestións internas coma SQL, ... </li></ul>
91.
<ul><li>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' </li></ul>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.
<ul><li>CRUD ( C reate, R ead, U pdate e D elete) </li></ul>// 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' , "Lorem ipsum dolor sit amet" ); $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.
<ul><li>Métodos de JTable para aproveitar as funcionalidades dos campos comúns: </li></ul>// 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.
<ul><li>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: </li></ul>// 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)
97.
<ul><li>Joomla! pódese integrar con outros proxectos coma phpBB por medio de compoñentes, plugins, módulos, ... </li></ul><ul><li>Por medio dunha interface XML-RPC garántese a interoperabilidade . </li></ul><ul><li>Tamén se pode integrar dentro de Joomla! proxectos desenvolvidos con frameworks web: p.e.- CakePHP e Symfony </li></ul><ul><ul><li>Joomla! + CakePHP = Jake http://cakeforge.org/frs/?group_id=76&release_id=314 </li></ul></ul><ul><ul><li>Joomla! + Symfony = sfJoomla15Bridge, inspirado en Jake http://trac.symfony-project.com/wiki/sfJoomla15BridgePlugin </li></ul></ul>Joomla! e outros frameworks
98.
Joomla! e outros frameworks <ul><li>Instalamos unha aplicación CakePHP existente (Cheesecake Photoblog) en Joomla!. Pasos: </li></ul><ul><li>1) Instalar o componente Jake: </li></ul><ul><ul><li>http://cakeforge.org/frs/download.php/354/jake_1.0.3.38b-joomla_1.5.zip </li></ul></ul><ul><li>2) Instalar Cheesecake: </li></ul><ul><ul><li>http://cakeforge.org/frs/download.php/510/cheesecake_cake.tar.gz </li></ul></ul><ul><li>3) Configuramos a aplicación en Joomla! com_jake/jake.ini </li></ul><ul><li>[settings] </li></ul><ul><li>default = "cheesecake" </li></ul><ul><li>[cheesecake] </li></ul><ul><li>path = "/var/www/cheesecake/app/webroot" </li></ul><ul><li>url = "/cheesecake" </li></ul><ul><li>4) Obter URL de Jake a aplicación </li></ul>
99.
Joomla! e outros frameworks <ul><li>Instalación de Jake / Jake no menú de compoñentes </li></ul>
100.
Joomla! e outros frameworks <ul><li>Resultado da integración de Cheesecake en Joomla! </li></ul>
101.
Joomla! e outros frameworks <ul><li>SITEman, aplicación de escritorio implementada en Java que permite aos usuarios administrar un sitio Joomla! 1.5 dende un ambiente de escritorio. </li></ul>
103.
Referencia e conclusións <ul><li>Gracias a David Noguera Cifuentes Parte desta presentación inspirada no seu material http://www.nosolocodigo.com/tag/joomla </li></ul><ul><li>Páxina oficial de Joomla! http://joomla.org </li></ul><ul><li>Directorio de extensións de Joomla! http://extensions.joomla.org </li></ul><ul><li>Tradución Joomla! ao galego https://forxa.mancomun.org/projects/joomlagalego/ </li></ul>