Está en la página 1de 31

Introduccin a la programacin Joomla! 1.

Introduccin a la programacin Joomla! 1.5 Por Carles Serrats carless@cesigrup.com

Framework Joomla! 1.5

Joomla! Day 2009

Herramientas de sistema

Servidores Apache y mySQL locales


AppServ : AppServ Open Project http://www.appservnetwork.com/ XAMPP : http://www.apachefriends.org/ JS U-Server : Joomla Spanish-Uniform Server RC3 http://www.joomlaspanish.org/

Framework Joomla! 1.5

Joomla! Day 2009

Herramientas

Eclipse
Coloracin del cdigo, auto-indentacin Compilacin de la sintaxis

Eclipse PDT (PHP Development tools)


http://www.eclipse.org/pdt

Eclipse Galileo (Eclipse + PDT)


PDT 2.1 All In Ones / Eclipse PHP Package http://eclipse.org/galileo/

J!Code
Projecto joomlaCode basado en Eclipse http://joomlacode.org/gf/project/jcode/

Framework Joomla! 1.5

Joomla! Day 2009

Conceptos de Joomla

http://www.nuestrositioweb.com/index.php? option=com_xxx&id=xxx index.php como la puerta principal


Seguridad y homogeneidad

Funcionamiento del Joomla


El servidor web recoge la peticin HTTP Se carga el ncleo de joomla (Framework conjunto de clases) Se instancia el objeto JApplication Se inicializa el objeto JApplication (Ejecucin del componente) interpreta la plantilla y los documentos a la carga

Framework Joomla! 1.5

Joomla! Day 2009

Definicin de FrameWork

Wikipedia :
Un framework, en el desarrollo de software, es una estructura de soporte definida, mediante la cual otro proyecto de software puede ser organizado y desarrollado. Tpicamente, puede incluir soporte de programas, bibliotecas y un lenguaje interpretado entre otros programas para ayudar a desarrollar y unir los diferentes componentes de un proyecto. El Framework es un intento de facilitar el desarrollo de software, permitiendo a los diseadores y programadores pasar ms tiempo identificando requerimientos de software que tratando con los tediosos detalles de bajo nivel de proveer un sistema funcional.
5 Framework Joomla! 1.5

Joomla! Day 2009

Arquitectura del FrameWork

Las 3 capas del FrameWork

Framework Joomla! 1.5

Joomla! Day 2009

Arquitectura del FrameWork

FrameWork
JFactory : fabrica de objectos que proporciona acceso a la informacin del sistema. JRoute, JText, JMenu, JDocument, JView, JObject

Librerias
Acceso a archivos, PDF, PEAR, Mailer, UTF8 jimport(joomla.filesystem.file)

Plugins : Amplia las funciones del framework (sistema)


7 Framework Joomla! 1.5

Joomla! Day 2009

Arquitectura del FrameWork

Capa aplicacin
Aplicacin implementada por el framework
JInstallation, JSite, JAdministrator Conecta el Framework via JApplication
$app =& JFactory::getApplication(); if ($app->isSite()) echo El Cliente esta en el FrontEnd'; if ($app->isAdmin()) echo El Cliente esta en el BackEnd';

Framework Joomla! 1.5

Joomla! Day 2009

Arquitectura del FrameWork

Capa de Extensiones
Mdulos:
Pequeos trocos de cdigo que nos dan informacin muy puntual.
Mens, Usuarios conectados, etc

Componentes :
extensiones complejas, con la finalidad de mostrar en el contenido principal de la web un conjunto de datos.
Implementacin en MVC

Templates :
extensiones que nos permiten formatear los datos para mostrar-los adecuadamente.
9 Framework Joomla! 1.5

Joomla! Day 2009

MDULOS

Introduccin a la creacin de mdulos

10

Framework Joomla! 1.5

Joomla! Day 2009

Modulos estructura de directorio

Nombre del directorio : mod_nombre Manifiesto archivo XML


mod_nombre.xml

Punto de entrada
mod_nombre.php

Directorio Template
tmpl\default.php Archivos auxiliares helper.php

11

Framework Joomla! 1.5

Joomla! Day 2009

Mdulos Manifiesto (XML)

Descripcin de la extensin XML Comn en todos las extensiones


Declaracin genrica Archivos de instalacin Parmetros (Solo en mdulos y plugins)

Parmetros Simples o avanzados:


Text, textarea, radio Filelist, calendar, section, category, usergroup,
12 Framework Joomla! 1.5

Joomla! Day 2009

Mdulos Manifiesto (XML)


