Danielside

informática softwarelibre divagaciones música

Librería jQuery y ajax para transformaciones xslt en el navegador (II)

Nos habíamos quedado con un uso fundamental de la librería y en este capítulo mostraré el resto de opciones que tiene el plugin ajaxslt. Para proceder, veamos primero la cabecera completa de la función y luego veamos qué le podemos pasar a esos parámetros que están ahí, esperando a que se les pase algo útil.

function ( controller_request, parameters_for_request, parameters_for_xslt, callbacks )

Todos los parámetros que vemos ahí son objetos javascript. Hasta ahora hemos usado el primero: controller_request. Su definición completa sería la siguiente:

{ module: <string>,
webservice: <string>,
action: <string>,
force_reload_xml: <bool> }

Los módulos – parámetro module– son unidades semánticas en los que queremos dividir nuestro sistema. Si por ejemplo tenemos un área de sistema, otra de clientes y otra de usuarios, es conveniente dividir el sistema en módulos independientes, que en mi arquitectura se traducen en directorios con conjuntos de clases dentro. Esas clases a invocar se seleccionan con el parámetro webservice y el método dentro de la clase con el parámetro action.

He destacado el último parámetro porque no lo habíamos usado hasta ahora. Hay situaciones en los que para una combinación module/webservice/action – recordemos que es lo mismo que decir módulo/clase/método – ya tenemos el XML guardado en la caché del plugin, como resultado de una llamada anterior. Por defecto se volverá a pedir, pero puede ser que para algunas situaciones no nos interese y queramos usar la versión en la caché. Para hacerlo, debemos establecer force_reload_xml a false.

En este punto quizá sea bueno proporcionar un ejemplo muy sencillo -demasiado, solo para ilustrar el concepto- de como sería la implementación de la parte del servidor. Os lo hago disponible en este enlace: Enlace de descarga de sistema de prueba (zip). Es demasiado sencillo porque el framework completo hace muchas más cosas con el XML, el XSLT, con los parámetros de entrada, la seguridad, etc. También hace que sea fácil que acciones de unos módulos puedan llamar a otras acciones en otros módulos, para colaborar y elaborar una respuesta común, permitiendo modularidad y reutilización.

Lo más lógico es que la mayoría de las llamadas al servidor requieran parámetros. Se envían mediante el objeto parameters_for_request que será un objeto con propiedades y valores arbitrarios, por ejemplo:

{ nombre: ‘Matu’,
edad: ‘120’,
empresa: ‘company inc.’ }

Con el framework de servidor al completo -no el ejemplo simple que he puesto antes para descarga- hay código PHP que se encarga de recibir estos parámetros, “limpiarlos”, y ponerlos disponibles para los métodos de las clases con el mismo formato: un array de nombres de PHP. El código sería algo así como:

$parametros = Array(); //Atencion, almacenan tanto los POST como los GET, juntos
foreach($_POST as $clave=>$valor){
if (parametro_valido($valor)) {
$parametros[$clave] = trim(htmlspecialchars(urldecode($valor)));
} else {
$parametros[$clave] = null;
}
unset($_POST[$clave]);
}

Uno de los aspectos más potentes de los documentos XSLT es que pueden recibir parámetros. Si Javascript puede enviárselos ¿por qué no usarlos? Se pueden enviar usando parameters_for_xslt, que será, de la misma manera que el anterior, un objeto arbitrario. Si por ejemplo nuestro documento XSLT contiene al principio:

<xsl:param name=”filter” />

Entonces le daremos valor filter enviando el siguiente objeto como valor del parámetro parameters_for_xslt:

{ filter: ‘Progressive rock’ }

Vamos finalmente con el parámetro callbacks. He definido algunas fases del ciclo petición-cache-transformación en las que se ejecutarán funciones definidas por el usuario y es así como se comunican. Las funciones que admiten son:

{ fn_xml_cache_loaded: <function ( xml_doc )> – para cuando el xml se obtiene de la cache. Recibe el documento DOM, como las demás de ahora en adelante
fn_xml_server_loaded: <function ( xml_doc )> – para cuando el xml se obtiene desde el servidor
fn_xsl_cache_loaded: <function ( xml_doc )> – xsl obtenido desde la cache
fn_xsl_server_loaded: <function ( xml_doc )> – ¿lo vas pillando?
fn_success: <function ()> – Se llamará cuando se complete la transformación en HTML }

Yo mismo estoy usando estos callbacks en la página de la demo para pintar los documentos en los div correspondientes. Revelando el código fuente de la demo podréis ver ejemplos de uso de los callbacks.

Los dos últimos parámetros son para enviar parámetros al servidor que se recibirán en el método de la clase invocada de forma directa; y para parametrizar las hojas de estilo XSLT.


Archivado en categoría(s) sandbox

Enlace permanente



Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *