Creación de plugins en Joomla 1.6

puzzleEste 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  

#2 Juan A. Chaves 20-09-2014 17:53
Cito a einnerlink:
Esto funciona para Joomla 1.7?


Si, sin problemas te va a funcionar. De todos modos deberías plantearte migrar tu web a Joomla 2.5
Citar
#1 einnerlink 20-09-2014 03:51
Esto funciona para Joomla 1.7?
Citar

Escribir un comentario

Por favor procura que tus comentarios estén relacionados con la entrada, comenta con tu nombre y no pongas enlaces en tu comentario. Intenta también respetar a los demás lectores, los comentarios off topic, promocionales, ofensivos o ilegales serán editados y borrados.


Código de seguridad
Refescar