Plugins

Prontus te permite extender su funcionalidad incorporando tus propios paquetes de plugins al panel de administración.

Publicado: Martes 25 de Septiembre de 2018 por Adriano Varoli Piazza
Última modificación: Miércoles 10 de Octubre de 2018

La funcionalidad de plugins te permite implementar funcionalidades complejas en el panel de administración de Prontus, sin necesariamente tener acceso al servidor para crear nuevas cgis en los directorios en que normalmente residen.

Estructura

Debes crear tus plugins como paquetes en sus propio directorios dentro del directorio /[prontus_dir]/cpan/prontus_plugins/.

Supongamos que estás creando un plugin que llamarás "Plugin de Ejemplo". Para empezar, crearás el directorio /[prontus_dir]/cpan/prontus_plugins/plugin_ejemplo (el nombre del directorio no necesariamente debe corresponder con el nombre del plugin). En ese directorio debes implementar  al menos lo siguiente:

  • un archivo html con la base para el plugin. Esta será la página principal del plugin, y se cargará al acceder al plugin desde la sidebar del panel de administración
  • un archivo plugin.json con el siguiente formato:
    {
    "plugin": "ejemplo.html",
    "nombre": "Plugin de Ejemplo",
    "version": "0.1",
    "habilitado": true,
    "embebido": true,
    "css": ["plugin_ejemplo.css", "plugin_ejemplo_2.css"],
    "js": ["Plugin_ejemplo.class.js"]
    }

En este objeto JSON, las opciones tienen el siguiente significado:

  • 'nombre' es el nombre del plugin para usar en el sidebar del panel de administración y como titular de la página
  • 'plugin' es el nombre del archivo html
  • 'css' y 'js' son listas de archivos que se asume existen dentro de los directorios css y js-local del plugin
  • 'embebido' permite especificar si el plugin debe cargarse embebido dentro de la plantilla prontus_admin_plugins.html o por sí solo
  • 'habilitado' permite activar o desactivar el plugin

Al deshabilitar el plugin con la opción "habilitado", Prontus no lo contará entre los que desplegará en la sidebar, ni permitirá que accedas a él.

Implementación de funcionalidad server-side

Puedes implementar formularios dentro del plugin, preferentemente usando requests AJAX a un script en lenguaje PHP que deberás adjuntar dentro del directorio de tu plugin.

Una alternativa para aprovechar la potencia de Prontus es implementar el script de lado server como una CGI en lenguaje Perl. Si deseas implementar nuevas CGIs debes tener en cuenta que por motivos de seguridad y de configuración, los scripts .cgi solamente funcionarán dentro de los directorios /cgi-bin y /cgi-cpn (y sus subdirectorios). Por esto, si necesitas esta funcionalidad, te recomendamos crear un subdirectorio /cgi-cpn/prontus_plugins/[nombre_del_plugin]/ con tus CGIs dentro. En el ejemplo, crearías el subdirectorio /cgi-cpn/prontus_plugins/plugin_ejemplo/ y dentro la CGI plugin_ejemplo.cgi. Esta CGI se vería aproximadamente de este modo:

#!/usr/bin/perl
use strict; use warnings;
BEGIN {
  use FindBin '$Bin';
  my $pathLibsProntus = $Bin;
  unshift(@INC,$pathLibsProntus);
  $pathLibsProntus =~ s/\/[^\/]+\/[^\/]+$//;
  unshift(@INC,$pathLibsProntus); # Para dejar disponibles las librerias de prontus
}
use utf8;
# Captura STDERR
use lib_stdlog;
&lib_stdlog::set_stdlog($0, 51200); use glib_cgi_05; use glib_html_03; use lib_prontus; main: { &lib_prontus::setUtf8(); # Rescatar parametros recibidos &glib_cgi_05::new(); $prontus_varglb::PRONTUS_ID = &glib_cgi_05::param('_prontus_id'); # ... resto de tu código &glib_html_03::print_json_result(1, 'Todo terminó bien!'); # o, en caso de error: # &glib_html_03::print_json_result(0, 'Encontré un error!'); }

Este fragmento de código sigue el formato de las demás CGIs de Prontus, y te proporciona los mismos beneficios:

  • crea un log de errores automáticamente manejado en /cgi-cpn/prontus_plugins/plugin_ejemplo/prontus_error_log/plugin_ejemplo.cgi.error.log
  • gestiona los parámetros recibidos via request HTTP GET o POST mediante la función glib_cgi_05::param()
  • te permite acceder a las variables de configuración del servidor contenidas en $prontus_varglb

Puedes devolver datos desde la CGI en formato JSON usando la función print_json_result() de la librería cgi-cpn/glib_html_03.pm.

Una nota final: ¡recuerda que las CGIs deben tener permisos de ejecución para poder funcionar!