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

    costruire menù ad albero sapendo SOLO l'id della foglia

    dovrei costruire una funzione che dato un id in input mi restituisca la struttura gerarchica dell'intero db, ma non so da che parte cominciare.
    La mia tabella SQL è questa:
    codice:
    CREATE TABLE `CATEGORIE` (
      `CATEGORIA_ID` int(10) unsigned NOT NULL auto_increment,
      `CATEGORIA_PADRE_ID` int(10) unsigned NOT NULL default '0',
      `CATEGORIA` varchar(255) default NULL,
      `DESCRIZIONE` text,
      `META` text,
      PRIMARY KEY  (`CATEGORIA_ID`)
    )
    ossia una tabella ricorsiva. Il problema sta nel costruire l'albero di navigazione...Il primo livello non c'è nessun problema. Ho fatto una funzione a cui passo l'id della categoria selezionata e lei mi "disegna" l'albero ( sono liste annidate con i css ). Però dal secondo in poi ho un problema.

    Io vorrei usare la stessa funzione e renderla ricorsiva in modo che mi disegni l'intero albero, ma non so da che parte cominciare...


    vediamo di fare un esempio.
    Io nel mio db ho le 2 categorie madri
    Frutta
    Verdura
    Al primo ingresso nella pagina vedo solo queste due, nel momento in cui ne seleziono una io ricarico la pagina passando l'id della categoria selezionata, in modo da selezionarla al mometno del ricaricmaneto. Mettiamo di aver selezionato frutta, quindi vedrei:
    Frutta
    |
    +--> Fresca
    |
    +---> Secca
    Verdura


    Ora se io seleziono Fresca dovrebbe comportarsi nel medesimo modo. Io vorrei richiamare la stessa funzione passando l'id di Fresca, ma facendo in modo che si ridisegni TUTTO l'albero, partendo da Frutta che deve rimanere grassetto per intenderci.

    Spero di aver spiegato bene il problema...io non so da dove cominciare.




    Ringrazio per ogni aiuto
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    109
    Peccato che non ci siano risposte l'argomento mi sembrava interessante...

  3. #3
    sembrava interessante anche a me


    poi comunque ho risolto, ma mi sono dimenticato di postare lol
    è bastato fare una funzione ricorsiva al contrario, cioè di solito usavo la ricorsione per costruire l'albero partendo dal primo nodo, mentre ora dovevo partire dall'ultimo. Si trattava di costruirlo conoscendo solo l'ultimo figlio, ossia richiamavo la stessa funzione finché non trovavo il nodo con PADRE_ID=0
    Questa è la funzione che mi ono costruito:

    codice:
    /**
     * crea un array di id del percorso fino ad arrivare all'ultimo selezionato
     * l'array conterrà il percorso di id per arrivare al figlio selezionato
     * 
     * @param int $foglia, id dell'ultimo selezionato da cui ricavare il percorso
     * @param array $array, array contenente il percorso di id
     *
     * @return array $array, array completo con il percorso da padre a figlio
     */
    function creaID($foglia, $array)
    {
    	$foglia=(int)$foglia;
    	if (sizeof($array)==0)
    	{
    		$array[0]=$foglia;
    	}
    	
    	$sql="SELECT CATEGORIA_PADRE_ID FROM CATEGORIE WHERE CATEGORIA_ID=".$foglia;
    	$res=mysql_query($sql)or die(mysql_error());
    	$row=mysql_fetch_assoc($res);
    	
    	if ($row["CATEGORIA_PADRE_ID"]>0)
    	{
    		array_unshift($array,$row["CATEGORIA_PADRE_ID"]);
    		$array=creaID($row["CATEGORIA_PADRE_ID"],$array);
    	}
    	return $array;
    } // end function creaID

    praticamente la prima chiamata passerai ovviamente oltre all'id di tuo interesse un array vuoto che ti ritrovera riempito alla fine.
    Io per comodità l'array l'ho riempito aggiungendo sempre in testa, in modo poi da ritrovarmi con il percorso "corretto" ossia partendo dal nodo padre fino al nodo in questione, ma nulla ti vieta di farlo al contrario.



    spero possa esserti utile
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

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.