Post-procesos

Los post-procesos son scripts que se ejecutan luego de un proceso general, por ejemplo guardar una portada o guardar un artículo. Por ejemplo, podrías implementar un post-proceso para generar un enlace a tu artículo en alguna red social cada vez que publiques.

Publicado: Martes 25 de septiembre de 2018 por David García
Última modificación: Miércoles 14 de noviembre de 2018

Supongamos que necesitas que se gatille una acción específica cada vez que creas o modificas un artículo. Por ejemplo, cada vez que creas un artículo necesitas publicar un enlace con descripción e imagen en una red social, o publicar el artículo en formato PDF mediante una aplicación fuera de Prontus. Para esto, Prontus te ofrece la funcionalidad de postprocesos.

Un ejemplo de post-proceso podría ser un script llamado "prontus_ppart_crearunlog.cgi", el cual se gatillaría al guardar un artículo. Aunque en general los scripts a usar como post-procesos se escriben en lenguaje Perl, es posible implementarlos en otros lenguajes. A continuación te detallamos los elementos esenciales a la hora de implementar estas soluciones.

Tipos de post-proceso

Prontus te permite utilizar tres tipos de post-proceso distintos:

  • post-procesos de artículo
  • post-procesos de portada
  • post-procesos de eliminación
Llamada a un post-proceso

Para efectuar una llamada a un post-proceso debes usar una marca especial -con forma de comentario HTML- en una plantilla de portada o plantilla de artículo, que al ser evaluada gatillará la ejecución del script indicado. La marca a utilizar concretamente es:

<!--POST_PROCESO=nombre_del_post_proceso-->

Esta marca está compuesta por la palabra reservada "POST_PROCESO" y el nombre del script a ejecutar "nombre_del_post_proceso"; todo esto debe estar encerrado entre las etiquetas "< !-- -- >".

El nombre del script debe incluir la ruta relativa a la carpeta cgi-cpn o cgi-cx. Se pueden pasar parámetros adicionales al post-proceso agregándolos a la invocación, tomando esto en cuenta, una invocación a un postproceso ubicado en cgi-cpn/pproc quedaría así:

<!--POST_PROCESO=pproc/demo_ppart_prueba.cgi param1 param2-->

Si necesitas especificar múltiples post-procesos en una plantilla de artículo, debes poner las marcas correspondientes una luego de la otra, una por línea:

<!--POST_PROCESO=postproceso_1.cgi-->
<!--POST_PROCESO=postproceso_2.cgi-->
<!--POST_PROCESO=postproceso_n.cgi-->
Estándares de código y nomenclatura para los post-procesos

Los post-procesos normalmente son scripts creados con Perl, y la extensión del script debe ser .CGI. Dependiendo del tipo de post-proceso, el nombre del script podría ser

  • [nombre_corto_del_proyecto]_ppart_[nombre_descriptivo].cgi para post-procesos de artículo.
  • [nombre_corto_del_proyecto]_ppport_[nombre_descriptivo].cgi para post-procesos de portada.
Ubicación de las marcas de post-proceso

Según el tipo de post-proceso (Articulo, Portada, Eliminación) las marcas deben ubicarse en:

  • Post-proceso de Artículo:  en la plantilla del artículo, luego de la etiqueta <html>. Típicamente agregamos estas marcas luego de la etiqueta <body>.
  • Post-proceso de Portada: en la plantilla de portada luego de la etiqueta <html>. Típicamente agregamos estas marcas luego de la etiqueta <body>.
  • Post-proceso de Eliminación: en el archivo de configuración [Nombre Prontus]-var.cfg
Directorio de post-procesos

Los scripts de post-procesos deben quedar dentro del directorio de las CGIs de administración del sitio Prontus, que normalmente es /cgi-cpn, a menos que tu implementación de Prontus sea compleja. En este caso, revisa el archivo /[nombre del Prontus]/cpan/dir_cgi.js para saber exactamente cuál es el directorio de CGIs de administración para tu Prontus.

Importante: los post-procesos no deben ir "sueltos" en el directorio de CGIs de administración, sino que deben ir en subdirectorios según estos criterios:

  • Si son producto de algún subsistema, deben ir dentro de su respectiva carpeta, por ejemplo /cgi-cpn/subsistema/.
  • Si son de uso común, deben ir dentro de la carpeta /cgi-cpn/pproc/.
Programación de post-procesos

Un post-proceso puede tener diferentes propósitos, sin embargo en la etapa de construcción del script, debe tener al menos las siguientes líneas de código:

  • Documentación del post-proceso (Fecha de creación, autor, propósito, versión, dónde aplica, etc.)
  • Datos del log de errores, por ejemplo, "el script genera los errores en el siguiente error-log:"
    /cgi-cpn/prontus_temp/prontus_ppart_crearunlog.cgi.error.log

Para ello debes incluir en tu script las siguientes líneas de código:

BEGIN {
 use FindBin '$Bin';
 my $pathLibs = $Bin;
 unshift(@INC,$pathLibs); # Para dejar disponibles las librerias de pproc
 $pathLibs =~ s/\/pproc$//; #carpeta de ubicacion del postproceso
 unshift(@INC,$pathLibs); # Para dejar disponibles las librerias de prontus
 use lib_stdlog;
 &lib_stdlog::set_stdlog($0, 51200);
};

Así estarás usando las librerías Prontus para generar un log histórico rotativo. Esta forma de inicializar el script deja disponibles librerías adicionales que se encuentren en el mismo directorio del post-proceso, y las librerías de Prontus ubicadas en cgi-cpn o cgi-cx para poder utilizarlas en el script.

