viernes, 9 de marzo de 2007

Otra forma de generar documentos Word con PHP

Bueno en realidad no es otra forma, la base es simplemente la misma de Generar documentos de Word RTF con php, un articulo de José Luis Del Rincón. La estrategia que usaremos es la misma generar un RTF que es un formato que muchos procesadores de texto (por supuesto el Microsoft Word incluido) leen.

Lo primero que debemos hacer es generar una plantilla de nuestro RTF. Para eso voy a usar AbiWord que es un procesador de texto muy liviano, gratis y abierto (si, y no estoy en Linux). Por supuesto se puede usar el Word aunque es preferible que usen el WordPad si lo tienen.

Ahi escribimos el texto solo que escribiendo los valores variables como si fueran variables PHP adentro del RTF (con el signo $ delante de la palabra)

Codigo PHP

<?php

// Lee la plantilla
$plantilla = file_get_contents('plantilla.rtf');

// Agregamos los escapes necesarios
$plantilla = addslashes($plantilla);
$plantilla = str_replace('\r','\\r',$plantilla);
$plantilla = str_replace('\t','\\t',$plantilla);

// Datos de la plantilla
$nombre = "Juan";
$apellido = "Perez";
$prefijo = "Sr.";
$curso = '"Programacion Web con PHP"';
$fecha = date("d-m-Y", time() - 7 * 24 * 60 * 60); // de esta manera el codigo no envejece :P

// Procesa la plantilla
eval( '$rtf = <<<EOF_RTF
' . $plantilla . '
EOF_RTF;
' );

// Guarda el RTF generado
file_put_contents("$apellido-$nombre-$fecha.rtf",$rtf);

?>

Bueno a primera vista si comparamos los codigos vemos que este es mas corto y simple. Pero analicemos profundamente para conocer la potencia de este codigo. Primero lo que hacemos es leer la plantilla, ahi podemos usar cualquier metodo para leer un archivo que conozcamos. Yo use file_get_contents. Luego debemos procesar un poco al texto del archivo (despues explicaremos porque).

Luego debemos tomar los datos, ahi podemos sacarlos de una base de datos, llenar por formularios, lo que sea. Para simplificar, lo que hacemos es directamente declarar los datos.

Las siguientes lineas son las que importan en el codigo. Lo que usamos es la sintaxis HEREDOC que nos ofrece PHP. El HEREDOC es como usar sintaxis de comillas en PHP, pero sin las comillas. Por esta sintaxis debemos escapar los caracteres \r y \t que son tomados como retorno de carro y tabuladores respectivamente. Esto incluido en una llamada a la funcion eval en la cual podemos procesar codigo dinamicamente. Ahi devolvemos el contenido procesado en la variable $rtf.

Bueno al final guardamos el archivo con la funcion file_put_contents. Lo mismo que al leer, aqui podemos usar cualquier metodo para guardar o enviar al navegador como archivo RTF

Como nota final (y tarea para el hogar) el archivo RTF debe ser procesado una sola vez, es decir que podemos guardarlo con los escapes y luego leerlo,en vez de escaparlo cada vez que lo llamamos (lo que hace al codigo mas efectivo).

jueves, 8 de marzo de 2007

For he and for she... and for it too

Ya existen miles de articulos que hablan acerca de lo que es la accesibilidad, y porque deberiamos crear contenidos accesibles cuando diseñamos, programamos, o lo que sea que hagamos para crear sitios webs. Ademas tenemos iniciativas como la WAI de la W3C y otras como la Fundación Sidar.

No voy a dar mas informacion que esa, ya tienen bastante para buscar y leer acerca de accesibilidad, lo que quiero es proponerles una nueva "excusa para ser accesibles".

Imaginense un robot capaz de limpiar, cocinar, sacarnos a pasear al perro, hacer nuestros deberes escolares, etc. Si sabe hacer nuestra tarea entonces debe saber buscar por internet. Entonces es un gran conocedor de la computadora, sabe abrir un navegador, entrar a Google, buscar informacion, obviar algunas paginas que no son relevantes, etc.

Bueno eso todavia tenemos que imaginarnoslo (al menos en version comercial y a escala).

Pero las computadoras si saben navegar las paginas webs. Miles de crawlers se pasean por la red de redes comiendo informacion todo el tiempo y navegando todas las paginas.

Este usuario de nuestra web (el crawler) es uno de los mas importantes. Es el que le dice a algun buscador cual es el contenido de nuestra web. Debemos conocer a este bicho para saber como nos conocen los buscadores a nosotros. Algunas cuestiones que tenemos que tener en cuenta son:

  • Los crawlers son los usuarios mas obedientes si no queremos que algun contenido sea leido por el navegador podemos configurar un archivo para decirles que no lo lean (Si, el famoso robots.txt).
  • No ven ningun estilo (css), en lo que se refiere a fuente, color, imagen de fondo, etc. Sin embargo saben que contenido es resaltado, cual es el titulo o subtitulo, si es una direccion o no, si el contenido esta intimamente relacionado.
  • No entienden de tecnologias como JavaScript y Flash, solo pueden leer el HTML.

La mejor manera de saber como nos conocen es siendo como ellos y leer las etiquetas y el texto, abriendo cada codigo fuente de las paginas. O simplemente navegando con Lynx. Lynx es un navegador web en modo texto. Es gratuito y libre. Simple y rapido. Ademas tiene soporte para cualquier plataforma.

Para hacer webs accesibles debemos usar las etiquetas XHTML correspondientes para cada contenido, asi como sus atributos (ALT en las imagenes, por ejemplo) y dar funcionalidad alternativa al JavaScript y Flash (en la WAI y Sidar podemos aprender mas sobre esto).

En conclusion difiero con la definicion de accesibilidad del W3C "La accesibilidad Web significa que personas con algún tipo de discapacidad van a poder hacer uso de la Web." Para mi la accesibilidad web significa "El uso de la web a cualquier persona usando algun navegador en cualquier dispositivo (computadora, dispositivo movil, etc) asi como cualquier dispositivo o software". Y usen Lynx para comprobar el nivel de accesibilidad de sus webs (o la de otros :D)

Espero que entiendan el por que del titulo en ingles y tambien perdonen toda la falta de tildes, ya las corregire.