<?xml version="1.0" encoding="utf-8"?> <install type="module" version="1.5.0"> <name>Joomla Day modulo 1</name> <author>Carles Serrats</author> <creationDate>Dic 2009</creationDate> <copyright>Copyright (C) 2005 - 2009 JoomlaDay. All rights reserved.</copyright> <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license> <authorEmail>carless@cesigrup.com</authorEmail> <authorUrl>www.cesigrup.com</authorUrl> <version>1.5.0</version> <description>Modulo 1 de ejemplo para el Joomla Day 2009</description> <files> <filename module="mod_joomladay1">mod_joomladay1.php</filename> </files> <params> </params> </install>
13 Framework Joomla! 1.5

Joomla! Day 2009

Modulos Punto de entrada


mod_joomladay1.ph p

<?php /** * @version * $Id * @package * @copyright */

1.5.0 mod_joomladay1.php Joomla Copyright (C) 2005 - 2009 JoomlaDay. All rights reserved.

// no direct access defined('_JEXEC') or die('Restricted access'); global $mainframe; require(JModuleHelper::getLayoutPath('mod_joomladay1')); tmpl/default.php ?> <?php // no direct access defined('_JEXEC') or die('Restricted access'); ?> <div>Hola Mundo</div>
14 Framework Joomla! 1.5

Joomla! Day 2009

Constantes del framework


JPATH y DS son constantes que define el marco de trabajo de Joomla! y que contienen el path al sistema y el separador de directorios adecuado para el sistema que se este utilizando, \ para Windows y / para sistemas Unix. Utilizar estas constantes nos facilitara el trabajo ms adelante y har nuestras aplicaciones portables e independientes de la plataforma donde se estn utilizando.
Nombre DS JURI::base() JPATH_ADMINISTRATOR JPATH_BASE JPATH_CACHE JPATH_COMPONENT JPATH_COMPONENT_ADMINISTRATOR JPATH_COMPONENT_SITE JPATH_CONFIGURATION JPATH_INSTALLATION JPATH_LIBRARIES JPATH_PLUGINS JPATH_ROOT JPATH_SITE JPATH_THEMES Descripcin Separador de directorio (/) Directorio de inicio Web Path del dir. de administracin (/joomla/administrator) Path de entrada del directorio base (/joomla) Path del Cache (/joomla/cache) Path del Component (/joomla/components/com_peliculas) Path del directorio backend del Componente (/joomla/administrator/components/com_peli culas) Path del directorio frontend del Componente (/joomla/components/com_peliculas) Path de las configuraciones (/joomla) Path de la Instalacin (/joomla/installation) Path de las Librerias (/joomla/libraries) Path de los Plugins (/joomla/plugins) Path del directorio de entrada del frontend (/joomla) Path del directorio pblico (/joomla) Path del directorio de templates (/joomla/templates)

15

Framework Joomla! 1.5

Joomla! Day 2009

Objectos FrameWork

jDocument
La clase JDocument proporciona una interfaz gil para consultar o acceder a datos del documento final.
http://api.joomla.org/Joomla-Framework/Document/JDocument.html

Ejemplo : addStyleSheet : Aade un CSS al documento html addStyleDeclaration : Aade un trocito de cdigo CSS al documento addScript : Aade un JS al documento html addScriptDeclaration : Aade un trocito de cdigo JS al documento html
$pathbase_modulo = JURI::base() . 'modules/mod_joomladay1/';; $document = & JFactory::getDocument(); $document->addStyleSheet($pathbase_modulo. 'tmpl/joomladaye.css');

16

Framework Joomla! 1.5

Joomla! Day 2009

Objectos Framework

JUser
Nos permite conocer datos del usuario
$user = &Jfactory::getUser(); $language = $user->getParam('language'); echo $user->name.", Tu lenguage idioma es : .$language;

Nos permite conocer el estado de un usuario


$user = &Jfactory::getUser(); if ($user->guest) { echo Bienvenido visitante; } else { echo Bienvenido . $user->name; }
Joomla! Day 2009

17

Framework Joomla! 1.5

Objectos FrameWork

JUser
Cada consulta de Joomla! se asocia a un usuario
$user = &Jfactory::getUser(); $lang = $user->getParam( 'language' ); if (empty($lang)) { jimport('joomla.language.helper'); $lang = JLanguageHelper::detectLanguage(); } if (empty($user->name)) { ?> <div>Bienvenido visitante</div> <?php } else { ?> <div>Bienvenido <?php echo $user->name; ?></div> <div>Tu lenguage idioma es :<?php echo $lang; ?></div> <?php } ?>

http://api.joomla.org/Joomla-Framework/User/JUser.html http://api.joomla.org/Joomla-Framework/Language/JLanguageHelper.html

18

Framework Joomla! 1.5

Joomla! Day 2009

Objectos Framework

Acceso a bases de datos


