Per rendere il codice dinamico basta semplicemente modificare la prima risposta di amadeusorrento:
function startmenu(menuId){
document.getElementById(menuId).style.display = "none";
}
function menufunc(menuId)
{
if(document.getElementById(menuId).style.display == "none")
{
startmenu(menuId);
document.getElementById(menuId).style.display = "block";
}
else if(document.getElementById(menuId).style.display == "block")
{
startmenu(menuId);
document.getElementById(menuId).style.display = "none";
} else
{
startmenu(menuId);
}
}
La parte di PHP (procedurale) copio il mio codice che ho riadattao alla mia tabella.
Io ho un'unica tabella contenente sia i padri che i figli ovvero :[TABLE="width: 100"]
[TD]padre1[/TD]
[TD]figlio1[/TD]
[/TR]
[TD]padre1[/TD]
[TD]figlio2[/TD]
[/TR]
[TD]padre1[/TD]
[TD]figlio3[/TD]
[/TR]
[TD]padre2[/TD]
[TD]figlio4[/TD]
[/TR]
[TD]padre2[/TD]
[TD]figlio5[/TD]
[/TR]
[TD]...[/TD]
[TD]...[/TD]
[/TR]
[TD]padreN[/TD]
[TD]FiglioN[/TD]
[/TR]
[/TABLE]
In caso diverso basta solo cambiare la prima query
La funzione $connect effettua la connessione al mio database
[PHP]
$query = "SELECT DISTINCT padre FROM figlio order by padre";
$connection = connect($query);
$risultato = mysql_query($query);
while ($campi=mysql_fetch_array($risultato))
{
$campo[]=$campi;
}
foreach($campo as $key=>$row)
{
$nome = $row['padre'];
echo "<a href="javascript:menufunc('menu".$key."')"><b>$nome</b></a><br>";
echo "<div id='menu".$key."' style="display: none;">";
$query = "SELECT Figlio FROM tabella WHERE Padre='".$row['Padre']."' group by Figlio ";
$connection = connect($query);
$risultato = mysql_query($query);
while($campo2 = mysql_fetch_array($risultato))
{
$nome_aux = $campo2['Figlio'];
echo "<p style="margin-left: 40px; margin-right: 40px;">$nome_aux</p>";
}
echo "</div>";
}
[/PHP]
la parte qui di seguito evidenziata
*echo "<div id='menu".$key."' style="display: none;">"; *
serve per visualizzare i padri tutti chiusi, se invece si vuole visualizzare la lista dei padri tutti aperti basta modificarlo in style="display: block;".
Spero di essere stata più chiara possibile.