También estoy en: Ver el perfil de Jon González Garrido en LinkedIn

Joomla: Shortcodes en extensiones propias. ¡Activando plugins manualmente!

Valora este artículo
(1 Voto)
Joomla: Shortcodes en extensiones propias. ¡Activando plugins manualmente! - 5.0 out of 5 based on 1 vote
Tengo un plugin que mediante un shortcode en un artículo me hace una galería muy resultona. Ahora estoy desarrollando y me gustaría poder usar esos shorcodes en mi extensión o en mi tema. ¿Cómo hacerlo? En este artículo te lo explico, ¡es sencillo!

Recientemente me he encontrado con la necesidad de añadir una galería en un lugar de mi template en el cual no se mostraban artículos. Mirando las extensiones instaladas he visto que tenía instalada Simple Image Gallery.

Bien, perfecto, me gusta, pero... ¿Cómo hago que en mi template pueda añadir el shortocode correspondiente y Simple Image Gallery haga la "magia"?

Para poder entender como hacerlo en la documentación oficial de Joomla podemos encontrar 2 páginas que lo explican.

En el primer artículo se habla de como activar los plugins de contenido que se ejecutan en un evento o instante de ejecución. Para saber los eventos existentes en Joomla podemos consultar esta página.

Así que la cosa parece sencilla pero aún tenemos que saber que evento tenemos que activar para que el plugin haga sus funciones. Para ello en las carpetas del proyecto vamos a la carpeta plugins en la que nos encontraremos varias carpetas que corresponden a los siguientes tipos de plugin:

  • Authentication
  • Captcha
  • Content
  • Editors
  • Extensions
  • Finder
  • Quick Icons
  • System
  • User

Con un poco de intuición y como pista diré que el 99% de los plugins que tienen que ver con shortcodes están en content pero si vais a administración a "Extensiones->Plugins" y buscais el plugin que quereis lo vais a ver mas claro.

Como podeis ver en la imagen el plugin se encuentra en la carpeta "content" y la carpeta que tiene el plugin se llama "jw_sig".

Con estos datos ya sabemos que es de tipo content pero no que evento necesitamos. Para saber el evento depende un poco de cada plugin que hay que buscar en su carpeta la clase que extienda JPlugin que en nuestro caso es el fichero jw_sig.php que se encuentra en la raiz del plugin y que contiene el siguiente código:

class plgContentJw_sig extends JPlugin

El siguiente paso sería mirar en el código a ver en que eventos se activa

// Joomla! 1.5
function onPrepareContent(&$row, &$params, $page = 0){
    $this->renderSimpleImageGallery($row, $params, $page = 0);
}

// Joomla! 2.5+
function onContentPrepare($context, &$row, &$params, $page = 0){
    $this->renderSimpleImageGallery($row, $params, $page = 0);
}

 

 

Vemos que se activa al preparar el contenido y además podemos ver que el plugin está preparado para funcionar en distintas versiones de Joomla ya que en la 1.5 el nombre del evento era algo diferente.

Ya tenemos lo necesario. Mirando el primer enlace vemos que tenemos dos maneras de activar el evento onContentPrepare, una mas corta y otra mas genérica que nos vale para el resto de eventos.

El modo corto sería:

$text = "Mi galería{shortcode}Carpeta{/shortcode}";

$text = JHtml::_('content.prepare', $text);

 

Con ello en la variable $text que es donde tendríamos el shortcode queda almacenado el resultado de aplicar las acciones de TODOS los plugins que ejecutan onContentPrepare. Como uno de ellos es la galería el texto del shortcode se sustituye por el generado por la galería.

El otro modo es el siguiente:

//Se crea una clase standar PHP que nos servirá de contenedor del texto

$article = new stdClass;
$article->text = $text;
 
// Se añaden parámetros si son necesarios. Eso lo podríamos ver en la definición de la función onContentPrepare

//si es que vemos que hace algo que nos viene bien con los parámetros.
$params = new JObject;
 
//Se importa el helper de plugins de content o del tipo de plugin que se necesite.
JPluginHelper::importPlugin('content');

// En Joomla inferior a 3.x usar JDispatcher.
$dispatcher = JEventDispatcher::getInstance();

//Se lanza el evento onContentPrepare para que actue sobre el objeto que hemos creado.

//El contexto no se suele usar pero podeis ver si el plugin que quereis lanzar hace algo con ello.
$dispatcher->trigger('onContentPrepare', array('some.context', &$article, &$params, 0));

//Ya tenemos en $article->text el resultado de ejecutar los plugins y por tanto la galería.

 

Por tanto y gracias a la flexibilidad de Joomla y al patrón observer (que se explica en el segundo enlace) es posible ejecutar los shortcodes que queramos en nuestro código Joomla.

¿Tienes alguna duda? !Deja un comentario y lo miramos!

Visto 1202 veces Modificado por última vez en Jueves, 26 Noviembre 2015 09:20
Jon González Garrido

Email Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

Deja un comentario

Asegúrate de llenar la información requerida marcada con (*). No está permitido el código HTML. Tu dirección de correo NO será publicada.

Contacto

La mejor manera de contactar conmigo es el formulario de contacto de esta página, aquí.

Acerca de mi

Soy un Ingeniero superior que ha obtenido la ingeniería técnica mediante la UPV/EHU y la superior mediante la UNED.

Mi carrera laboral se ha desarrollado sobre varias tecnologías, en especial PHP, MySQL y Apache.