Este tutorial explica cómo programar desde cero un plugin para Joomla 1.6 a través de un ejemplo, en concreto, se realizará un plugin de contenidos para Joomla 1.6
Para desarrollar un plugin será necesario al menos dos archivos: Un archivo XML y un archivo PHP. También se puede incluir un archivo INI para poder adaptar el plugin a diferentes idiomas
Archivo XML
El archivo XML debe tener el mismo nombre que el archivo PHP. Este archivo siempre comienza con la etiqueta XML y es importante definir que está escrito en el formato UTF-8. En el tipo definiremos que es un plugin y en el grupo definiremos que el plugin está dentro del grupo de Plugins de Contenido.
{codecitation}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install
PUBLIC "-//Joomla! 1.5//DTD plugin 1.0//EN" "http://www.joomla.org/xml/dtd/1.5/plugin-install.dtd">
To define that the plugin has to be a content plugin, add this line:
<source lang="xml"><install version="1.6" type="plugin" group="content">
{/codecitation}
Después de esto, añadiremos un poco de información acerca del autor:
{codecitation}
<name>Name of your Content Plugin</name>
<creationDate>Created Date</creationDate>
<author>Your name</author>
<authorEmail>Your e-mail address</authorEmail>
<authorUrl>Your website</authorUrl>
<copyright>Copyright</copyright>
<license>License, for example GNU/GPL</license>
<version>Version of the plugin</version>
<description>Description of the Plugin; showed with installation and when editing
the Plugin in the Plugin Manager</description>
{/codecitation}
Y ahora indicamos el archivo PHP para poder acceder al contenido del plugin. El nombre de este archivo debe ser el mismo que el nombre del XML. También se pueden añadir más archivos, por ejemplo una imagen. Sólo se tiene que añadir otra fila entre <files> y </files>.
{codecitation}
<files>
<filename plugin="nameofplugin">nameofplugin.php</filename>
</files>
{/codecitation}
Para adaptar el plugin a los diferentes idiomas, usaremos archivos de idioma INI.
{codecitation}
<languages>
<language tag="en-GB">en-GB.plg_content_nameofplugin.ini</language>
</languages>
{/codecitation}
Opcionalmente también, se puede añadir algunos parámetros para el plugin:
{codecitation}
<params>
<param name="paramname" type="typeofparameter" default="defaultsetting" label="title" description="description"/>
</params>
{/codecitation}
- name: El nombre del parámetro. Necesario a la hora de crear el archivo PHP.
- type: Se puede elegir entre varios tipos de parámetros.
- default: La configuración por defecto para este parámetro.
- label: El nombre que se mostrará de este parámetro.
- description : Descripción.
Y es importante no olvidar de poner fin al archivo XML con la siguiente etiqueta:
{codecitation}
</ Install >
{/codecitation}
Archivo PHP
Inicie el archivo PHP con el siguiente código en cualquier archivo PHP:
{codecitation}
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
{/codecitation}
Esto impide que se tenga acceso directo a este archivo PHP.
Después de esto, se debe importar el archivo general plugin de Joomla! :
{codecitation}
jimport( 'joomla.plugin.plugin' );
{/codecitation}
Para indicar que se está escribiendo un plugin, se añade el siguiente código.
{codecitation}
class plgContentNameofplugin extends JPlugin {
{/codecitation}
Ahora se escribirá un plugin (es importante tener en cuenta que será un ejemplo genérico)
{codecitation}
function plgContentNameofplugin ( y $ asunto , $ params )
{
parent:: __construct ( $ asunto , $ params ) ;
}
{/codecitation}
Se tiene que elegir en qué momento el plugin debería ser ejecutado. Se puede elegir entre los siguientes:
- onContentBeforeSave
- onContentAfterSave
- onContentPrepare
- onContentAfterTitle
- onContentBeforeDisplay
- onContentAfterDisplay
onContentBeforeSave
Los parámetros article y isNew deben contener lo siguiente:
- article: Una referencia al objeto JTableContent que se está guardando el cual contiene los datos del artículo.
- isNew: Un booleano que se establece en true si el contenido está a punto de ser creado.
{codecitation}
function onContentBeforeSave( &$article, $isNew )
{
global $mainframe;
//add your plugin codes here
return true;
}
{/codecitation}
onContentAfterSave
Los parámetros article y isNew deben contener lo siguiente:
- article: Una referencia al objeto JTableContent que se guardó, que contiene los datos del artículo.
- isNew: Un booleano que se establece en true si el contenido se ha creado.
{codecitation}
function onContentAfterSave( &$article, $isNew )
{
global $mainframe;
//add your plugin codes here
return true;
}
{/codecitation}
onContentPrepare
Los parámetros article, params y limitstart debe contener lo siguiente:
- article: Una referencia al artículo que se está representando por la vista.
- params: una referencia a una matriz asociativa de los parámetros pertinentes.
- limitstart: Un entero que determina la "página" del contenido que se va a generar.
{codecitation}
function onContentPrepare( &$article, &$params, $limitstart )
{
global $mainframe;
//add your plugin codes here
//no return value
}
{/codecitation}
onContentAfterTitle
Los parámetros article, params y limitstart debe contener lo siguiente:
- article: Una referencia al artículo que se está representando por la vista.
- params: una referencia a una matriz asociativa de los parámetros pertinentes.
- limitstart: Un entero que determina la "página" del contenido que se va a generar.
{codecitation}
function onContentAfterTitle( &$article, &$params, $limitstart )
{
global $mainframe;
//add your plugin codes here
return '';
//return a string value. Returned value from this event will be displayed in a placeholder.
// Most templates display this placeholder after the article separator.
}
{/codecitation}
onContentBeforeDisplay
Los parámetros article, params y limitstart debe contener lo siguiente:
- article: Una referencia al artículo que se está representando por la vista.
- params: una referencia a una matriz asociativa de los parámetros pertinentes.
- limitstart: Un entero que determina la "página" del contenido que se va a generar.
{codecitation}
function onContentBeforeDisplay( &$article, &$params, $limitstart )
{
global $mainframe;
//add your plugin codes here
return '';
//return a string value. Returned value from this event will be displayed in a placeholder.
// Most templates display this placeholder after the article separator.
}
{/codecitation}
onContentAfterDisplay
Los parámetros article, params y limitstart debe contener lo siguiente:
- article: Una referencia al artículo que se está representando por la vista.
- params: una referencia a una matriz asociativa de los parámetros pertinentes.
- limitstart: Un entero que determina la "página" del contenido que se va a generar.
{codecitation}
function onContentAfterDisplay( &$article, &$params, $limitstart )
{
global $mainframe;
//add your plugin codes here
return '';
//return a string value. Returned value from this event will be displayed in a placeholder.
// Most templates display this placeholder after the article separator.
}
{/codecitation}
Archivo INI
Para la adaptación del plugin a los diferentes idiomas se utilizan los archivos INI. Se puede agregar todo el texto que muestra el plugin en este archivo. Sólo hace falta añadir en el archivo PHP JText:: _ ('cadena').
El archivo INI se inicia con algo como esto:
{codecitation}
# $Id: en-GB.plg_content_nameofplugin.ini
# Joomla! Project
# Copyright (C) 2005 - 2007 Open Source Matters. All rights reserved.
# License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php
# Note : All ini files need to be saved as UTF-8 - No BOM
{/codecitation}
Por supuesto, también se podría añadir otra información, como el autor.
El contenido del archivo INI será de la siguiente forma:
{codecitation}
MODE=Mode
SELECT HOW THE EMAILS WILL BE DISPLAYED=Select how the e-mails will be displayed
NONLINKABLE TEXT=Nonlinkable text
AS LINKABLE MAILTO ADDRESS=As linkable mailto address
{/codecitation}
En Ayuda Joomla | Programar módulos de Joomla 1.6
En Ayuda Joomla | Programar componentes para Joomla 1.6
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
Comentarios
Si, sin problemas te va a funcionar. De todos modos deberías plantearte migrar tu web a Joomla 2.5