Ver Mensaje Individual
  #6 (permalink)  
Antiguo 09/09/2009, 13:23
samu22
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Mostrar una tabla completa

lo que podes hacer es algo similar a lo que hice yo, ya que en algun momento vas a necesitar saber de donde viene, solamente con el array completo podes trabajar todo desde una consulta. Lo que haria en tu caso es lo siguiente
Hago las consultas para crear el array con categorias iniciendo del padre (inicio) obtengo las imagenes de esa categoria
Código php:
Ver original
  1. function crearArboles($parent='0',$ini){
  2.  
  3.         global $DbConn;
  4.  
  5.         //buscamos las categorias con el parent
  6.  
  7.         $sql = 'SELECT * FROM categorias WHERE categoria_id ='.$parent;
  8.  
  9.         $res = $DbConn->query($sql);
  10.  
  11.         $numR = $DbConn->numRows($res);
  12.  
  13.         while($arr = $DbConn->fetchArray($res)){
  14.  
  15.            
  16.  
  17.                 $arrRet[$ini]['id'] = $arr['id'];
  18.  
  19.                 $arrRet[$ini]['categoria'] = $arr['Nombre'];
  20.                  
  21.                //comenzamos a recorrer una por una, primero vamos a comprobar si tiene post
  22.                //donde getImagenesByCategoriaId es una funcion que llama a la base de datos y extra las imagenes con ese id de categoria
  23.                if($this->getImagenesByCategoriaId($arr['id'])>0){
  24.  
  25.                    $arrRet[$ini]['imagenes'] = $this->getImagenesByCategoriaId($arr['id']);
  26.  
  27.                 }
  28.  
  29.                
  30.                 // buscas si tiene algun hijo. Si el numero es mayot a 0 te agrega el array hijo
  31.                 if($this->getNumHijosByCategoria($arr['id'])>0){
  32.                  
  33.                   // utilizo el metodo actual para hacer recursividad
  34.                    $arrRet[$ini]['hijo'] = $this->crearArboles($arr['id'],$ini);
  35.  
  36.                 }
  37.  
  38.                 $ini++;            
  39.  
  40.         }

con esta funcion crearas un array completo con toda la informacion y ordenado jerarquicamente, ahora para lo que necesitas vos es cuestion del recorrido del mismo,
supongamos que quiero mostrar todas las imagenes de la categoria padre, ejemplo fauna->peces o de naturaleza -> océano

el array quedaria de esta manera:
Cita:
(
[0] => Array (
[id] => 1
[categoria] => fauna
[imagenes]=> Array(
[0] => Array(
[id_imagen] =>1
[nombre] => fauna y diversidad
[path] => http://larala
)
)
[hijo] => Array (
[0] => Array{
[id] => 2
[categoria] => peces
[imagenes] => Array(
[0] => Array(
[id_imagen] =>1
[nombre] => fauna y diversidad
[path] => http://larala
)
)
)
)
)
luego para recorrer y poner las imagenes de fauna con las de sus hijos, habria que recorrerlo de la siguiente manera

Código php:
Ver original
  1. foreach($lista as $num => $categoria){
  2.             $ret ='<h1>'.$categoria['categoria'].'</h1>'; // devuelve fauna
  3.            
  4.             // recorremos las imagenes y las insertamos
  5.             // primero comprobamos que no esta vacio para que no tire error
  6.            
  7.             if(!empty($categoria['imagenes']){
  8.                 foreach($categoria['imagenes'] as $nImg => $imagen){
  9.                       $ret . = '<a href="'.$imagen['path'].'" ><img src="'.$imagen['path'].'" alt="'.$imagen['nombre'].'" /></a><br/>';
  10.                   }
  11.             }
  12.            // ahora recorremos las imagenes de las subcategorias
  13.           // aqui vamos a necesitar una funcion recursiva ya que al no saber cuantas subcategorias pueden existir es imposible determinar en una funcion cuantas veces tiene que recorrer, en principio una vez pero luego no sabemos
  14.          // en este caso la funcion recursiva solamente tiene que traer los datos
  15.          if(!empty($categoria['hijo']){
  16.                     $ret.= getImagen($categoria['hijo'];
  17.           }
  18. }
  19.                          
  20. function getImagen($lista){
  21.             foreach($lista as $num => $categoria){
  22.                
  23.                  // recorremos las imagenes y las insertamos
  24.                 // primero comprobamos que no esta vacio para que no tire error
  25.            
  26.                 if(!empty($categoria['imagenes']){
  27.                    foreach($categoria['imagenes'] as $nImg => $imagen){
  28.                      $ret . = '<a href="'.$imagen['path'].'" ><img src="'.$imagen['path'].'" alt="'.$imagen['nombre'].'" /></a><br/>';
  29.                    }
  30.                  }
  31.                  //recursiva para traer los imagenes de los hijos
  32.                  if(!empty($categoria['hijo']){
  33.                      $ret .= getImagen($categoria['hijo']);
  34.                   }
  35.               }
  36.        return $ret;
  37. }