Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/01/2008, 10:09
Avatar de Cristiaen
Cristiaen
 
Fecha de Ingreso: enero-2008
Mensajes: 29
Antigüedad: 16 años, 4 meses
Puntos: 0
Mensaje PHP+MySQL: instrucción FOR

Hola,

Estoy desarrollando una página web para un instituto de secundaria y quiero realizar una estructura de páginas en árbol; me explico:
  • SECCIÓN PRINCIPAL 1
    • SUBSECCIÓN A
      • PÁGINA 1
      • PÁGINA 2
        • SUBPÁGINA A
        • SUBPÁGINA B
          • SUBSUBPÁGINA 1
            • y así hasta el infinito
              • y más allá...
          • SUBSUBPÁGINA 2
        • SUBPÁGINA C
        • SUBPÁGINA D
      • PÁGINA 3
    • SUBSECCIÓN B
      • PÁGINA 4
        • SUBPÁGINA E
  • SECCIÓN PRINCIPAL 2
    • SUBSECCIÓN C
      • PÁGINA 5
      • PÁGINA 6

Para ello utilizo PHP+MySQL y he creado una única tabla para todo, con la siguiente estructura:




Según el campo 'type' y 'parent', puedo saber qué rango tiene el "documento" y la categoría padre a la cual pertenece. Por ello, el código PHP para crear un mapa web sería algo así:

Código PHP:
<?php

/**
 * @author Cristiaen
 * @copyright 2008
 */

function get_sections(){
    
$sql 'SELECT * FROM `pages` WHERE `type` = "section" ORDER BY `order`';
    
$go=db_query($sql); //db_query llama a otra función definida en functions_db.php usando el myqsl_query de toda la vida
    
return $go;
    
mysql_free_result($go);
}

function 
get_subsections($id){
    
$sql 'SELECT `name`, `slug`, `title`, `status`, `permissions` FROM `pages` WHERE `type` = "subsection" AND `parent` = "' $id '" ORDER BY `order`';
    
$go db_query($sql); //db_query llama a otra función definida en functions_db.php usando el myqsl_query de toda la vida
    
return $go;
    
myqsl_free_result($go);
}

function 
list_sections(){
    
$sections=get_sections();
    if(
mysql_num_rows($sections)>0){
        echo 
'<ul>';
        while(
$i mysql_fetch_assoc($sections)){
            echo 
'<li>' $i["name"] . '</li>';
                
$subsections get_subsections($i["id"]);
                if(
myqsl_num_rows($subsections)>0){
                    echo 
'<ul>';
                    while(
$j mysql_fetch_assoc($subsections)){
                        echo 
'<li>' $j["name"] . '</li>';
                    }
                    echo 
'</ul>';
                }
                
$pages get_pages($j["id"]);
                if(
mysql_num_rows($pages)>0){
                    echo 
'<ul>';
                    while(
$k mysql_fetch_assoc($pages)){
                        
//etcétera, etcétera
                    
}
                    echo 
'</ul>';
                }
                
//y así hasta el infinito
            
}
        echo 
'</ul>';
        }
}
    

?>
He estado buscando ejemplos sobre la instrucción FOR de PHP, pero no encuentro más que datos guardados en un array y no sé aplicarlo a mi caso.

¿Cómo se puede realizar todo eso con una instrucción for? Creo que si a la función while() le añado: mientras que haya páginas con la parent $variable_actual["id"]; igual funcionaría, pero lo he intentado y no me sale bien la sintaxis.

Si a alguien se le ocurre alguna otra idea para hacer el organizado de páginas de una forma más sencilla, se aceptan sugerencias .

Gracias por leer el post hasta el final y espero la ayuda con impaciencia

Un saludo!

Última edición por Cristiaen; 12/01/2008 a las 10:35