Tutorial: creando plugins con Joomla! 1.5

Índice de la serie: desarrollo de extensiones con Joomla

  1. Hacer componentes en Joomla!
    1. Patrón MVC
    2. Concepto de Front-End y Back-End
    3. Primer componente MVC simple con Joomla!
    4. Segundo componente, Back-End y acceso a datos.
    5. Crear el xml del componente de joomla y generar instalable.
  2. Hacer Módulos para Joomla!
  3. Hacer Plugins para Joomla!

Ya hemos visto como hacer componentes y como hacer módulos en Joomla! 1.5 y hemos visto que no es nada complicado, y simplemente hay que entender la mecánica de trabajo .

Lo ultimo que nos queda son los plugins, con ellos podremos modificar el comportamiento estándar de Joomla!, pudiendo interceptar ciertos eventos prefijados para ejecutar nuestro código antes o después del evento.

Los plugins pueden llegar a ser muy utiles y potentes.

Por ejemplo, se puede interceptar el evento de publicar un articulo y hacer que joomla imprima un mensaje personalizado antes de cada articulo, o lo que a ti se te ocurra, simplemente tienes que tener a mano la lista de eventos (hooks) definidos y tu imaginación para hacer con joomla! lo que quieras.

Existen varios tipos de plugins, por cada tipo de plugin existe un directorio dentro del directorio plugins, por lo tanto tenemos el directorio plugins/content para los plugins de tipo content y así con todos los tipos.Existen varios tipos, mira en tu carpeta plugins y comprueba los tipos.

Un plugin es un objeto que deriva de la clase JPlugin. Esta clase tiene unos métodos definidos que son ganchos (hooks) , también se les podría llamar listeners , y que se ejecutaran cuando el evento asociado a cada clase se dispare, por lo tanto tendremos que sobrescribir las funciones gancho que necesitemos y escribir nuestro código allí.

Por ejemplo, si sobrescribimos el método onLoginUser y escribimos una sencilla rutina que envié un email a nuestra cuenta de correo, estaremos modificando el sistema para que cada vez que un usuario haga login, envié un email a nuestra cuenta indicando quien se ha logueado y a que hora.

Esto es simplemente un ejemplo, ya que , lógicamente , seria inútil hacer una cosa así, además de llenar de correo inservible nuestra bandeja de entrada.

Vamos a crear un plugin sencillo que se va a llamar HolaMundo y que va a imprimir por pantalla, antes de que se visualice el contenido un mensaje, que previamente va a ser fijado en los parámetros del plugin.

Los parámetros del plugin se fijan como siempre en Joomla!, mediante el fichero xml de configuración.

Esta es la estrctura de nuestro plugin :

Primero vamos a ver el fichero xml de configuración, en el que definiremos nuestro parámetro.

<?xml version=»1.0″ encoding=»utf-8″ ?>

<install version=»1.5″ type=»plugin» group=»content»>

<name>Content – Hola Mundo</name>

<author>David Noguera</author>

<creationDate>15-02-2008</creationDate>

<authorEmail>david@nosolocodigo.com</authorEmail>

<authorUrl>www.nosolocodigo.com</authorUrl>

<version>1.0</version>

<description>Muestra un mensaje antes de mostrar el contenido

</description>

<files>

<filename plugin=»HolaMundo»>HolaMundo.php</filename>

<filename>HolaMundo.xml</filename>

</files>

<params>

<param name=»mensaje» type=»text» size=»50″ default=»Hola, me llamo David»

label=»Introduce el mensaje a ser mostrado aquí :» description=»Mensaje que se mostrará antes del contenido»/>

</params>

</install>

Como puedes observar, le estamos diciendo a Joomla que muestre en la seccion de parámetros del plugin , una caja de texto de 50 de ancho, donde podremos especificar el mensaje que queremos que se muestre. Y le hemos dicho que el fichero donde se encuentra el plugin es HolaMundo.php .

Vamos a crear nuestro plugin :

defined( '_JEXEC' ) or die( 'Acceso Restringido' );
jimport( 'joomla.plugin.plugin' );

class plgContentHolaMundo extends JPlugin {

function plgContentHolaMundo( &$subject ) {
	parent::__construct( $subject );
}

function onBeforeDisplayContent(&$article, &$params, $limitstart=0) {

	$plugin =& JPluginHelper::getPlugin('content', 'HolaMundo');
	$pluginParams = new JParameter( $plugin->params );
	$mensaje = "";

	$mensaje = $pluginParams->get('mensaje', 'Hola Mundo');

	$salidaPantalla = '

' . $mensaje . '

'; return $salidaPantalla; } } ?>

En Joomla 1.5 se ha introducido una nueva forma de hacer los plugins, más orientada a objetos.

Para que nuestro plgin funcione, en el fichero HolaMundo.php tendremos que crear la clase plgContentHolaMundo y decirle que derive de JPlugin.

El nombre de la clase es muy importante, si no se pone bien no funcionará.

Después crearemos el constructor de la clase, el cual invoca el constructor de la clase padre.

El constructor ha de crearse con una función de igual nombre que la clase, ya que si lo hacemos con el método __construct de php5 no será compatible con php4.

Esto se hace siempre igual en todos los plugins.

Después crearemos el metodo onBeforeDisplayContent , donde introduciremos el código que queremos que se ejecute antes de mostrar el titulo.

Si te has fijado, el método admite como parámetro las variables $article, $params y $limitstart. Esta definición de parámetros la tendremos que hacer siempre.

El contenido del articulo se almacena en $article->text, es decir, que si queremos modificar algo en el contenido del articulo, deberemos modificar $article->text.

Vamos a ver el cuerpo de la función :

Con el metodo getPlugin de JPluginHelper, obtenemos el plugin pasandole como parámetro el tipo y el nombre, por este orden.

Después en la variable $pluginParams almacenamos una instancia del objeto JParameter al que le tenemos que pasar como parámetro la propiedad params del objeto plugin que previamente hemos obtenido.

Acto seguido almacenamos en la variable $mensaje el parámetro ‘mensaje’ que hemos definido en el fichero xml y que podremos cambiar en la parte de Back-End de Joomla!.

Por último almacenamos en la variable $salidaPantalla lo que queremos que se muestre antes de mostrar el contenido , y la devolvemos como valor de retorno.

Crea un zip con los dos ficheros, e instálalo con el instalador de extensiones de Joomla!, después ves al Plugin Manager y actívalo, allí también podrás cambiar el mensaje que se imprime por pantalla.

Este es el resultado:

Puedes consultar los eventos disponibles en la documentación oficial de Joomla, que aunque sea oficial, es escasa, y también puedes ver los eventos en los ficheros example.php que existen dentro de cada directorio de tipo de plugin, es decir, en plugins/content , plugins/user … Este fichero te puede servir como plantilla a la hora de crear plugins.

Saludos.

Compartir:
Abrir chat
¿Tienes alguna duda que podamos aclarar?