$db =& JFactory::getDBO(); $db->setQuery("SELECT name FROM #__users"); $usuarios = $db->loadObjectList(); if ($db->getErrorNum()) { JError::raiseWarning( 500, $db->stderr() ); }

Disponemos de diferentes mtodos para consultar los resultados :


$db->loadresult() : carga el primer campo de la primera fila devuelta por la consulta. $db->loadObjectList() :carga una lista de objetos de base de datos. $db->loadobject(), $db->loadrow()

http://api.joomla.org/Joomla-Framework/Database/JDatabase.html Atencin Seguridad : Para evitar SQL Injection


Utilizar el $db->nameQuote() y el $db->Quote()
Joomla! Day 2009

19

Framework Joomla! 1.5

Modulo mod_joomladay2
helper.php

mod_joomladay2.php <?php defined('_JEXEC') or die('Restricted access');

require_once (dirname(__FILE__).DS.'helper.php'); <?php // no direct access global $mainframe; defined('_JEXEC') or die('Restricted access'); $count = modJoomlaDay2Helper::getUsuariosOnline(); class modJoomlaDay2Helper { function getUsuariosOnline() { require(JModuleHelper::getLayoutPath('mod_joomladay2')); $db =& JFactory::getDBO(); $result = array(); ?> $user_array = 0; $guest_array = 0; $query = 'SELECT guest, usertype, client_id' . ' FROM #__session' . ' WHERE client_id = 0'; $db->setQuery($query); $sessiones = $db->loadObjectList(); if ($db->getErrorNum()) { JError::raiseWarning( 500, $db->stderr() ); } if (count($sessiones)) { foreach ($sessiones as $session) { if ($session->guest == 1 ) { $usuarios_noregistrados ++; } if ($session->guest == 0) { $usuarios_registrados ++; } } } $result['usuarios'] = $usuarios_registrados; $result['invitados'] = $usuarios_noregistrados; return $result; } } ?>

20

Framework Joomla! 1.5

Joomla! Day 2009

Modulo mod_joomladay2
default.php <?php

defined('_JEXEC') or die('Restricted access'); if ($count['invitados'] != 0 || $count['usuarios'] != 0) { echo JText::_('Tenemos') . '&nbsp;'; if ($count['invitados'] == 1) { echo JText::_('1 invitado'); } else { if ($count['invitados'] > 1) { echo $count['invitados'] . JText::_('invitados'); } } if ($count['invitados'] != 0 && $count['usuarios'] != 0) { echo '&nbsp;' . JText::_('i') . '&nbsp;'; } if ($count['usuarios'] == 1) { echo JText::_('1 miembro'); } else { if ($count['usuarios'] > 1) { echo $count['usuarios'] . JText::_('mienbros'); } } echo '&nbsp;' . JText::_('en linea');

// no direct access

} ?>

21

Framework Joomla! 1.5

Joomla! Day 2009

Modulo mod_joomladay3. Manifiesto


<?xml version="1.0" encoding="utf-8"?> <install type="module" version="1.5.0"> <name>Joomla Day modulo 3</name> <author>Carles Serrats</author> <creationDate>Dic 2009</creationDate> <copyright>Copyright (C) 2005 - 2009 CESI Infomatica i Comunicacions. All rights reserved.</copyright <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license> <authorEmail>carless@cesigrup.com</authorEmail> <authorUrl>www.cesigrup.com</authorUrl> <version>1.5.0</version> <description>Modulo 1 de ejmplo para el Joomla Day 2009</description> <files> <filename module="mod_joomladay3">mod_joomladay3.php</filename> </files> <params> <param name="showmode" type="list" default="0" label="Display" description="Que desea mostrar"> <option value="0">Numero de Usuarios/Miembros</option> <option value="1">Nombre de los miembros</option> <option value="2">Ambos</option> </param> </params> <params group="advanced"> <param name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="PARAMMODULECLASSSUFFIX" /> </params> </install>

22

Framework Joomla! 1.5

Joomla! Day 2009

Modulo mod_joomladay3. Punto entrada


mod_joomladay3.php <?php

// no direct access

