Te la spiego in breve, è molto semplice.
In pratica hai una tabella nel db che chiami... categorie.
i campi sono id,name,parent.
Se parent = 0 significa che la categoria è una root.
Crei una funzione che estragga tutti i campi dove parent = $cat.
ti faccio un esempio per chiarirti le idee:
id | name | parent
1 | frutta | 0
2 | rossa | 1
3 | mele | 2
4 | ciliege | 2
5 | verde | 1
6 | pere | 5
7 | gialla | 1
8 | banane | 7
Come vedi tutti i record sono collegati tra loro dal campo parent.
Mettiamo il caso che passi alla tua funzione l'id 0 ti verrà mostrato "frutta".
con un collegamento del tipo
<a href="page.php?cat=$id> potrai passare alla funzione l'id della categoria di cui vuoi vedere le sottocategorie.
nel nostro esempio verrà mostrato
<a href="page.php?cat=1>Frutta</a>
Cliccando sul link la funzione estrarrà dal db tutti i record dove parent = 1 mostrando quindi
rossa
verde
gialla
Fin qui tutto bene
Mettiamo il caso tu voglia avere tutto l'albero. Quindi mostrare qualcosa del tipo:
codice:
frutta
|
+-- rossa
| |
| +--mele
| +--ciliege
+-- verde
| |
| +--pere
+-- gialla
|
+--banane
Con il sistema di prima non funzionerebbe.
Ecco che entra in gioco la ricorsione.
In pratica mettiamo il caso che la tua funzione di prima si chiami ricorsione.
All'inizio era così
Codice PHP:
function ricorsione($cat)
{
$query = "SELECT * FROM categories WHERE parent = '$cat'";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{
echo $row['name'];
}
}
ora la funzione dovrà essere così:
Codice PHP:
function ricorsione($cat)
{
$query = "SELECT * FROM categories WHERE parent = '$cat'";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{
ricorsione ($row['id']);
echo $row['name'];
}
}
In questo modo avri stampato tutto l'albero delle categorie.
Comincia a fare una prova così per capire bene il meccanismo. Poi magari andiamo avanti con la spiegazione magari per ottenere un path e per migliorare la funzione. Ciao!