Parámetros recibidos por el script del Post Proceso

Un post-proceso recibe dos parámetros de entrada (post-procesos de portada) o tres (post-procesos de artículo) por defecto, estos son pasados al script cuando se lee la marca Prontus y se llama a su ejecución (NO son parámetros ingresados por el usuario al incrustar la marca en el código). Estos parámetros por defecto van luego de eventuales parámetros adicionales pasados en el artículo.
Los parámetros que van por defecto son:

Post Proceso de Portada:

$ARGV[N] = Server Name o IP (por ejemplo, www.mipagina.cl)
$ARGV[N+1] = Ruta hacia el Archivo de Portada (por ejemplo, /sites/mipagina.cl/web/prontus_mp/site/edic/base/port/ppagina.html)

Post Proceso de Artículo:

$ARGV[N] = Ruta hacia el Archivo del Artículo (por ejemplo, /sites/mipagina.cl/web/prontus_mp/site/artic/20050927/pags/20050927151853.html)
$ARGV[N+1] = Server Name o IP (por ejemplo, www.mipagina.cl)
$ARGV[N+2] = indicador del tipo de edición del artículo N (artículo nuevo) o E (artículo editado)

Donde "N"  en $ARGV[N] es el número de parámetros adicionales pasados en la plantilla. Por ejemplo, si pasara al post-proceso 3 parámetros adicionales, estos estarían en $ARGV[0], $ARGV[1], $ARGV[2]; y los parámetros por defecto se encontrarían desde $ARGV[3] en adelante.

Un ejemplo de código útil para leer los parámetros estándar para post-procesos de artículo sería el siguiente:

my $args = scalar @ARGV;
$parametros= $ARGV[$args - 4]; # Parámetros adicionales
$origen = $ARGV[$args - 3];# Ruta hacia el Archivo del Artículo (por ejemplo, /sites/mipagina.cl/web/prontus_mp/site/artic/20050927/pags/20050927151853.html)
$server = $ARGV[$args - 2]; #Server Name o IP (por ejemplo, www.mipagina.cl)
$mode = $ARGV[$args - 1]; #Indicador del tipo de edición del artículo N (artículo nuevo) o E (artículo editado)
Post Procesos en PHP

Es posible ejecutar post-procesos escritos en lenguaje PHP. Para hacer una llamada a un post-proceso programado en PHP, se utiliza el método denominado "trampolín", en la cual una CGI Perl ejecuta la llamada al script PHP mediante la instrucción system.
Esta modalidad se lleva a cabo de la siguiente manera:

  1. Asignar un nombre al post-proceso en Perl (que debe tener extensión CGI) que usará como trampolín. Esta CGI debe quedar alojada en el directorio de scripts Perl del sitio. Al dar nombre al post-proceso conviene seguir el estándar definido en este artículo.
  2. Agregar en la plantilla de portada o en la plantilla de artículo la marca de post-proceso especificando la CGI Perl
    < !--POST_PROCESO=nombre_del_post_proceso.cgi-- >
  3. El código de este script, deberá incluír como mínimo los siguientes ítems:
    • Directiva de ejecución Perl "#!/usr/bin/perl"
    • Documentación del post-proceso
    • Sentencias para recibir los argumentos por defecto, siempre que los uses.
    • Llamada al script PHP mediante instrucción System, enviar entre comillas el path donde se encuentra el intérprete PHP, el path con dirección absoluta del script PHP y por último los parámetros al script (estos pueden ser opcionales).
#!/usr/bin/perl
# Nombre de script : toolbox_ppart_generaListadoArtics.cgi
# Parámetro Entrada : $path, $host
# Parámetro Salida : -
# Autor : ABC
# Fecha creación : 18/12/2012
# Fecha ult. Modificación : -
# Objetivo : Ejecuta la llamada a sistema para invocar la  
#    función toolbox_listado_artics_general.php
my ($path, $host) = @_;
system "/usr/local/bin/php /sites/toolbox.cl/web/cgi-php/toolbox_ppart_guarda.php &";

Los scripts PHP deben quedar en la ruta [Nombre_sitio]/web/cgi-php/, que normalmente deberás crear.

Post Procesos de Eliminación

Los post-procesos de eliminación quedan definidos en el archivos de configuración de Prontus [nombre_sitio]/web/[nombre_prontus]/cpan/[nombre_prontus]-var.cfg. Cabe notar que solo puede haber un post-proceso de eliminación en un Prontus.

Un post-proceso de eliminación se ejecuta una vez que se procede con el proceso de eliminación de un artículo. Por esto, si necesitas ejecutar alguna acción a partir de la eliminación de un artículo, podrías hacer uso de este tipo de post-proceso, por ejemplo para generar un log de eliminaciones de artículos.

Para detallar un post-proceso de eliminación, escribir la palabra reservada "POST_PROCESO", luego el tipo de post-proceso, que siempre debe ser ART-BORRAR, y por último entre paréntesis el nombre de la CGI que corresponde al post-proceso. Por ejemplo:

POST_PROCESO = 'ART-BORRAR (ads2_delete_banner.cgi)'
[Marca] = [tipo]([nombre_de_la_CGI])

Parámetros de entrada del Post Proceso de eliminación:

$ARGV [0] = Ruta a archivo temporal con los artículos eliminados
$ARGV [1] = Nombre del Prontus, por ejemplo 'prontus_noticias'
$ARGV [2] = Nombre del host o dominio

Archivos adjuntos

Descargar

Artículos Relacionados