Programación
Desarrollo de componentes para Joomla 1.6. Backend Básico
En este tutorial vas a aprender a crear el backend básico de un componente de Joomla 1.6 programando directamente con el Framework de Joomla 1.6 y el lenguaje de programación PHP. Es un ejemplo sencillo para desarrollar el clásico programa "Hola Mundo".
Backend básico
Lo primero que haremos será definir el punto de entrada del componente.
Para ello cree un archivo administrator / components / com_hello / helloworld.php que contiene:
administrator / components / com_hello / helloworld.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import joomla controller library
jimport('joomla.application.component.controller');
// Get an instance of the controller prefixed by HelloWorld
$controller = JController::getInstance('HelloWorld');
// Perform the Request task
$controller->execute(JRequest::getCmd('task'));
// Redirect if set by the controller
$controller->redirect();
?>
Crear el controlador general
El punto de entrada creará una instancia del controlador que hemos definido en la classe HelloWorld. Entoces creamos un controlador básico y para ello creamos el archivo administrator / components / com_hello / controller.php que contiene:
administrator / components / com_hello / controller.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla controller library
jimport('joomla.application.component.controller');
/**
* General Controller of HelloWorld component
*/
class HelloWorldController extends JController{
/*
*
* display task
*
* @return void */
function display($cachable = false) {
// set default view if not set
JRequest::setVar('view', JRequest::getCmd('view', 'HelloWorlds'));
// call parent behavior
parent::display($cachable);
}
}
Este controlador mostrará la vista HelloWorlds por defecto
Crear la vista
Creamos el archivo administrator / components / com_hello / views / helloworlds / view.html.php que contiene:
administrator / components / com_hello / views / helloworlds / view.html.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla view library
jimport('joomla.application.component.view');
/**
* HelloWorlds View
*/
class HelloWorldViewHelloWorlds extends JView{
/*
*
* HelloWorlds view display method
* @return void */
function display($tpl = null) {
// Get data from the model
$items = $this->get('Items');
$pagination = $this->get('Pagination');
// Check for errors.
if (count($errors = $this->get('Errors'))) {
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// Assign data to the view
$this->items = $items;
$this->pagination = $pagination;
// Display the template
parent::display($tpl);
}
}
En Joomla, las vistas se muestran usando layouts. Creamos el archivo administrator / components / helloworlds / tmpl / default.php que contiene:
administrator / components / helloworlds / tmpl / default.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');
// load tooltip behavior
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld'); ?>" method="post" name="adminForm">
<table class="adminlist">
<thead><?php echo $this->loadTemplate('head');?></thead>
<tfoot><?php echo $this->loadTemplate('foot');?></tfoot>
<tbody><?php echo $this->loadTemplate('body');?></tbody>
</table>
</form>
Este layout llamará a distintos sub-layouts (head, foot y body). Estos sub-layouts los definiremos con el nombre de default_ seguido del nombre del sub-layout.
Creamos el archivo administrator / components / com_hello / helloworlds / tmpl / default_head.php que contiene:
administrator / components / com_hello / helloworlds / tmpl / default_head.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');
?>
<tr>
<th width="5">
<?php echo JText::_('COM_HELLOWORLD_HELLOWORLD_HEADING_ID'); ?>
</th>
<th width="20">
<input type="checkbox" name="toggle" value="" onclick="checkAll(<?php echo count($this->items); ?>);" />
</th>
<th>
<?php echo JText::_('COM_HELLOWORLD_HELLOWORLD_HEADING_GREETING'); ?>
</th>
</tr>
checkAll es una función de javascript definida en el core de Joomla que marcará todos los checkboxes con un sólo click.
Creamos un archivo asministrator / components / com_hello / helloworlds / tmpl / default_body.php que contiene:
asministrator / components / com_hello / helloworlds / tmpl / default_body.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');
?>
<?php foreach($this->items as $i => $item): ?>
<tr class="row<?php echo $i % 2; ?>">
<td> <?php echo $item->id; ?> </td>
<td> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td>
<td> <?php echo $item->greeting; ?> </td>
</tr>
<?php endforeach; ?>
JHtml::_ es una función helper que mostrará el HTML. En este caso mostrará un checkbox por cada elemento.
Creamos un archivo asministrator / components / com_hello / helloworlds / tmpl / default_foot.php que contiene:
asministrator / components / com_hello / helloworlds / tmpl / default_foot.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');
?>
<tr>
<td colspan="3">
<?php echo $this->pagination->getListFooter(); ?>
</td>
</tr>
JPagination es una clase de Joomla para generar el objeto paginador con el que podremos navegar por las diferentes páginas del listado.
Crear el modelo
Como hemos visto en la clase anterior, la vista hace una llamada al modelo para recoger los datos. En Joomla! 1.6 hay una clase para gestionar la información de la base de datos: JModelList. Esta clase tiene un metodo llamado getListQuery, que nos devolvera un listado de objetos, es decir, un listado con la información que en la vista hemos pedido.
Además tiene varios estados:
-
list.start: para determinar el desplazamiento de la lista.
-
list.limit: para determinar la medida de la lista, es decir, el número de elementos de la lista.
Los métodos getItems y getPagination están definidos en la clase JModelList.
{} administrator / components / com_hello / models / helloworlds.php {}
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import the Joomla modellist library
jimport('joomla.application.component.modellist');
/*
*
* HelloWorldList Model
*/
class HelloWorldModelHelloWorlds extends JModelList{
/*
*
* Method to build an SQL query to load the list data.
*
* @return string An SQL query */
protected function getListQuery() {
// Create a new query object.
$db = JFactory::getDBO();
$query = $db->getQuery(true);
// Select some fields
$query->select('id,greeting');
// From the hello table
$query->from('#__helloworld');
return $query;
}
}
Añadir la barra de herramientas
En Joomla 1.6!, el administrador interacciona con los componentes utilizando la barra de herramientas. En el archivo administrator / components / com_hello / views / helloworlds / view.html.php añadimos este contenido. Esto añadira una barra de herramientas básica y el título del componente.
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla view library
jimport('joomla.application.component.view');
/**
* HelloWorlds View
*/
class HelloWorldViewHelloWorlds extends JView{
/**
* HelloWorlds view display method
* @return void
*/
function display($tpl = null) {
// Get data from the model
$items = $this->get('Items');
$pagination = $this->get('Pagination');
// Check for errors.
if (count($errors = $this->get('Errors'))) {
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// Assign data to the view
$this->items = $items;
$this->pagination = $pagination;
// Set the toolbar
$this->addToolBar();
// Display the template
parent::display($tpl);
}
/*
*
* Setting the toolbar
*/
protected function addToolBar() { JToolBarHelper::title(JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLDS')); JToolBarHelper::deleteListX('', 'helloworlds.delete');
JToolBarHelper::editListX('helloworld.edit');
JToolBarHelper::addNewX('helloworld.add');
}
}
Podrás encontrar las diferentes acciones del backend en el archivo administrator / includes / toolbar.php en tu instalación de Joomla! 1.6
Añadimos también las líneas siguientes en administrator / componentes / com_hello / views / helloworlds / tmpl / default.php
administrator / components / com_hello / views / helloworlds / tmpl / default.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');
// load tooltip behavior
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld'); ?>" method="post" name="adminForm">
<table class="adminlist">
<thead><?php echo $this->loadTemplate('head');?></thead>
<tfoot><?php echo $this->loadTemplate('foot');?></tfoot>
<tbody><?php echo $this->loadTemplate('body');?></tbody>
</table>
<div>
<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Añadir los controladores específicos
Añadiremos tres acciones.
- Borrar un elemento
- Editar un elemento
- Añadir un elemento
Para ello crearemos tareas en el controlador específico para después poder llamarlas de la manera controller.tarea
Crearemos dos nuevos controladores en _administrator / components / com_hello / controllers /
administrator / components / com_hello / controllers / helloworlds.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla controlleradmin library
jimport('joomla.application.component.controlleradmin');
/*
*
* HelloWorlds Controller
*/
class HelloWorldControllerHelloWorlds extends JControllerAdmin{
/*
*
* Proxy for getModel.
* @since 1.6
*/
public function getModel($name = 'HelloWorld', $prefix = 'HelloWorldModel') {
$model = parent::getModel($name, $prefix, array('ignore_request' => true));
return $model;
}
}
administrator / components / com_hello / controllers / helloworld.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla controllerform library
jimport('joomla.application.component.controllerform');
/**
* HelloWorld Controller
*/
class HelloWorldControllerHelloWorld extends JControllerForm
{
}
Creamos la vista para editar los elementos
Creamos un archivo en administrator / components / com_hello / views / helloworld / view.html.php
administrator / components / com_hello / views / helloworld / view.html.php
<php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla view library
jimport('joomla.application.component.view');
/**
* HelloWorld View
*/
class HelloWorldViewHelloWorld extends JView
{
/**
* display method of Hello view
* @return void
*/
public function display($tpl = null)
{
// get the Data
$form = $this->get('Form');
$item = $this->get('Item');
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('
', $errors));
return false;
}
// Assign the Data
$this->form = $form;
$this->item = $item;
// Set the toolbar
$this->addToolBar();
// Display the template
parent::display($tpl);
}
/**
* Setting the toolbar
*/
protected function addToolBar()
{
JRequest::setVar('hidemainmenu', true);
$isNew = ($this->item->id == 0);
JToolBarHelper::title($isNew ? JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLD_NEW') : JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLD_EDIT'));
JToolBarHelper::save('helloworld.save');
JToolBarHelper::cancel('helloworld.cancel', $isNew ? 'JTOOLBAR_CANCEL' : 'JTOOLBAR_CLOSE');
}
}
Esta vista mostrará el layaut por defecto en caso que no le digamos lo contrario, por lo tanto, crearemos un archivo en <em>administrator / components / com_hello / views / helloworld / tmpl / edit.php</em>
<em><strong>administrator / components / com_hello / views / helloworld / tmpl / edit.php</strong></em>
<!--?php</p-->
<?php
// No direct access
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="helloworld-form">
<fieldset class="adminform">
<legend><?php echo JText::_( 'COM_HELLOWORLD_HELLOWORLD_DETAILS' ); ?></legend>
<ul class="adminformlist">
<?php foreach($this->form->getFieldset() as $field): ?>
<li><?php echo $field->label;echo $field->input;?></li>
<?php endforeach; ?>
</ul>
</fieldset>
<div>
<input type="hidden" name="task" value="helloworld.edit" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Añadimos el modelo que obtendrá el elemento
Creamos un archivo en administrator / ccomponents / com_hello / models / helloworld.php
administrator / ccomponents / com_hello / models / helloworld.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla modelform library
jimport('joomla.application.component.modeladmin');
/**
* HelloWorld Model
*/
class HelloWorldModelHelloWorld extends JModelAdmin
{
/**
* Returns a reference to the a Table object, always creating it.
*
* @param type The table type to instantiate
* @param string A prefix for the table class name. Optional.
* @param array Configuration array for model. Optional.
* @return JTable A database object
* @since 1.6
*/
public function getTable($type = 'HelloWorld', $prefix = 'HelloWorldTable', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}
/**
* Method to get the record form.
*
* @param array $data Data for the form.
* @param boolean $loadData True if the form is to load its own data (default case), false if not.
* @return mixed A JForm object on success, false on failure
* @since 1.6
*/
public function getForm($data = array(), $loadData = true)
{
// Get the form.
$form = $this->loadForm('com_helloworld.helloworld', 'helloworld', array('control' => 'jform', 'load_data' => $loadData));
if (empty($form))
{
return false;
}
return $form;
}
/**
* Method to get the data that should be injected in the form.
*
* @return mixed The data for the form.
* @since 1.6
*/
protected function loadFormData()
{
// Check the session for previously entered form data.
$data = JFactory::getApplication()->getUserState('com_helloworld.edit.helloworld.data', array());
if (empty($data))
{
$data = $this->getItem();
}
return $data;
}
}
Además tendremos que crear un archivo XML que nos permitira definir los diferentes campos del formulario. Esto lo a incorporado el nuevo Joomla! 1.6.
Creamos un archivo en administrator / components / com_hello / models / form / helloworld.xml
administrator / components / com_hello / models / form / helloworld.xml
<?xml version="1.0" encoding="utf-8"?> <form> <fieldset> <field name="id" type="hidden" /> <field name="greeting" type="text" label="COM_HELLOWORLD_HELLOWORLD_GREETING_LABEL" description="COM_HELLOWORLD_HELLOWORLD_GREETING_DESC" size="40" class="inputbox" default="" /> </fieldset> </form>
Además en cada carpeta del componente se suele introducir un archivo index.html vació que se utiliza para evitar que el servidor web pueda listar los archivos del directorio. Por lo que la estructura final del componente sería la siguiente:
Estructura final del componente
• administrator/components/com_hello/index.html
• administrator/components/com_hello/helloworld.php
• administrator/components/com_hello/controller.php
• administrator/components/com_hello/models/index.html
• administrator/components/com_hello/models/forms/index.html
• administrator/components/com_hello/models/forms/helloworld.xml
• administrator/components/com_hello/models/helloworld.php
• administrator/components/com_hello/models/helloworlds.php
• administrator/components/com_hello/views/index.html
• administrator/components/com_hello/views/helloworlds/index.html
• administrator/components/com_hello/views/helloworlds/view.html.php
• administrator/components/com_hello/views/helloworlds/tmpl/index.html
• administrator/components/com_hello/views/helloworlds/tmpl/default.php
• administrator/components/com_hello/views/helloworlds/tmpl/default_head.php
• administrator/components/com_hello/views/helloworlds/tmpl/default_body.php
• administrator/components/com_hello/views/helloworlds/tmpl/default_foot.php
• administrator/components/com_hello/views/helloworld/index.html
• administrator/components/com_hello/views/helloworld/view.html.php
• administrator/components/com_hello/views/helloworld/tmpl/index.html
• administrator/components/com_hello/views/helloworld/tmpl/edit.php
• administrator/components/com_hello/tables/index.html
• administrator/components/com_hello/tables/helloworld.php
• administrator/components/com_hello/controllers/index.html
• administrator/components/com_hello/controllers/helloworld.php
• administrator/components/com_hello/controllers/helloworlds.php
En éste enlace puedes descargar una versión más compleja de este componente que cuanta con la parte de backend y de frontend.
Sobre el autor
Jordi Vila es Ingeniero Técnico en Informática de Gestión. Forma parte del equipo de Web Actualizable (www.webactualizable.com), empresa especializada en el desarrollo de proyectos sobre Joomla.
- Joomla 2.5.4 - Actualización de seguridad
- Liberado Joomla 1.5.26
- ¿Tendrá Joomla 1.5 soporte hasta Septiembre de 2012?
- Gestión de extensiones en Joomla 2.5
- Plantillas en Joomla 2.5
- Personalizando los botones en las vistas de categorías de Virtuemart
- Obtener los parámetros de modulos, plugins, componentes y plantillas en Joomla 1.7
- JFile: Leyendo ficheros con el framework de Joomla
- Editando los archivos de Joomla con notepad++
- Programación de extensiones en Joomla avanzada
- Esquema de la base de datos de Joomla 1.6
- Cómo cambiar la cantidad de paginas mostradas en la paginación de Joomla
- Eliminar el meta tag Generator
- Bloquear el uso de tp=1
- Pasar parámetros a un wrapper en Joomla
Artículos Recientes
- Migración de Joomla 1.5 a Joomla 2.5
- Joomla 2.5.4 - Actualización de seguridad
- El nuevo iPad es Joomlero
- Liberado Joomla 1.5.26
- Joomla 3.0: así será su interfaz
- ¿Tendrá Joomla 1.5 soporte hasta Septiembre de 2012?
- Gestión de extensiones en Joomla 2.5
- Plantillas en Joomla 2.5
- Plugins en Joomla 2.5
- Modulos en Joomla 2.5
Más Leidos
- Plantillas gratuitas para Joomla
- Contador de visitas para Joomla
- Plantillas tipo revista o periódico
- Insertar pdf en Joomla
- Como conocer la posición de un módulo en una plantilla
- Insertar código HTML en Joomla
- Tutorial de JoomlaPack - Realizar backups de Joomla (Parte 1)
- Galería de Imágenes para Joomla: Phoca Gallery
- Plantillas gratis para Joomla 1.7
- Crear mapa web o sitemap para Joomla con XMAP
Comentarios recientes
En el foro...
Artículos relacionados
- ¿Qué es AyudaJoomla?
- ¿Qué es Joomla?
- Requisitos de Joomla 1.5
- Legacy Mode en Joomla 1.5
- Backup de un sitio web Joomla
- Virtuemart - Tienda Electrónica para Joomla
- Formación gratuita para Joomla
- Permite a tus usuarios elegir su plantilla favorita con Template Chooser
- Como conocer la posición de un módulo en una plantilla
- Joomla 1.6: los bloggers opinan
- Premios Joomleros 2009
- Esquema de la base de datos de Joomla 1.5
- Pasar parámetros a un wrapper en Joomla
- Insertar pdf en Joomla
- Torneos deportivos con JoomLeague
- Zaragoza News Template 1.0
- Eventos Joomla para Abril 2009
- Instalar y desinstalar extensiones, plantillas e idiomas en Joomla
- Joomla presenta Community Showcase
- Contador de visitas para Joomla
- eXtplorer. Un completo explorador de archivos para Joomla
- Convertir templates de Joomla 1.0 a Joomla 1.5
- Joomla loves Twitter!
- AJ!Toolbar. Barra de herramientas para tu navegador web
- Crea tu propio template para Joomla!
- Joomla Esenciales desde Joomla Argentina
- Template con estilo: Epic
- Eventos Joomla para Mayo 2009
- Plantillas gratuitas para Joomla
- Eventos Joomla para Junio 2009
- Joomla 1.6 Alpha saldrá el próximo 22 de Junio
- Joomla llega a los 10 millones de descargas
- Preview del gestor de menús de Joomla 1.6
- Vulnerabilidad crítica detectada en Community Builder 1.0 y 1.1
- Requisitos técnicos para Joomla 1.6 Alpha
- com_helloworld para Joomla 1.6
- Eventos Joomla para Julio 2009
- Nube de Tags para Joomla
- Favicon animado para tu Joomla
- Y la mejor extensión para Joomla es....
- Joomla 1.6 Beta 1 cuenta atrás...
- Bluestork - Nueva plantilla de administración para Joomla 1.6
- 21 Set de iconos útiles para diseñadores y desarrolladores Joomla
- Queda poco para el lanzamiento de Joomla Esenciales 2
- Nomina a Joomla para la cuarta edición de Annual Open Source CMS Awards
- AdminPraise Lite - La plantilla de administración más rápida
- Ahorra espacio con Tabs & Slides para Joomla
- ¿Donde esta la Beta de Joomla 1.6?
- Todo que tienes que saber sobre Joomla
- AyudaJoomla se apunta a la tarifa plana de Redcoruna
- Plugin para Wibiya toolbar
- Eventos Joomla para Octubre 2009
- Ayuda Joomla cumple su primer año!
- Joomla 1.5 Template Design
- Menús desplegables en Joomla con JE Smooth Navigation Menu
- Plantilla gratis para VirtueMart - VWorks Simple Box
- Joomla 1.6 Alpha 2 ya esta disponible
- Eventos Joomla para Noviembre y Diciembre de 2009
- cbNews Module - Un slideshow gratuito para artículos en la portada.
- Eventos Joomla para Febrero de 2010
- Eventos Joomla para Enero de 2010
- ¿Cómo cambiar la hora en Joomla?
- ¿Cómo hacer un análisis SEO de vuestro sitio web Joomla?
- Cambiar el editor de contenidos de Joomla
- Joomla!Day Mallorca 2010
- Adelanto de Joomla 1.5 Multimedia
- Ampliado el plazo de propuestas para Joomla!Day Mallorca 2010
- Gestor de proyectos para Joomla: ProjectFork
- Adelanto de Joomla 1.5 Beginner's Guide
- Hotel Guide - Directorio temático para hoteles en Joomla
- Incluir audio en Joomla con JosDewplayer
- Inserta videos de youtube en los artículos de Joomla con Youtube Embedder
- Mejora la usabilidad del buscador de Joomla con RokAjaxSearch
- Ya puedes ver Google Analytics desde la administración de Joomla con AG Google Analytics
- Se acerca Joomla 1.6 Beta
- Plugin para Image Space Media
- Acelera tu Joomla (Parte 2) - Caché en los módulos de Joomla
- Acelera tu Joomla (Parte 1) - Uso de la función de caché
- Galería de Imágenes para Joomla: Phoca Gallery
- Liberado Joomla 1.6 Beta 1
- Estilos de plantilla en Joomla 1.6
- Joomla 1.6 Beta 3
- Videotutoriales en Nosolocodigo y WebEmpresa
- Joomla 1.6 Beta 4
- Joomla 1.6 Beta 5
- Mastering Joomla! 1.5 Extension and Framework Development
- Esquema de la base de datos de Joomla 1.6
- Publicidad
- Liberado Joomla 1.6 Beta 6
- ¿Qué necesitas saber sobre Joomla 1.6? Niveles de control de accesos en la ACL de Joomla 1.6
- Cómo cambiar la cantidad de paginas mostradas en la paginación de Joomla
- Liberado Joomla 1.6 Beta 7
- Próximas reviews de libros en AyudaJoomla
- Quinta edición de Annual Open Source CMS Awards
- Liberado Joomla 1.6 Beta 8
- Insertar iconos de redes sociales y rss en modulos personalizados de Joomla
- Instalar Joomla en Linux (Ubuntu) con LAMP
- Liberado Joomla 1.6 Beta 9
- Liberado Joomla 1.6 Beta 10
- Plantillas Kunena gratis
- Joomla 1.5! Accesibility
- Hackear Joomla! Admin Password Reset en versiones anteriores a la 1.5.6
- Liberado Joomla 1.6 Beta 12
- Liberado Joomla 1.6 Beta 11
- Joomla 1.5.21 [senu takaa ama wepulai] - Actualización de seguridad
- Adelanto ChronoForms 1.3 for Joomla! Site Cookbook
- Molajo: una distribución basada en Joomla 1.6.
- Como usar el AcyMailing para enviar boletines de notícias
- Ayuda Joomla asistirá al Joomla Day Valencia 2010
- Representación esquemática de una plantilla. Paso previo antes de diseñar una web
- Cómo usar el JCal Pro para gestionar eventos
- Realizar copia de seguridad de Joomla con Akeeba Backup
- Liberado Joomla 1.6 Beta 13
- Ganarse la vida con Joomla
- Liberado Joomla 1.5.22 [senu takaa ama woi] - Actualización de seguridad
- Formulario de contacto con aiContactSafe
- Crear un blog con Joomla
- ChronoForms 1.3 for Joomla! Site Cookbook
- Adjuntar archivos en un artículo mediante el componente Attachments
- Liberado Joomla 1.6 Beta 14
- Elección del gestor de descargas. Montar una intranet con Joomla II
- Google adsense en Joomla
- Open Source Training - Análisis de casos de éxito Joomla
- Mejorar la seguridad con Admin Tools
- Liberado Joomla 1.6 Beta 15
- Encuestas en Joomla con Apoll
- Migrar Joomla de un servidor local a un servidor de Internet
- Joomla 1.6 RC1 ya disponible
- Presentaciones de Slideshare en Joomla
- Comparte tu opinión, comparte Joomla! 1.6, ¡envía tu vídeo!
- Chat en Joomla con JPFChat
- Joomla 1.6.0 GA - Versión estable
- 10 extensiones joomla 1.6
- Migrar Joomla 1.5 a Joomla 1.6
- AdminPraise Lite - Plantilla de administración para Joomla 1.6
- Paquetes de idioma español para Joomla 1.6
- Fiesta Drupal 7 en Málaga el 14 de Enero
- 2 Plantillas Joomla 1.6 gratis
- Álbumes de música con Music Manager
- Migración de Joomla! 1.5 a Joomla! 1.6 con jUpgrade
- Template de Joomla 1.6 ButterflyMeadow
- Instalar Joomla! 1.6 en Windows con XAMPP
- Galerías de imágenes en Joomla 1.6 con Ozio Gallery
- ¿Lo sabes todo sobre Joomla?
- Mapas de Google en Joomla 1.6 con Phoca Maps
- RSFirewall - Aumenta la seguridad de Joomla
- Convertir Joomla en una página de documentación con Phoca Documentation
- Cómo incrustar vídeos de YouTube en un artículo (sin o con plugin)
- Tutorial Virtuemart - Crear una tienda online en Joomla
- Joomla Upgrade: ¿Qué será de mi web?
- Joomla 1.6 ó Joomla 1.5 ¿Cual uso?
- Crear una red social con Community Builder
- Anuncios clasificados con Ads Manager
- Review del libro Joomla 1.5 Top Extensions Cookbook
- Sorteamos un libro sobre Joomla de la editorial Packt
- Flash en artículos y módulos Joomla 1.6
- Aprende a usar Joomla 1.6
- Descargas en Joomla 1.6 con Phoca Download
- Actualizar Joomla 1.6. Guía paso a paso
- Sistema de puntuación en Joomla 1.6 con Alpha User Points
- Tutorial de Sobi2 - Creación de un directorio de contenidos
- Joomla 1.6: las comunidades opinan
- K2 estará disponible para Joomla 1.6
- Mejoras SEO en Joomla 1.6
- Extensiones SEO para Joomla! 1.6
- Posiciones de los módulos en Joomla 1.6 con tp=1
- Multilenguaje en Joomla 1.6
- ¿Cómo puedo saber que un sitio web esta hecho con Joomla?
- Joomla 1.5.23 ya está aquí. Actualización de seguridad
- Sistemas de menú para Joomla 1.6
- 10 templates de Joomla 1.6 gratis
- Joomla 1.6: las empresas opinan
- Google Calendar en Joomla 1.6 con Gcalendar
- SQL Injection sobre Joomla 1.6.0
- Creación de plugins en Joomla 1.6
- Programación de extensiones en Joomla avanzada
- Formularios en Joomla 1.6 con ChronoForms
- Joomla 1.6 First Look [Review]
- Editando los archivos de Joomla con notepad++
- Sigue el J and Beyond 2011 por twitter
- Añadir código en Joomla 1.6 con Jumi
- Autenticación en Joomla 1.6
- Instalar plantillas en Joomla 1.6
- Seguridad en Joomla 1.6
- Problemas al copiar texto de Microsoft Word en Joomla
- Help Desk en Joomla 1.6 con RsTickets!Pro
- Creación de plantillas para Joomla 1.6
- Mandar emails a usuarios en Joomla 1.6
- Tutorial CiviCRM: CRM para Joomla 1.6
- Campos adicionales en el registro de usuarios de Joomla 1.6
- JFile: Leyendo ficheros con el framework de Joomla
- Vídeos en Joomla 1.6 con AllVideosReMix
- Plantillas para Joomla 1.7
- Joomla 1.6 Guía para principiantes. Libro Joomla gratuito
- Integrar Joomla y Moodle empleando el componente Joomdle
- Liberado Joomla 1.6.4
- Tutorial de K2 en Joomla 1.6
- Joomla!Night Chile 2011. ¡Síguela online!
- Windows Live Writer en Joomla 1.6 con MovableyType XMLRPC
- Partilhator - Social Bookmarking
- Liberado Joomla 1.6.5
- Tutorial de JV Framework
- Que hacer después de que tu sitio Joomla haya sido Hackeado. (recuperar el control y medidas a tomar
- Ofertas de empleo en Joomla 1.6 con Job Board
- EducaJoomla: Crea tu tienda online con Joomla! y Virtuemart
- BBJSocial - Acceso a redes sociales Joomla desde Blackberry
- Liberado Joomla 1.7.0
- Gestión de proyectos en Joomla 1.6 con Projectfork
- Joomla! Virtuemart 1.1 Theme and Template Design
- Nueva estrategia de desarrollo de Joomla
- Plantillas gratis para Joomla 1.7
- Restringir el acceso a los contenidos en Joomla 1.6
- Creación de plantillas para Joomla 1.6 y 1.7
- JoomlaScan - Analizando vulnerabilidades de seguridad en sitios Joomla
- Termina el ciclo de vida de Joomla 1.6
- Obtener los parámetros de modulos, plugins, componentes y plantillas en Joomla 1.7
- Instalar Joomla con Web Platform Installer
- Busca en el JED desde tu Firefox
- Instalar y Configurar Zoo en Joomla 1.7
- Creación de tiendas online multilenguaje usando Virtuemart y JoomFish
- Pestañas, Slides y páginas utilizando la paginación de Joomla 1.7
- ¡6 años junto a Joomla!
- Google +1 en Joomla
- Do the Workshop. Cursos Joomla en Mallorca
- Manual de Virtuemart creado por Web Empresa
- ¡Ayuda Joomla cumple 3 años!
- Roller Text - Una forma diferente de mostrar tus contenidos
- Review del libro Joomla Explained
- Insertar código php, html, css y javascript en Joomla 1.7 con Sourcerer
- 5 módulos Slideshows para Joomla 1.7
- El Joomla!Day Spain 2011 será en Zaragoza
- ModuList: una forma diferente de presentar tus artículos en una tabla!
- Tienda online en Joomla 1.7 con JoomShopping. Empieza a vender (2/3)
- ¡Por fin! K2 disponible para Joomla 1.7
- ¿Cómo crear un Joomla User Group?
- Cupón de descuento para el Joomla!Day Zaragoza 2011
- Cupón de descuento para el Joomla!Day Zaragoza 2011
- ¿Cómo funcionan los menús en Joomla 1.7?
- El Joomla!Day Spain 2011 será en Zaragoza
- Tienda online en Joomla 1.7 con JoomShopping. Módulos, plugins y addons (3/3)
- Trabajando con Joomla!
- Tienda online en Joomla 1.7 con JoomShopping. Configuración del componente (1/3)
- Histórico Social del Joomla Day Zaragoza 2011
- Insertar galerías de imágenes en tus artículos Joomla
- Comparativa de seguridad entre Wordpress, Drupal y Joomla
- ACL Manager : Simplificando la gestión de permisos en Joomla 1.7
- Migrar páginas HTML a Joomla 1.7 con HTMl2Articles
- Pasarela de pago Pasat 4b para pagar con tarjetas de crédito en Virtuemart
- Manual de joomla 2.5 - Guía de Joomla 2.5 para principiantes
- Paso 2: Instalación Joomla 2.5
- Paso 3: Traducción Joomla 2.5 a español
- ¿Cuántas versiones de Joomla existen?
- Modulos en Joomla 2.5
- Instalar Joomla 2.5 en Windows: Instalación de WAMP
- Instalar Joomla 2.5 en Linux: Instalación de LAMP
- Instalar Joomla 2.5 en Mac OS: Instalación de MAMP
- Configurando Joomla 2.5
- Familiarizándote con Joomla 2.5
- Términos de Joomla 2.5
- El Backend de Joomla 2.5
- Liberado Joomla 2.5.2
- Joomla en números - Infografía
- Plugins en Joomla 2.5
- Administrando contenidos en Joomla 2.5
- Joomla! and Beyond 2012
- Gestión de extensiones en Joomla 2.5
- ¿Tendrá Joomla 1.5 soporte hasta Septiembre de 2012?











