Esta vez quisiera hablaros de la sección de La Web de Física de la que, personalmente, estoy más orgulloso... aunque su utilización es menor de lo deseable. Se trata de la sección de bibliografía comentada.

Esta sección existe desde el principio de la web, pero antes era manual. Existía un formulario, cuyos contenidos se enviaban mediante correo electrónico, y luego yo debía introducir los datos a mano. La única automatización que había es que la tabla donde se mostraban los datos del libro se creaban mediante una función PHP propia. Aquí tenéis una foto de la pinta que tenía:

[ATTACH]2085[/ATTACH]

Y, para que os hagáis una idea, este era el código que tenia que escribir yo para introducir una entrada nueva:

[php]
<?php
DoBiblio("grantmajer", "grantmajer.gif", "F. R. Grantmájer", "Mecánica analítica", "Segunda", "URSS", "-", "2003", "335", "Tapa blanda", '14.9&euro; (<a href="http://www.urss.ru/cgi-bin/db.pl?cp=&page=Book&id=16553&lang=sp&blang=en&list=Found">www.urss.ru</a>)', "-");
?>
[/php]Funcionaba, sí. Pero era poco ágil. Y además, para que engañarnos, algo feo. Con el tiempo, decidí que era hora de hacer las cosas bien, y reescribí la sección desde el principio. Mi declaración de intenciones justo antes de empezar a trabajar esta en este hilo del foro. Algo que no quise decir en aquel mensaje -quizá por que no estaba seguro de si saldría bien- es que todo el sistema funcionaría en AJAX.

El proceso de programación de la sección fue largo y laborioso, pero muy interesante. En realidad las técnicas necesarias eran relativamente nuevas para mi; unas más que otras. Pongámonos en antecedentes, por aquél entonces había habido algunos cambios en la web:

Un mes antes, se había cambiado completamente el look de la web, incluso su nombre. El nuevo diseño comportaba cambios radicales: ya no necesitaba de tablas, sino que utilizaba íntegramente XHTML+CSS. El sistema interno de menús también cambió radicalmente, a partir de ese momento está totalmente centralizado, y se lee de un archivo XML. Antes estaba algo centralizado (excepto algunas secciones que tenían menú a parte... y que ahora están incluidas en el mismo XML central), pero era muy manual aún. La remodelación también incluyó el primer elemento DHTML de la web, el menú deslizante.

Un poco más tarde, como primera aplicación directa de bases de datos a la web, se remodeló la página ¿Qué es la Física? Respuestas de los usuarios. La nueva versión era (es) dinámica: la respuesta del usuario aparece inmediatamente, y permite editar la respuesta más adelante mediante una contraseña.

La siguiente mejora fue la página de contacto. La gran novedad fue el funcionamiento mediante AJAX, es decir, los datos se procesan sin tener que recargar la página completa. Una tecnología relativamente nueva, que da gran profesionalidad y dota de mayor agilidad a la página (se evita tener que recargar cosas secundarias como los menús y la publicidad).

Pues, con todo esto... la página de libros es básicamente un compendio de todas estas nuevas técnicas, pero en un nivel superior por la mayor complejidad de la estructura de la página, y las muchas funciones que tiene. En total, costó algo así como un mes en estar lista para el periodo de pruebas.

Voy a desvelar, en primicia para este blog, un poco como funciona la página. Lo básico, claro está, es la base de datos que debe diseñarse con cierta previsión para facilitar las cosas. Hay el programa principal, que contiene todas las funciones básicas de la página. La función principal es la encargada de mostrar los libros, con los datos, votaciones y comentarios (si se decide mostrarlos). A esta función, básicamente, se le pasa el resultado de una consulta a la base de datos, y ella sola se las arregla para presentar todos los datos.

Quizá la característica más importante es que ahora todas las entradas están en la misma tabla, en vez de una tabla por entrada. Esto permite que la estructura sea mucho más uniforme y agradable.

La magia empieza con las opciones de mostrar o ocultar los comentarios de un sólo libro sin tener que recargar toda la página, ni siquiera toda la tabla de libros. Esto involucra añadir y quitar filas de la tabla al vuelo, y se consigue, claro está, gracias a AJAX y a una manipulación de la representación DOM de la página (Document Object Model, Modelo en objetos del documento). El programa secundario en el servidor (el encargado de atender las peticiones AJAX, llamando si es necesario a las funciones del programa principal), escrito en PHP, devuelve tan sólo los datos necesarios para mostrar los comentarios en cuestión codificados en XML. Esos datos son procesados por la propia página en el navegador al vuelo, gracias a JavaScript, y se utilizan para modificar la tabla en la forma adecuada.

Un paso más es el sistema de creación y edición de comentarios. Involucra la creación del formulario de edición al vuelo (usando una técnica similar a la anterior). Dicho formulario es también procesado por AJAX; en vez de recargar la página como los formularios normales, llama en segundo plano al programa secundario, quien se encarga de añadir los datos en la base de datos.

Este es básicamente el procedimiento, lo que pasa en la página cada vez que un usuario intenta ver los comentarios de un libro, añadir un libro o un comentario... Como veis, hay un montón de los siguientes lenguajes informáticos en este embrollo: HTML-XHTML, CSS, PHP, JavaScript y XML.

Si se compara con las páginas profesionales, obviamente, todo esto no es nada. Equipos de diseño que cobran cifras de cuatro o cinco dígitos crean maravillas. Pero, para ser totalmente amateur, hecho en los ratos libres de un mes de octubre... no está tan mal, ¿no?

Lo único que me sabe mal es que no sea tan utilizada como me gustaría. Así que, no lo dudéis; si falta algún libro que conocéis, añadirlo a la página! Le será muy útil a la comunidad. Califica los libros que conozcas, y comenta aquellos que conoces aún más: tus opiniones sinceras serán lo más útil a todos los posibles lectores.