A menudo en Joomla es necesario crear nuestros propios módulos para poder mantener ordenados nuestro código y para poder parametrizar sus opciones. El procedimiento de programar módulos en Joomla 1.6 es muy parecido al de Joomla 1.5.
Este Tutorial Joomla! explicará como realizar desde cero un módulo para Joomla! 1.6 a través de un ejemplo. El ejemplo que proponemos es un módulo que contará con dos parámetros en el backend:
Mostrar: un checkbox (si o no) que mostrará o no el mensaje
Mensaje: un inputtext (texto a mostrar al cliente).
Estructura del componente
La estructura de un módulo en Joomla! 1.6 mantiene el mismo patrón que la de un módulo en Joomla! 1.5. Esta estructura es la siguiente:
- La carpeta mod_modulo contiene todos los archivos necesarios para el correcto funcionamiento de nuestro módulo.
- El archivo index.html controla que no se pueda acceder directamente a la carpeta.
- El archivo mod_modulo.xml contiene las instrucciones XML para su correcta instalación del módulo en el administrador.
- El archivo mod_modulo.php envía el archivo controlador (helper.php) hacia la vista (tmpl/default.php)
- El archivo helper.php es el controlador que contiene las clases y métodos para recuperar los datos o procesarlos.
- La carpeta tmpl contiene los archivos de la vista, es decir la manera como se visualizará del lado del cliente.
- El archivo index.html controla que no se pueda acceder directamente a la carpeta.
- El archivo default.php contiene la forma cómo se visualizaran los datos en el lado del cliente.
Los archivos en los que se basará el ejemplo son el mod_modulo.xml, mod_modulo.php, helper.php y default.php
Mod_modulo.xml
El archivo mod_modulo.xml es el encargado de definir las instrucciones para la instalación del módulo en el administrador. El contenido de este archivo se divide en tres partes:
- Descripción del módulo (nombre, autor, versión...).
- Archivos y carpetas que forman parte del módulo.
- Atributos que tendrá el módulo, tanto los básicos como los avanzados.
Todo esto se puede ver en el ejemplo:
{codecitation}
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="1.6.0" client="site">
<name>mod_modulo</name>
<author>WebActualizable.com</author>
<creationDate>Marzo 2011</creationDate>
<copyright>Copyright (C) 2008 - 2011 All rights reserved.</copyright>
<license>Leer licencia</license>
<authorEmail></authorEmail>
<authorUrl></authorUrl>
<version>1.6.0</version>
<description>Ejemplo</description>
<files>
<filename module="mod_modulo">mod_modulo.php</filename>
<folder>tmpl</folder>
<filename>helper.php</filename>
<filename>index.html</filename>
<filename>mod_modulo.xml</filename>
</files>
<config>
<fields name="params">
<fieldset name="basic">
<field name="mostrar" type="radio" default="0" label="Mostrar Mensaje" description="Activar o desactivar mostrar mensaje">
<option value="1">Si</option>
<option value="0">No</option>
</field>
<field name="mensaje" type="text" default="" label="Mensaje" description="Mensaje" />
</fieldset>
<fieldset name="advanced">
<field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" />
<field name="moduleclass_sfx" type="text" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" />
<field name="cache" type="list" default="1" label="COM_MODULES_FIELD_CACHING_LABEL" description="COM_MODULES_FIELD_CACHING_DESC">
<option value="1">JGLOBAL_USE_GLOBAL</option>
<option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
</field>
<field name="cache_time" type="text" default="900" label="COM_MODULES_FIELD_CACHE_TIME_LABEL" description="COM_MODULES_FIELD_CACHE_TIME_DESC" />
<field name="cachemode" type="hidden" default="static">
<option value="static"></option>
</field>
</fieldset>
</fields>
</config>
</extension>
{/codecitation}
Mod_modulo.php
El archivo mod_modulo.php es el que hace de intermediario entre las operaciones y la vista de usuario. Se puede ver su composición en el ejemplo:
{codecitation}
<?php
// para que no se pueda tener acceso por otro lado a menos que se llame correctamente el módulo
defined('_JEXEC') or die;
// Incluimos el helper.php
require_once dirname(__FILE__).DS.'helper.php';
//asignamos a una variable los parámetros recogidos
$list = modMensajeHelper::getList($params);
//le asignamos a una variable el sufijo de un clase, es otro parámetro del lado del administrador
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx'));
//se llama al archivo que contendrá finalmente la vista del módulo por el lado del cliente
require JModuleHelper::getLayoutPath('mod_modulo', $params->get('layout', 'default'));
?>
{/codecitation}
Helper.php
El archivo helper.php es el controlador que contiene las clases y métodos para recuperar los datos o procesarlos. Se puede ver su composición en el ejemplo:
{codecitation}
<?php
// para que no se pueda tener acceso por otro lado a menos que se llame correctamente el módulo
defined('_JEXEC') or die;
//creamos nuestra clase de ayuda para nuestro módulo
//por convención se antepone el prefijo mod en minúsculas y
// termina con Helper, podemos crear tantas clases como las que necesitamos para nuestra labor.
class modMensajeHelper
{
//creamos nuestro método, también por convención el prefijo get y acontinuación el nombre del método
//aqui joomla 1.6 mejora la llamada a los métodos definiéndolos estáticamente, para no crear ambieguedad al momento de llamarlos
static function getList($params)
{
//Recogemos los parámetros de nuestro módulo puestos desde el lado del administrador
$mostrar= $params->get('mostrar');
//comprobamos si está marcado la opcion mostrar el mensaje
if ($mostrar==1) {
//si está marcado entonces, asignamos a nuestra variable el dato recodigo por el método get
$mensaje= $params->get('mensaje'); }
//De lo contrario le asignamos vacío.
else { $mensaje ="" ; }
//Se devuelve la variable que contiene el mensaje
return $mensaje;
}
}
{/codecitation}
Default.php
En el archivo default.php se define la forma cómo se visualizaran los datos en el lado del cliente. Se puede ver su composición en el ejemplo:
{codecitation}
<?php
// para que no se pueda tener acceso por otro lado a menos que se llame correctamente el módulo
defined('_JEXEC') or die;
?>
<!--se le se está asginado un sufijo si es que en el parámetro del lado del cliente se ingreso una.-->
<dl class="mensaje-module<?php echo $moduleclass_sfx ?>">
<?php //echo $list." proba" ;
//Se muestra el parámetro recogido por nuesro archivo helper.
echo $list ;
?>
{/codecitation}
Sobre el autor
Xavier Pacheco es Ingeniero Técnico en Informática de Sistemas. Forma parte del equipo de WebActualizable (www.webactualizable.com), empresa especializada en el desarrollo de proyectos sobre Joomla