Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Herramientas de sistema
Herramientas
Eclipse
Coloracin del cdigo, auto-indentacin Compilacin de la sintaxis
J!Code
Projecto joomlaCode basado en Eclipse http://joomlacode.org/gf/project/jcode/
Conceptos de Joomla
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
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)
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';
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
MDULOS
10
Punto de entrada
mod_nombre.php
Directorio Template
tmpl\default.php Archivos auxiliares helper.php
11
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
15
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
Objectos Framework
JUser
Nos permite conocer datos del usuario
$user = &Jfactory::getUser(); $language = $user->getParam('language'); echo $user->name.", Tu lenguage idioma es : .$language;
17
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
Objectos Framework
19
Modulo mod_joomladay2
helper.php
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
Modulo mod_joomladay2
default.php <?php
defined('_JEXEC') or die('Restricted access'); if ($count['invitados'] != 0 || $count['usuarios'] != 0) { echo JText::_('Tenemos') . ' '; 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 ' ' . JText::_('i') . ' '; } if ($count['usuarios'] == 1) { echo JText::_('1 miembro'); } else { if ($count['usuarios'] > 1) { echo $count['usuarios'] . JText::_('mienbros'); } } echo ' ' . JText::_('en linea');
// no direct access
} ?>
21
22
// 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
defined('_JEXEC') or die('Restricted access'); if ($showmode == 0 || $showmode == 2) { if ($count['invitados'] != 0 || $count['usuarios'] != 0) { echo JText::_('Tenemos') . ' '; 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 ' ' . JText::_('i') . ' '; } if ($count['usuarios'] == 1) { echo JText::_('1 miembro'); } else { if ($count['usuarios'] > 1) { echo $count['usuarios'] . JText::_('mienbros'); } } echo ' ' . 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
Componentes
25
Componentes. MVC
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
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
Jcontroller
JModel
JTable
DB
28
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
Preguntas y respuestas
30
Agradecimientos
31