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.

Al escribir clases que reutilizan el código de un modelo de datos de zenphp, uno se da cuenta de la facilidad con la que se pueden realizar ciertos aspectos técnicos como los filtrados de datos avanzados, de una forma realmente sencilla: en una línea de PHP.

Veamos como podemos diferenciar cuando un usuario manda un fichero mediante un modelo de datos (y su interfaz: el visualizador HTML) flash o una imagen y después representarlo con la plantilla que sea adecuada.

El campo imagen tiene el nombre del fichero .jpg,.png,.gif, o bien .swf. por lo tanto sólo tenemos que escribir una función donde queramos, por ejemplo, en mi caso me gusta ponerlas en el visualizador ya que el filtrado devuelto es una cadena HTML que escribe el ‘<img src=”…”>’ o bien el HTML del código flash en javascript o el objeto que sea…

Veamos la función:

 
function detectar_imagen_o_flash($campo){
  if (strtolower(substr($campo,-3,3))=="swf"){
   $p = new zen_plantilla("flash/producto.html");
   $p->reemplazar("flash",substr($campo,0,strlen($campo)-4));
   return $p->contenido;
  } else {
   return '<img src="/media/img/productos/'.$campo.'">';
  }
 }
?>

 

Ahora, desde donde queramos podemos llamar al modelo de datos donde está la imagen y representarla por medio de su visualizador html, por ejemplo, desde el visualizador html principal de la aplicación de nuestro sistema, donde hemos definido el modelo de datos en una variable llamada $productos en la aplicación, por lo tanto las dos líneas que necesitamos son:

 

$this->padre->productos->filtros_postprocesamiento = array(“imagen” => array($this->padre->productos->html,”detectar_imagen_o_flash”));

$this->c[‘contenido’] = $this->padre->productos->html->mostrar($datos[1],”productos/ver_producto.html”);

La primera especifica para el padre de este visualizador html de la aplicación, en su variable productos que es el modelo, los filtros para después de cargar los datos de una tupla, al campo imagen le vamos a pasar el filtro de la función que hemos creado en el paso anterior, pero tenemos que especificar dónde está desde aquí, la ruta por la jerarquía de nuestra aplicación es tan sencilla como ir al padre luego al modelo y a su visualizador, allí está la función.

La segunda línea guarda en el array de contenido (puntero al array de la aplicacion->contenido) en la etiqueta del contenido de nuestra web, la visualización de datos de una tupla especificada por el id numérico que es la llave principal de la tabla del modelo de productos y le decimos la plantilla que vamos a usar, donde habrá un hueco para el campo llamado “#imagen#”.

Y así concluye este ejemplo, algo tan sencillo puede verse funcionando.

Al detectarse una imagen ,se muestra <img> ,si es un flash se escribe el <object> con un <script>.

A triunfar!!

Compártelo

2 thoughts on “Howto: filtrar datos de forma avanzada pero pensando como un principiante

  1. PArece más difícil de lo que es, ahora bien, si el comando del enlace no te encuentra el visualizador (en el caso del ejemplo, que no encontrara imagenes tituladas “acelgas”) es casi como haber cometido un error de sintaxis en el mítico img src=””

    Bueno, sin duda es un buen joker.

  2. A ver, sensei, para eso, se confía en sque se haya diseñado una buena base de datos, es decir, que no se crea ninguna tupla (fila de datos del modelo) con una imagen en blanco sino que se le da un valor por defecto ,por ejemplo “blanco.gif”, que es una imagen de un pixel vacía o bien una imagen por defecto…entiendes?
    El Joker vale pasta, por qué tan seriooooooooo? XD

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.