Consultas avanzadas y plantillas simples

Cuando tenemos un sistema de aplicaciones web multidominio, las tareas como comprobar si un fichero existe cuando está en otro dominio virtual se pueden complicar.

Con el framework zenphp es fácil evitar el problema enfocándolo de una manera práctica y sencilla, he aprendido muchísimo desde que empecé con él en el año 2005, este truco os lo regalo, como todo lo que he hecho en mi trabajo 🙂

Veamos la solución al problema con un ejemplo sencillo: tengo que poner una imagen de miniatura en una parte de la web en cada dominio, pero el usuario es posible que no haya subido ninguna imagen de miniatura y si no lo ha hecho debemos crear un “thumbnail” famoso, pero,..y aquí viene la cuestión del millón de dólares…¿cómo podremos hacer la comprobación de existencia de un fichero si los almacenamos en el servidor principal que es virtual y no queremos crear ningún servicio web porque no queremos perder tiempo?

Lo primero que tenemos que hacer es crear una plantilla HTML con una etiqueta genérica del sistema de plantillas de zenphp (basado en una simple substitución de etiquetas entre #almohadillas# desde un array) de forma que el atributo src será de la forma:

<img src=”http://www.Mi_Dominio.es/#foto1#” width=”290″ height=”135″/>

bien, podéis fijaros que el dominio utilizado es donde reside nuestro almacén de imágenes, y que se restringe a un ancho y alto para mayor seguridad.

El siguiente paso es evidente, vamos a ir al visualizador (concepto mezcla de controlador/vista del patrón mvc), en este caso el de productos, la función que muestra el listado de productos, donde encontraremos en su lista de campos una modificación de foto1 por

if(miniatura<>”,miniatura,id) as foto1

así, le decimos a mysql: si ves que hay miniatura, quiero la miniatura, en otro caso el id de producto, pero lo llamamos en cualquier caso foto1 a este campo, tal como decía en la plantilla HTML.

Ahora, sabremos si el usuario ha usado una miniatura con una simple condición

[php]

if (is_numeric($dato[‘foto1’]))
$dato[‘foto1’] = “img/{$dato[‘foto1’]}/290/135/”; //redimensionada con la original
else
$dato[‘foto1’] = “fotos/thumbs/{$dato[‘foto1’]}”; //miniatura del usuario

[/php]

Lo cual viene a ser, que si es un ID, no hay miniatura y utilizaremos un script básico de creación de thumbnail (con redirección al nuevo fichero creado al terminar la operación de generación) y en otro  caso, muestra la miniatura.

Observar que en la generación de thumbnail con PHP se utiliza como parámetros el ID del producto para extraer la primera imagen y el tamaño, es decir, alto y ancho (290×135).

aquí está la función para crear el thumbnail:

[php]

/**

* Construye una imagen a partir del id de un producto
*  * @param array $datos  */

function img($datos=null){
$foto = $this->padre->bd->seleccion_unica(“foto1 from productos where id=”.intval($datos[0]));
if (!$foto) die(“No existe la imagen”);
//existe el thumbnail?
$w  = isset($datos[1])&&$datos[1]<600&&$datos[1]>20?abs(intval($datos[1])):101;
$h  = isset($datos[2])&&$datos[2]<600&&$datos[2]>20?abs(intval($datos[2])):100;
if (!file_exists(ZF_DIR_PPAL.”fotos/thumbs/$w$foto”)){

//crear el thumbnail

require_once(ZF_DIR_LIBRERIAS.”clase_zen_Imagen.php”);

$zi =& new zen_Imagen(ZF_DIR_PPAL.”fotos/$foto”,ZF_DIR_PPAL.”fotos/thumbs/$w$foto”);

$zi->redimensionar($w,$h);

}

//Redirigir a la imagen thumbnail

header(“Location: /fotos/thumbs/$w$foto”);

}

[/php]

Espero que os sirva y os lo paséis tan bien como en mi caso programando 😉

Encontrar el equilibrio en las cosas pequeñas

Siendo detallista y equilibrado encontraremos que nuestro trabajo se ha convertido en algo sumamente sencillo de mantener.

El caso más fundamental de lo que estoy hablando es cuando un cliente nos pide un nuevo cambio que requiere modificar, en este caso añadir un campo nuevo de imagen de miniatura a una tabla de noticias y,bien, ahora tenemos que añadirlo en la interfaz de administración además de en la BD y en el cliente que habíamos escrito…

Sabemos que podemos implementar la lógica de administración fácilmente haciendo copio y pego de la parte del formulario de edición de la noticia cambiando el nombre por el del campo de la imagen ,guardado de ficheros, procesamiento de imágenes “thumbs” , etc.

Lo que debemos recordar es que podemos encontrar el equilibrio en el funcionamiento por medio de las sentencias IF de SQL, de modo que si ya teníamos un campo imagen y ahora lo que necesitamos es mostrar una miniatura pero no queremos cambiar el resto, simplemente modificamos la línea en la que se nombran los campos para realizar las operaciones de la siguiente forma:

si antes se hacia un “Select imagen from noticias” ,ahora sólo tenemos que cambiar “imagen” por

IF(miniatura=”,imagen,miniatura) as imagen

de forma que el resto de la lógica del programa se mantiene intacta, sólo hemos hecho un cambio más las operaciones básicas para administrar los datos con el campo 😉

Ahora sólo queda relajarse sabiendo que todo funciona sin quebrarnos demasiado la cabeza jeje

Howto: filtrar datos de forma avanzada pero pensando como un principiante

En principio, parece que el título del post es algo de lo más paradójico, pero nada más lejos de la realidad, en zenphp siempre hay un Joker, y éstos son los trucos que enseño en este blog, triquiñuelas rápidas y complejas pero fáciles de entender y modificar en poco tiempo.

Continue reading

Gana una camiseta que detecta el wifi votando

Atención: No es que la camiseta necesite votar para detectar WiFi,es que tú necesitas votar para ganarla!

¡Vota aquí! para entrar en el sorteo en el que puedes ganar una camiseta que detecta el Wi Fi.

Vídeos:

Imágenes a elegir: Continue reading