Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/11/2009, 02:20
Avatar de Triby
Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Lista complicada

Tu funcion Foro(...) es recursiva, sin filtros y cada vez que la mandas llamar vuelve a leer todos los foros.

Lo mas facil seria mas o menos asi (adapta las variables):
Código php:
Ver original
  1. // Inicializas la matriz
  2. $foros = array();
  3. $result = mysql_query('SELECT * FROM foros') or die(mysql_error());
  4. while($row = mysql_fetch_assoc($result)) {
  5.     $foro = $row['idforo'];
  6.     $padre = $row['idpadre'];
  7.     // Verificas si ya se creo la matriz para el $padre
  8.     if(!isset($foros[$padre]))
  9.         $foros[$padre] = array();
  10.     // Agregas la informacion del foro donde corresponde
  11.     $foros[$padre][$foro] = $row;
  12. }
  13.  
  14. // Puedes hacer un var_dump($foros); para que veas la estructura
  15. // en $foros[0] quedan solo los foros que no tienen padre (es cero)
  16. // segun tu ejemplo:
  17. //      $foros[0] tendra 1 => datos foro 1, 5 => datos foro 5
  18. //      $foros[1] tendra 2 => datos foro 2,  4 => datos foro 4
  19. //      $foros[2] tendra  3 => datos foro 3
  20. //      etc...
  21.  
  22. echo '<ul>';
  23. listar_foros(0); // Ejecutas la funcion que creara el listado, partiendo del index
  24. echo '</ul>';
  25.  
  26. return;
  27.  
  28. function listar_foros($padre) {
  29.     global $foros;
  30.     foreach($foros[$padre] as $foro => $datos) {
  31.         echo '<li>';
  32.         echo "<a href=\"{$datos['link_del_foro']}\">{$datos['nombre_del_foro_']}</a>";
  33.         // Verificas si el foro tiene "hijos"
  34.         if(isset($foros[$foro])) {
  35.             echo '<ul>';
  36.             listar_foros($foro);
  37.             echo '</ul>';
  38.         }
  39.         echo '</li>';
  40.     }
  41. }
__________________
- León, Guanajuato
- GV-Foto