Entradas etiquetadas ‘php’

Mejorando el COUNT(*) de MySQL para las paginaciones

25 de Septiembre de 2009

Generalmente cuando paginamos resultados bajo PHP / MySQL, primero generamos la consulta a la BBDD con el Where y unos “LIMIT” para mostrar solo el “rango” de registros que nos interesa para la página solicitada.

Justo después de esta tipica consulta viene el COUNT (*) pero sin apliar LIMITS ni nada  para saber cuantos registros tenemos en total en la BBDD y “pintar” el sistema de paginación, es decir, la navegación de las páginas.

Pues bien, MySQL tiene un par de funciones que básicamente hacen una especie de COUNT(*) pero mucho más veloz y que vale la pena aplicar en esta situación:

  • SQL_CALC_FOUND_ROWS: calcula el número de resultados de una consulta sin LIMIT.
  • FOUND_ROWS: obtiene el resultado del último SQL_CALC_FOUND_ROWS ejecutados.

Por ejemplo, vamos a obtener de la tabla noticias,  los 5 registros de la página 2 con el sistema sin count (*):

$sql = "select SQL_CALC_FOUND_ROW id, titulo, contenido from noticias where publicado = 1 LIMIT 5,5";
 
$sqlCount = "select FOUND_ROWS() as total ";

El sistema no te libra de ejecutar 2 consultas SQL contra la BBDD pero sí que este par de funciones tienen un menor impacto sobre el sistema haciendo mucho más rápida la consulta de obtener el número de registros.

NOTA: En nuestro php.ini el valor mysql.trace_mode debe estar en Off.

Generar archivos de Excel con PHP y PEAR

5 de Diciembre de 2008

Gracias al sistema de componentes rehutilizables en PHP llamado PEAR (sitio web oficial).

El proyecto PEAR tiene como metas:

  • promover una biblioteca de código bien estructurada
  • mantener un sistema de distribución y mantenimiento de paquetes de código
  • promover un estilo de codificación estandar

Podemos añadir a los desarrollos nuevas funcionalidades sin necesidad de reinventar la rueda. Generalmente los componentes de PEAR son conjuntos de librerias y clases que hacen que el trabajo sea muy fácil. En este caso nos referimos a la generación de archivos Excel (.xls) con PHP.

El componente Spreadsheet Excel Writer de PEAR permite aplicar estilos a las celdas, aplicar formulas dentro de las hojas, generar hojas dentro del archivo entre otras muchas más cosas.

Para comprender su funcionamiento, veamos un ejemplo:

<?php
require_once('Writer.php');

// Creating a workbook
$workbook = new Spreadsheet_Excel_Writer();

// sending HTTP headers
$workbook->send("archivo.xls");

// Creating a worksheet
$worksheet =& $workbook->addWorksheet('');

//Styles
$titulo = &$workbook->addFormat();
$titulo->setBold();
$titulo->setSize(25);

$worksheet->setColumn(0,0,75);

$worksheet->setRow(14, 30);

$worksheet->writeString(14,1,'titulo',$titulo);

$worksheet->write(17,0,'17/12/2008');        

$worksheet->writeString(20,0,'texto');

$array = array('0' => 'elem1', '1' => 'elem2');

$worksheet->writeCol(17,5,$array,$normal);

$workbook->close();

?>
  • $worksheet->setColumn(0,0,75); –> Definir el ancho de la columna A. Se puede especificar un rango de columnas.
  • $worksheet->setRow(14, 30); –> Definir el alto de la fila 14 a 30px
  • $worksheet->writeString(14,1,’titulo’,$titulo); –> Escribir un String en la Fila 14, Columna B, con el formato definido en $titulo
  • $worksheet->write(17,0,’17/12/2008′); –> Escribir con el formato automatico, con el método write, aplica el formato de celda automático.
  • $worksheet->writeString(20,0,’texto’); –> Escribir un String sin formato en la Fila 20, Columna A.
  • $worksheet->writeCol(17,5,$array,$normal); –> Escribe una lista (los elementos de $array), empezando desde la Fila 17 de la columna D.

Como véis es bastante simple generar un Excel, si queremos poner bordes y colores, se complica algo más, pero al tratar la hoja como una gran matriz, sólo es laborioso. En la extensa documentación del componente encontráreis mucha más información sobre los métodos y propiedades, que no son pocas.

eyeOs, un sistema operativo en tu navegador

14 de Noviembre de 2008

eyeOS es una plataforma libre y de código abierto pensada para disponer de aplicaciones Web. Es un nuevo concepto de sistema operativo, en este caso, completamente, on-line.

