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

    [mysql] organizzazione db x menu e sottomenu

    Ciao,

    vorrei creare un menu in questo modo:

    - menu 1
    - menu 2
    - - menu 2.1
    - - menu 2.2
    - - - menu 2.2.1
    - - - menu 2.2.2
    - - menu 2.3
    - menu 3
    - menu 4

    etc... vorrei avere la possibilita di creare "automaticamente" questi menu e sotto menu (senza limite di sottomenu).

    avevo pensato a una tabella tipo:

    id id_parent nome
    1 0 menu 1
    2 0 menu 2
    3 2 menu 2.1
    4 2 menu 2.2
    5 4 menu 2.2.1
    6 4 menu 2.2.2
    7 0 menu 3

    in questo modo l'id parent 2 fa riferimento al menu 2 l'idparent 4 fa riferimento al menu 2.2 che a sua volta fa rierimento al menu 2

    Ma come faccio a fare le query?!?!?!Sto impazzendo!!

    Help!!


  2. #2
    Anche io per fare i menu utilizzo una tabella simile alla tua (uso anche il campo livello, nonostante sia una ridondanza, per comodità mia).

    Forse non ho ben capito cosa ti serve, ma se vuoi creare il menu da pannello di amministrazione ti consiglio di fare così:

    1. ti crei una funzione che ti elenca tutta la struttura del menu in ordine gerarchico (deve essere una funzione ricorsiva che esce dalla ricorsione quando trova le foglie).

    2. questa struttura te la rappresenti nel tuo pannello di amministrazione (possibilmente in una tabella, lasciando 1 cella vuota per indentare le voci di livello 2, 2 celle vuote per indentare le voci di livello 3 e via dicendo).

    3. fai in modo che cliccando sui testi del menu ritorni alla stessa pagina ma passando l'id del menu selezionato (qualcosa del tipo <a href="menu.php?id=6">

    4. inserisci a inizio pagina $id_tmp = $_GET['id']; e poi crei due pulsanti: uno elimina, che ti porta alla query di eliminazione (DELETE FROM $tabella WHERE ID=$id_tmp) e uno che ti porta alla query di aggiunta (ti crei un form dove inserisci il nome e poi fai l'insert con ID_Parent=$id_tmp)

    Non so se quanto scritto possa esserti d'aiuto e se era quello che cercavi, ma io me la sono sempre cavata così.

  3. #3
    Grazie per la risposta,

    in parte è proprio quello che mi serve, solo che il mio problema sta proprio nel rapresentare la struttura.

    Non saprei come creare la funzione ricorsiva.

    Dovrei selezionare tutti i menu dove parent = 0 poi, per ogni id estrapolato, tutti gli altri menu dove parent = all'id appena estrpolato e cosi via...

    pero non so come rendere questa funzione "infinita"...

    Grazie per l'aiuto!Ciao!

  4. #4
    Questa è una funzione ricorsiva che avevo fatto per un mio vecchio menu; guarda se puoi trarne qualche spunto utile.

    Codice PHP:
    /*    La funzione struttura_menu_all (cerca_figli è una funzione di ausilio)
     *    restituisce un array contenente tutta la struttura del menu a partire dalla 
     *    radice scelta ed ordinandolo automaticamente, indipendentemente dall'ordine
     *    di inserimento nel database.
     *    La struttura della tabella deve contenere un campo $id_main e un campo Padre.
    */
    function cerca_figli($table_name$id_main$id_corrente) {
        static 
    $array_statico;
        
    $query "SELECT $id_main FROM $table_name WHERE Padre=$id_corrente";
        
    $res mysql_query($query);
        while(
    $riga mysql_fetch_array($res)){
            
    $id_main_act $riga[$id_main];
            if (!
    foglia($table_name$id_main_act)) {
                
    $pos count($array_statico) + 2;
                
    $array_statico[$pos] = $id_main_act;
                
    //echo"ARRAY[$pos] = $id_main_act 
    ";
                cerca_figli(
    $table_name$id_main$id_main_act);
            }
            else {
                
    $pos = count($array_statico) + 2;
                
    $array_statico[$pos] = $id_main_act;
                //echo"
    ARRAY[$pos] = $id_main_act 
    ";
            }
            
        }
        return(
    $array_statico);


  5. #5
    grazie, la guardo subito, solo una cosa la funzione foglia cosa fa?

    perche credo che mi dia errore se nn la dichiaro...

    Ciao Grazie!

  6. #6
    Ti dice se l'elemento selezionato è una foglia...
    però ti ripeto, devi trarre qualche spunto e adattarlo al tuo progetto; io non ricordo neanche bene in che contesto l'avevo utilizzato

    Codice PHP:
    function foglia($table_name$id_folder) {
        
    $query "SELECT * FROM $table_name WHERE Padre=$id_folder";
        
    $res mysql_query($query);
        if (
    mysql_fetch_array($res)) {
            return(
    0);
        }
        else {
            return(
    1);
        }


  7. #7
    wow funziona benissimo una paio di modifiche ed è tutto ok!!

    Grazie 1000 per l'aiuto!!!!

    Ciao!!

  8. #8
    sisi avevo immaginato l'avevo fatta simile alla tua!

    CIao razie ancora!

  9. #9
    Prego, ciao

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.