Reutilizar código de componentes en plugins de Joomla

Los plugins de joomla normalmente añaden una funcionalidad especial definida, o proveen de integración entre módulos distintos a través de eventos registrados en el código de los componentes, como por ejemplo éste.

JPluginHelper::importPlugin('docman');
$return = $mainframe->triggerEvent( $trigger, $params, $isPub);

Con éste código escrito en algún sitio dentro del código de docman ( no es el código original), el componente docman nos permite escribir plugins que se ejecutarán cuando se llame al método triggerEvent pudiendo éstos actualizar tablas de otros componentes, filtrar datos, etc.

Acá se puede encontrar una introducción a la creación de plugins en Joomla:

http://developers.dinamiz-e.com/index.php?option=com_content&view=article&id=58:introduccion-a-la-creacion-de-plugins-en-joomla&catid=3:joomla&Itemid=9

Ésta entrada no trata precisamente sobre la creación de plugins, sino sobre qué podemos hacer para acceder a código externo (de componentes, librerías, otros plugins) desde nuestros plugins, éste es un tópico que por más simple que parezca puede traer complicaciones si no se maneja de manera correcta introduciendo desorden en nuestro código.

Algunos ejemplos/tips a seguir al escribir plugins:

– Si un plugin depende de un componente para realizar su trabajo no está de más realizar esta comprobación:

JComponentHelper::isEnabled('com_avreloaded', true)

– Si se desea formatear texto o producir html, se puede usar la clase

JHTML::

– Si se desea incluir librerías existentes en la carpeta libraries en la raíz de joomla

jimport( 'joomla.plugin.plugin')

– Podemos instanciar clases con libertad aunque siempre será mejor crear singletons si la clase no guarda estado

new XSLTProcessor();

– Cargar un lenguaje en la variable global del lenguaje, por ejemplo, para producir texto internacionalizado.

JPlugin::loadLanguage( 'plg_content_pagebreak' );

– Acceder a los parametros de un plugin

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

– Cargar clases en librerías propias de nuestros propios componentes.

require_once( JPATH_ADMINISTRATOR.DS.'components'.DS.'com_phocagallery'.DS.'libraries'.DS.'loader.php');

require_once(JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php');

Y algunos otros snippets útiles que se explican por sí mismos.

JError::raiseWarning
JApplication::registerEvent( 'onAfterEditDocument', 'bot_updatepdfindexer' );

Nota: Cabe destacar que escribí ésto basándome en los plugins de la distribución standard además de algunos más que tenía instalados.

Leave a Reply

Your email address will not be published. Required fields are marked *