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á...
- y así hasta el infinito
- SUBSUBPÁGINA 2
- SUBSUBPÁGINA 1
- SUBPÁGINA C
- SUBPÁGINA D
- PÁGINA 3
- SUBSECCIÓN B
- PÁGINA 4
- SUBPÁGINA E
- PÁGINA 4
- SUBSECCIÓN A
- SECCIÓN PRINCIPAL 2
- SUBSECCIÓN C
- PÁGINA 5
- PÁGINA 6
- SUBSECCIÓN C
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>';
}
}
?>
¿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!