La idea es disponer de un sistema centralizado, un servidor que hace funcionar eyeOS, y los clientes se conectan y pueden trabajar con las aplicaciones disponibles en la plataforma eyeOS. Es fácil imaginar las posibilidades que puede tener implementar un sistema centralizado como este en una empresa.

Escritorio de eyeOS

Escritorio de eyeOS

Un servidor con eyeOS y los usuarios accediendo a él, trabajando desde los navegadores Web de sus equipos. Todo queda centralizado y la sincronización de documentos y el trabajo en equipo se vuelve todo más fácil.

eyeOS esta escrito en PHP, así que solo basta disponer de un servidor Web y ya tenemos nuestro eyeOS funcionando.

eyeOS incorpora muchas aplicaciones en su paquete básico, soporte para hojas de cálculo, procesador de textos, un navegador Web, gestor de FTP, calculadora, correo electrónico, visor de imágenes y una infinidad más de aplicaciones y servicios nada envidiable a otro sistema operativo “real”. Existe mucha documentación en el sitio web de eyeOS para desarrollar sobre sus librerías y adaptar programas o escribir nuevas funcionalidades.

Hoja de Cálculo eyeOS

Hoja de Cálculo eyeOS

Quizás eyeOS esté iluminando el camino al futuro sobre los sistemas centralizados y en entornos productivos, instituciones y centros de enseñanza. Disponer de un conjunto de herramientas especializadas y que funcione con pocos recursos, a parte de un fácil acceso desde cualquier dispositivo que disponga de un navegador Web.

PHP International Conference Barcelona 2008

19 de Septiembre de 2008

El 27 de Septiembre de 2008 asistiremos a la Conferencia Internacional de PHP que tendrá lugar en Barcelona.

Ponentes: Marcus Bointon, Jordi Roura, Arno Schneider, Jens Bierkandt, Zoë Slattery, Pau Garcia-Milà, Scott MacVicar, Helgi Þormar and Derick Rethans

Charlas:

Charlas PHP Conference Barcelona

Charlas PHP Conference Barcelona

Lugar: Citilab Cornellà

Citilab Cornellà - PHP International Conference Barcelona

Citilab Cornellà - PHP International Conference Barcelona

¿Cómo exportar un PDF a un SWF online?

8 de Septiembre de 2008

En muchas ocasiones resulta necesario que un usuario pueda incorporar un PDF a una aplicación desarrollada en Flash, a través de un CMS o Gestor de contenidos. Esta herramienta debería poder exportar el archivo fuente PDF a un SWF automáticamente para alimentar la aplicación multimedia programada en Flash con la que se visualiza el contenido resultante.

Es posible convertir un PDF a un SWF directamente a través de la función PDF2SWF que viene integrada en la librería SWFTOOLS. El PDF2SWF genera automáticamente un SWF. Este SWF generado es de la versión del Flash Player 8 AVM1.

La librería SWFTOOLS se instala en servidor, para luego invocar la función PDF2SWF a través de una secuencia “exec” en el script de PHP. La siguiente es la línea de comandos base para generar un PDF:

pdf2swf [-opciones] archivo.pdf -o archivo.swf

Sin embargo, resulta imposible de integrar el archivo.swf en Flex directamente. Dado que Flex solo tiene un soporte bastante limitado para AVM1, ya que trabaja completamente con AVM2. Así que para poder exportar un PDF a un SWF en Flex, sería necesario contar con el SWF (archivo.swf) resultante del paso anterior y proseguir con los siguientes pasos:

  • Crear un nuevo proyecto de AS3 y Flash 9 de salida, con dimensiones proporcionales al tamaño de la página del PDF de entrada: A4, A2, etc.
  • Pintar un rectángulo que abarque del tamaño del documento.
  • Convertir el rectángulo en un MovieClip que llamaremos “vista” y que luego se deberá instanciar como “vista”.
  • Guardar el archivo como “visor.swf”
  • Añadir otra la línea de comandos a ejecutar via “exec” en el script de PHP: pdf2swf -B visor.swf archivo.swf archivo_compatible_flex.swf.
  • Luego, en Flex, invocaríamos el swf resultante myMovieClip.vista.gotoAndStop(1);

La experiencia de las exportaciones a SWF pueden convertirse en algo traumático, cuando hablamos de PDF de muchas páginas o cuando resultan de exportaciones que salen del Ilsutrator o Quark Express. Por eso en muchas ocasiones es preferible, en lugar de generar un SWF, exportar el PDF a un JPG.