Consultas avanzadas y plantillas simples
18 febrero, 2011
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]
[/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



marzo 12, 2011 a las 9:07 pm
Hola y muchas gracias por tu Post.
Pero la verdad no lo entiendo bien.
Por ejemplo yo tengo en dos dominios uno .com y .es, la mismo web, pero cambia, solo el texto del idioma, todo el texto lo puede cambiar por una administracion en el .es, el problema viene con las imagenes para no tener que subir las imagenes a los dos servidores, lo mas facil seria subir la misma administracion al .com. pero seria muy engorroso, no?, como haria para que a la hora de subir la imagen al .es la suba tambien al .com