Hola
Para el portal que diseño tengo ese mismo problema pero aun sigo trabajando en él, aqui te dejo el script con el cual estoy avanzando hasta que logre algo parecido a lo que tu tambien quieres.
Código PHP:
if(isset($stat)){
$a = unserialize(base64_decode($stat));
}
if(isset($node)){
if(!isset($a[$node])){
$a[$node]=true;
} else {
if($a[$node]==true){
$a[$node]=false;
} else {
$a[$node]=true;
}
}
}
$stat = base64_encode(serialize($a));
echo "<table>";
echo "<tr><td><a href=$PHP_SELF?stat=$stat&statid=menu1&node=1>+</td><td>Opcion1</td></tr>";
if($a[1]){
echo "<tr><td>--</td><td><a href=page.htm>Opcion1_1</td></tr>";
echo "<tr><td>--</td><td><a href=page.htm>Opcion1_2</td></tr>";
}
echo "<tr><td><a href=$PHP_SELF?stat=$stat&statid=menu2&node=2>+</a></td><td>Opcion2</td></tr>";
if($a[2]){
echo "<tr><td>--</td><td><a href=page.htm>Opcion2_1</td></tr>";
echo "<tr><td>--</td><td><a href=page.htm>Opcion2_2</td></tr>";
}
echo "</table>";
aqui si deseas añadir mas opciones
echo "<tr><td><a href=$PHP_SELF?stat=$stat&statid=menu2&node=2>+</a></td><td>Opcion2</td></tr>";
echo "<tr><td><a href=$PHP_SELF?stat=$stat&statid=menu2&node=3>+</a></td><td>Opcion2</td></tr>";
echo "<tr><td><a href=$PHP_SELF?stat=$stat&statid=menu2&node=4>+</a></td><td>Opcion2</td></tr>";
etc
y para el despliegue solo agregar otro echo
echo "<tr><td>--</td><td><a href=page.htm>Opcion2_3</td></tr>";
echo "<tr><td>--</td><td><a href=page.htm>Opcion2_4</td></tr>";
espero que te sirva de algo esto