Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Problema con menu espandibile

    Salve a tutti...
    Partendo dal presuppo che non so assolutamente NIENTE di javascript vi chiedo aiuto!
    Ho trovato su internet un menu espandibile carino che fa proprio al caso mio...ma dovrei apportare alcune modifiche e non sono in grado!! Chi mi aiuta???
    Prima di tutto vi allego l'immagine del menu, per farvi rendere conto di com'è!!!
    Poi vi allego il codice javascript che si trova nel file expand.js:
    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";
    	 }
    }
    }
    Poi vi allego il codice del file php che richiama il menu javascript:
    Codice 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("xxx""xxx""xxx"); 
                    
    $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($queryprimaOCI_NUM OCI_RETURN_NULLS))){
                        echo(
    "[*]<h3>".$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($querysecondaOCI_NUM OCI_RETURN_NULLS))){
                            echo (
    '[*][url="prova_menu'.$j.'_'.$i.'.php"]'.$row[1].'[/url]');
                            
    $i++;
                        }                    echo(
    '[/list]');
                        
    $j++;
                    }
                    
    ?>
                [/list]
            </div>
        </body>
    </html>
    Tra questi tag[*]<h3> è contenuta la voce di menu principale nell'immagine ad esempio "Accettazione" e tra questo tag[*] è contenuta la voce del sotto menu.
    Il menu è espandibile una sezione alla volta.
    Penso di avervi dato tutto quello che vi serve per capire....
    Ora le modifiche che vorrei fare in ordine di importanza, sono due:
    1- (IMPORTANTISSIMO) Far si che ogni utente possa vedere solo la parte che gli compete. Come vedete nella pagina php ho una variabile che si chiama $macro_utente che contiene il nome (per esempio) "Accettazione". Quindi a me basterebbe inserire un controllo che dice che se la voce di menu che l'utente clicca è "Accettazione" (cioè uguale a $macro_utente) allora la voce si espande altrimenti se clicca sulle altre voci non devono espandersi. Come si fa questa cosa???
    2- Inoltre vorrei aggiungere un altro livello, cioè ogni sotto menu o alcuni sottomenu devono aprirsi ancora, come posso fare???
    VI PREGO....AIUTATEMI!!! Non so più dove sbattere la testa!!!
    Grazie

    Sara
    Immagini allegate Immagini allegate

  2. #2
    Ciao Saretta,
    non sono sicuro di aver capito esattamente cosa vuoi ottenere comunque:
    se vuoi che sia espandibile solo UNA voce in base al valore di $macro_utente, potresti modificare il PHP così:
    echo("[*]<h3 id='".$riga[1]."'>".$riga[1]."</h3><ul>");
    (assegni un id univoco ad ogni voce, questo implica che $_SESSION['macro'] sia uguale ad uno, e solo uno, dei valori di $riga[1])

    La funzione BuildList dovrebbe essere:
    function BuildList(){
    document.getElementById("<?php echo($_SESSION['macro']); ?>").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";
    }
    }

  3. #3
    Hai capito bene...voglio fare proprio quello.
    Ma se faccio come mi hai detto tu non funziona.
    Infatti mi mostra il menu completamente espanso e cliccabile da tutte le parti
    Dove sbagliamo???

  4. #4
    Posta un link alla pagina.

  5. #5
    Non so come fare...sto facendo tutto in locale...come posso postarti il link???

  6. #6
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    continua qui
    http://forum.html.it/forum/showthrea...readid=1470913
    basta una sola discussione!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.