defined('_JEXEC') or die('Restricted access'); require_once (dirname(__FILE__).DS.'helper.php'); global $mainframe; $showmode = $params->get( 'showmode', 0 ); if ($showmode == 0 || $showmode == 2) { $count = modJoomlaDay3Helper::getUsuariosOnline(); } if ($showmode > 0) { helper.php $names = modJoomlaDay3Helper::getNombresUsuarios(); } function getNombresUsuarios() { require(JModuleHelper::getLayoutPath('mod_joomladay3')); ?> $db =& JFactory::getDBO(); $result = null; $query = 'SELECT DISTINCT a.username' . ' FROM #__session AS a' . ' WHERE client_id = 0' . ' AND a.guest = 0'; $db->setQuery($query); $result = $db->loadObjectList(); if ($db->getErrorNum()) { JError::raiseWarning( 500, $db->stderr() ); } return $result;

23

Framework Joomla! 1.5

Joomla! Day 2009

Modulo mod_joomladay3. Template


<?php

defined('_JEXEC') or die('Restricted access'); if ($showmode == 0 || $showmode == 2) { if ($count['invitados'] != 0 || $count['usuarios'] != 0) { echo JText::_('Tenemos') . '&nbsp;'; if ($count['invitados'] == 1) { echo JText::_('1 invitado'); } else { if ($count['invitados'] > 1) { echo $count['invitados'] . JText::_('invitados'); } } if ($count['invitados'] != 0 && $count['usuarios'] != 0) { echo '&nbsp;' . JText::_('i') . '&nbsp;'; } if ($count['usuarios'] == 1) { echo JText::_('1 miembro'); } else { if ($count['usuarios'] > 1) { echo $count['usuarios'] . JText::_('mienbros'); } } echo '&nbsp;' . JText::_('en linea'); } } if(($showmode > 0) && count($names)) { ?><ul><?php foreach($names as $name) { ?><li><strong><?php echo $name->username; ?></strong></li><?php } ?></ul><?php } ?>

// no direct access

24

Framework Joomla! 1.5

Joomla! Day 2009

Componentes

Introduccin a la creacin de componentes en joomla 1.5 con MVC

25

Framework Joomla! 1.5

Joomla! Day 2009

Componentes. MVC

Usuario Ver Accin

Vista Controlador

Modelo

El controlador: el controlador es el punto de entrada de la aplicacin, se mantiene a la escucha de todas las peticiones, ejecuta la lgica de la aplicacin, y muestra la vista apropiada para cada caso. El modelo: el modelo contiene todo el cdigo relacionado con el acceso a datos. Es importante que sea un cdigo lo ms genrico posible y se pueda reutilizar en otras situaciones y proyectos. Nunca incluiremos lgica en el modelo, solamente consultas a la base de datos y validaciones de entrada de datos. La vista: la vista contiene el cdigo que representar lo que nosotros veremos por pantalla, en este caso se trata de cdigo html.
Joomla! Day 2009

26

Framework Joomla! 1.5

Componentes. Estructura directorio. MVC


assets. Directorio donde alojaremos los archivos auxiliares de css, js, imgenes, etc.
css : Directorio para los css js : Directorio para los archivos de javascript img : Directorio para las imgenes

controllers. Directorio donde alojaremos los archivos para cada controlador. helper. Directorio donde alojaremos archivos de clase para la ayuda en el desarrollo de nuestro componentes, como por ejemplo router.php models: Directorio donde alojaremos los archivos para cada modelo. tables: Directorio donde alojaremos los archivos de definicin de las tablas de la base de datos views: Directorio donde alojaremos las subcarpetas para cada una de nuestras vistas.
27 Framework Joomla! 1.5

Joomla! Day 2009

Componentes. CRUD en Joomla con MVC

CRUD = Create Read Update Delete Mecanismo de gestin de datos.


El Framework nos facilita las acciones SQL para Insert, Update y Delete.

Utilizacin del MVC para la manipulacin de datos


JController : Dispara las acciones (edit, remove, save, cancel ) JModel : Prepara y ejecuta la gestin de datos. JTable : Recibe la solicitud de la manipulacin de datos y luego ejecuta el paso de las variables a la base de datos

Jcontroller

JModel

JTable

DB

28

Framework Joomla! 1.5

Joomla! Day 2009

Componentes.
function save() { $post = JRequest::get('post'); $model = $this->getModel('weblink'); if ($model->store($post)) { function $msg = JText::_( 'Weblink Saved' ); store($data) { } else { $row =& $this->getTable(); $msg = JText::_( 'Error Saving Weblink' ); if (!$row->bind($data)) { } $this->setError($this->_db->getErrorMsg()); $link = 'index.php?option=com_weblinks'; return false; $this->setRedirect($link, $msg); } } if (!$row->check()) { $this->setError($this->_db->getErrorMsg()); return false; class TableWeblink extends Jtable } { if (!$row->store()) { var $id = null; $this->setError($this->_db->getErrorMsg()); var $catid = null; return false; var $sid = null; } var $title = null; return true; var $alias = null; } var $url = null; var $description = null; function __construct(& $db) { parent::__construct('#__weblinks', 'id', $db); }

29

Framework Joomla! 1.5

Joomla! Day 2009

Preguntas y respuestas

Para preguntas y dudas http://www.joomlaspanish.org/foros/

30

Framework Joomla! 1.5

Joomla! Day 2009

Agradecimientos

31

Framework Joomla! 1.5

Joomla! Day 2009

También podría gustarte