Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Creazione albero?

  1. #1

    Creazione albero?

    Ciao ragazzi!
    Dovrei realizzare un albero tipo questo:

    NOME
    |Capitolo 1
    -|PARAGRAFO 1
    --|SOTTO PARAGRAFO 1
    --|SOTTO PARAGRAFO 2
    -|PARAGRAFO 2
    --|SOTTO PARAGRAFO1
    |Capitolo 2
    -|PARAGRAFO 1
    --|SOTTO PARAGRAFO 1
    -|PARAGRAFO 2
    --|SOTTO PARAGRAFO1
    --|SOTTO PARAGRAFO 2
    --|SOTTO PARAGRAFO 3

    c'è qualche classe che si trova da poter riusare?
    Grazie ciao!
    /*no comment*/

  2. #2
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    think simple think ringo

  3. #3
    Ti crei una tabella, chiamiamola "menu", che ha questi campi:

    id_menu (autoincrementante, chiave primaria)
    intestazione (stringa, intestazione del ramo)
    id_menu_padre (per i sotto-elementi)
    livello (intero, riferimento interno)

    Facciamo conto che il livello 1 sia formato da tutti i capitoli (elemnti "padri"), il livello 2 dai paragrafi (elementi "figli") ed il livello 3 dai sottoparagrafi (sotto-elementi figli). Questo sistema ti permette potenzialmente di estendere all'infinito le ramificazioni dell'albero, basta andare avanti con i livelli.

    Il campo "id_menu_padre" vale 0 per gli elementi di livello 1 (padri), mentre per tutti i sotto-elementi deve contenere l'id dell'elemento di livello immediatamente superiore sotto il quale risiede.

    Ad esempio, l'id_menu_padre del "Capitolo 1" sarà 0; quello del "Paragrafo 1" sarà l'id_menu del "Capitolo 1"; quello del "Sottoparagrafo 2" sarà l'id_menu del "Paragrafo 1" ecc ecc.

    Una volta costruita questa tabella ti serve soltanto una fuzione ricorsiva che vistualizzi l'albero con le giuste ramificazioni. La funzione non deve fare altro che ricercare i sotto-elementi di un elemento passato, visualizzarli e richiamare se stessa incrementando il livello. E deve partira da 0.

    Ho buttato un po' di codice al volo, non l'ho testato ma dovrebbe funzionare:

    Codice PHP:
    function printMenuTree($id_menu_padre$livello$spacer_img='img/spacer.gif') {
        global 
    $dbLink;
        
        
    $spacer_width 1;
        if (
    $livello>1)
            
    $spacer_width 15 $livello;        // larghezza dell'immagine che crea lo spostamento sulla destra dei sotto-elementi
        
        
    $rs=mysql_query("SELECT id_menu, intestazione, livello, id_menu_padre FROM menu WHERE id_menu_padre=".$id_menu_padre." ORDER BY intestazione"$dbLink) or die ("Impossibile eseguire la query [" mysql_error() . "]");
        while (
    $row=mysql_fetch_array($rs)) {
            
    $id_menu $row['id_menu'];
            print(
    "<tr><td>[img]".$spacer_img."[/img]".stripslashes($row['intestazione'])."</td></tr>");
            
            
    printMenuTree($id_menu$livello+1$spacer_img);
        }
        unset(
    $row);
        unset(
    $spacer_width);
        
    mysql_free_result($rs);

    $dbLink è il puntatore alla connessione MySQL (quello che viene creato con la funzione "mysql_connect" quando ti connetti al database).

    $spacer_img è il percorso+nome di un'immagine GIF di 1x1 pixel, trasparente, che server simulare la spaziatura verso destra dei sotto-elementi, quando crei l'albero.

    Ora la funzione ricorsiva è fatta, non ti resta che richiamarla dalla tua pagina php in questo modo:

    Codice PHP:
    print("<table border=0 cellpadding=0 cellspacing=0 class='testo' width='100%'>");
    printMenuTree(00'img/spacer.gif');
    print(
    "</table>"); 
    Dovrebbe funzionare senza problemi.... fammi sapere.

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.