Allora... se vuoi visualizzare tutte le pagine ti conviene fare UNA query con tutto il contenuto della tabella e poi Leggere i dati in maniera ricorsiva.
allora fai così:
Codice PHP:
//Includi i file per la connessione
$db; //Metti che sia il link al DB
//A me interessano l'id della pagina, il nome e l'id_parent, ordinati secondi l'ordine indicato
$query = "SELECT id_pagina, testo, id_parent FROM tabella_pagine ORDER BY ordine ASC";
$result = mysql_query($query, $db);
$resultArray = array();
while($row = mysql_fetch_assoc($result))
{
$resultArray[] = $row;
}
//Ora in resultArray ci sono tutte le pagine
//Chiamo la mia funzione printPage su tutte le pagine ROOT
for($i = 0; $i < count($resultArray); $i++)
{
if($resultArray[$i]['id_parent'] == null)
{
$resPage = $resultArray[$i];
unset($resultArray[$i]);
printPages($resPage);
}
}
//Definisco una funzione che stampa la pagina passata e tutte le sue pagine figlie, al quale indico un numero di spazi da fare prima della pagina
function printPages($page, $spaces = 0)
{
globals $resultArray;
$id = $page['id_pagina'];
for($i = 0; $i < $spaces; $i++)
echo "";
echo $page['testo'];
foreach($i = 0; $i < count($resultArray); $i++)
{
if($resultArray[$i]['id_parent'] == $id){
/****
* Questo è un fix per evitare che sia troppo lungo in caso di molte pagine, ma non sono sicuro che funzioni:
* Dato che una volta stampati non mi interessa possano essere rivisti nella lista li rimuovo con un unset
****/
$childPage = $resultArray[$i];
unset($resultArray[$i]);
printPages($childPage, $spaces + 1);
}
}
}
Dovrebbe andare, l'unica cosa che non sono sicuro è se l'unset non cancelli completamente la voce, togliendola anche dalla variabile dove l'ho salvata. Provalo e, se non funziona, togli l'unset, ma questo riducerebbe le prestazioni se hai molte pagine.