Menu espandibile

saretta883

Nuovo Utente
10 Ago 2011
2
0
0
Ciao a tutti...volevo sottoporvi il mio PROBLEMA!!
Prima di tutto occorre specificare che sono zero con javascript. Per questo motivo quando mi sono trovata a dover fare un menu espandibile per il mio sito sono corsa subito a cercare qualcosa di pronto in rete.
Vi posto il codice del menu espandibile che ho trovato e che utilizzo:
Codice:
var prev= null;

window.onload=function(){
if(document.getElementsByTagName && document.getElementById){
    document.getElementById("nav").className="jsenable";
    BuildList();
    }
}

function BuildList(){
var hs=document.getElementById("nav").getElementsByTagName("h3");
for(var i=0;i<hs.length;i++){
    hs[i].onclick=function(){
			if(this.parentNode.className!="show"){
				this.parentNode.className="show";
				if(prev && prev!=this.parentNode) prev.className="hide";
					prev=this.parentNode;
				}
			else this.parentNode.className="hide";
			}
    }
}
Questo qui invece è il codice php della pagina che mostra il menu e che lo popola mediate le voci presenti in un db:
PHP:
<html>
	<head>
		<title>Menù</title>
	</head>
	<link rel="stylesheet" type="text/CSS" href="css.CSS">
	<script type="text/Javascript" src="expand.js"></script> 
	<body>
		<div id="nav">
			<ul>
				<?php
				session_start();
				$macro_utente=$_SESSION['macro'];
				$c=oci_connect("console", "console", "sigla40t.zoo.intra"); 
				$queryprima=oci_parse($c,"select m.cod_macro livello1, m.des_macro des_livello1
							from con_macro m
							order by m.ordine");
				oci_execute($queryprima);
				$j=1;
				while (($riga=oci_fetch_array($queryprima, OCI_NUM + OCI_RETURN_NULLS))){
					echo("<li><h3 id='".$riga[1]."'>".$riga[1]."</h3><ul>");
					$macro=$riga[0];
					$queryseconda=oci_parse($c,"select m.cod_macro livello1, fu.des_funzione des_livello2
								from con_macro m, con_menu me, con_funzioni fu
							              where m.cod_macro = me.cod_macro and me.cod_funzione = fu.cod_funzione and m.cod_macro='$macro'
                                                                                                                order by m.ordine,me.ordine");
					oci_execute($queryseconda);
					$i=1;
					while (($row=oci_fetch_array($queryseconda, OCI_NUM + OCI_RETURN_NULLS))){
						echo ('<li><a href="prova_menu'.$j.'_'.$i.'.php" target="login">'.$row[1].'</a></li>');
						$i++;
					}
					echo('</ul></li>');
					$j++;
				}
				?>
			</ul>
		</div>
	</body>
</html>
Questo menu mi permette di espandere solo una voce alla volta e questo mi va benissimo, il problema è che vorrei che ogni voce si aprisse solo all'utente giusto. Mi spiego meglio, ogni utente a un profilo ed in base a questo può vedere solo una voce del menu. Quindi a me servirebbe inserire un controllo nel codice javascript che dice: Se la voce principale del menu è = alla voce menu dell'utente ($macro_utente=$_SESSION['macro'];) allora espandi, altrimenti nascondi. Non penso sia una cosa difficile per uno che ci capisce ma per me è davvero impossibile. Ho fatto diversi tentativi ma non c'è stato proprio verso!
Potete aiutarmi???
Un'altra modifica che vorrei apportare (ma è secondaria) è la seguente: aggiungere un ulteriore sottomenu, cioè rendere espandibile alcune voci del sottomenu!!!
Help me!!!
Grazie in anticipo

Sara
 
ciao
sarebbe meglio che tu agissi su php (layto servere) in quanto js può essere aggirato.
forse dico una bestialità (tra l'altro mi sembra che tu usi oracle che non conosco), ma non potresti estrarra dalla select anche il codice macro dell'utente e
PHP:
<?php
//.....
while (($row=oci_fetch_array($queryseconda, OCI_NUM + OCI_RETURN_NULLS))){
	$macro_estratta=$row['macro'];
        if($macro_estratta==$_SESSION['macro']){
		echo ('<li><a href="prova_menu'.$j.'_'.$i.'.php" target="login">'.$row[1].'</a></li>');
		$i++}
	}
}
//....
?>

se non funzia spero che risponda qualcunaltro
 
PHP:
<?php
//.....
while (($row=oci_fetch_array($queryseconda, OCI_NUM + OCI_RETURN_NULLS))){
	$macro_estratta=$row['macro'];
        if($macro_estratta==$_SESSION['macro']){
		echo ('<li><a href="prova_menu'.$j.'_'.$i.'.php" target="login">'.$row[1].'</a></li>');
		$i++}
	}
}
//....
?>
Voglio ringraziarti di cuore...sei stato no gentilissimo...di più!!! Sono riuscita a risolvere il problema che mi sembrava veramente insormontabile!!!
GRAZIE GRAZIE e ancora GRAZIE....
ora ti posto la soluzione:
PHP:
while (($riga=oci_fetch_array($queryprima, OCI_NUM + OCI_RETURN_NULLS))){
					echo("<li><h3 id='".$riga[1]."'>".$riga[1]."</h3><ul>");
					$macro=$riga[0];
					$queryseconda=oci_parse($c,"select m.cod_macro livello1, m.des_macro livello1_esteso,  
                                                                                                                            fu.des_funzione des_livello2
								   from con_macro m, con_menu me, con_funzioni fu										   where m.cod_macro = me.cod_macro and 
                                                                                                                             me.cod_funzione = fu.cod_funzione and 
                                                                                                                             m.cod_macro='$macro'
								   order by m.ordine,me.ordine");
					oci_execute($queryseconda);
					$i=1;
					while (($row=oci_fetch_array($queryseconda, OCI_NUM + OCI_RETURN_NULLS))){
						if ($row[1]==$macro_utente){
							echo ('<li><a href="prova_menu'.$j.'_'.$i.'.php" target="login">'.$row[2].'</a></li>');
						}
						$i++;
					}
					echo('</ul></li>');
					$j++;
				}

In pratica ho modificato la query, ho inserito l'if come mi hai consigliato tu mettendo però il contatore "i" fuori dal ciclo if e ora funzionaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!!!!!!!!!!! :)
GRAZIE GRAZIEEEEEEEEEEEEEEEEEEEEEEEEE
ps. per aggiungere altri sottomenu...hai qualche idea??? :)
 

Discussioni simili