mi sa che il titolo non č molto chiaro, ora cerco si spiegare.

Ho la necessitā di costruire un menų ad albero gerarchico con i dati presi da una tabella mySQL. La tabella in questione ha questa struttura:

codice:
-- 
-- Struttura della tabella `CATEGORIE`
-- 

CREATE TABLE `CATEGORIE` (
  `CATEGORIA_ID` int(10) unsigned NOT NULL auto_increment,
  `CATEGORIA` varchar(50) default NULL,
  `META` text,
  `CATEGORIA_PADRE_ID` int(11) NOT NULL default '0',
  PRIMARY KEY  (`CATEGORIA_ID`)
) TYPE=InnoDB AUTO_INCREMENT=14 ;

-- 
-- Dump dei dati per la tabella `CATEGORIE`
-- 

INSERT INTO `CATEGORIE` VALUES (1, 'Frutta', NULL, 0);
INSERT INTO `CATEGORIE` VALUES (2, 'Banana', NULL, 13);
INSERT INTO `CATEGORIE` VALUES (3, 'Mela', NULL, 13);
INSERT INTO `CATEGORIE` VALUES (4, 'Secca', NULL, 1);
INSERT INTO `CATEGORIE` VALUES (5, 'Arachidi', NULL, 4);
INSERT INTO `CATEGORIE` VALUES (6, 'Pistacchi', NULL, 4);
INSERT INTO `CATEGORIE` VALUES (7, 'Carne', NULL, 0);
INSERT INTO `CATEGORIE` VALUES (8, 'Bibite', NULL, 0);
INSERT INTO `CATEGORIE` VALUES (9, 'Rossa', NULL, 7);
INSERT INTO `CATEGORIE` VALUES (10, 'Bianca', NULL, 7);
INSERT INTO `CATEGORIE` VALUES (11, 'Pollo', NULL, 10);
INSERT INTO `CATEGORIE` VALUES (12, 'Coca Cola', NULL, 8);
INSERT INTO `CATEGORIE` VALUES (13, 'Fresca', NULL, 1);
vi ho postato anche il dump dei dati cosė potete provare anche voi.
io riesco a costruire la struttura ( grazie anche all'aiuto di gianaz che ieri mi ha dato l'input per procedere ):
Codice PHP:
$sql="SELECT * FROM CATEGORIE WHERE CATEGORIA_PADRE_ID=0";
$res=mysql_query($sql);
while (
$row=mysql_fetch_assoc($res)){
    echo 
"<a href=\"".$_SERVER['PHP_SELF']."?genitore=".$row['CATEGORIA_ID']."\">";
    echo 
$row['CATEGORIA']."</a>
"
;
    echo 
mostraAlbero($row['CATEGORIA_ID'],1);
}

function 
mostraAlbero($padre$livello) {
   
$s="SELECT * FROM CATEGORIE WHERE CATEGORIA_PADRE_ID={$padre}";
   
$r=mysql_query($s)or die("$s
"
.mysql_error());

   while (
$row mysql_fetch_array($r)) {
       echo 
str_repeat('...',$livello);
       echo 
"<a href=\"".$_SERVER['PHP_SELF']."?genitore=".$row['CATEGORIA_ID']."\">";
       echo 
$row['CATEGORIA']."</a>
"
;
       
mostraAlbero($row['CATEGORIA_ID'], $livello+1);
   }

ecco, in questo modo io ottengo la mia bella struttura. Il problema ora č fare in modo che la struttura stia racchiusa in un menų ad albero dinamico. Quindi all'inizio io dovrei vedere le tra macro categorie e aprendone una vedo i "figli" di quella categoria. Un po' come la struttura a cartelle di windows per indenderci.

Io ho scaricato un menų, ma purtroppo non mi ricordo da dove.

in sostanza comunque, questo č il codice per creare il menų:

Codice PHP:
$menu=new HTML_TreeMenuXL();

$nodeProperties=array("icon"=>"fld.gif"expanded=>false);
$pageProperties=array("icon"=>"page.gif");


$sql="SELECT * FROM CATEGORIE ORDER BY CATEGORIA_PADRE_ID ASC, CATEGORIA ASC";
$res=mysql_query(sql);

$sql="SELECT * FROM CATEGORIE WHERE CATEGORIA_PADRE_ID=0";
$res=mysql_query($sql);
$i=1;
while (
$row=mysql_fetch_assoc($res)){
    
$nodo="node".$i;;
    $
$nodo=new HTML_TreeNodeXL($row['CATEGORIA'], ""$nodeProperties);
        
/*
        * questa istruzione mi crea i nodi "padre"
       */
    
mostraAlbero($row['CATEGORIA_ID'], 1"$".$nodo);
    
$menu->addItem($$nodo);
    
$i++;
}

// poi ho la funzione ricorsiva che dovrebbe agganciare le foglie ai nodi padre
function mostraAlbero($padre$livello$nodo) {
   
$s="SELECT * FROM CATEGORIE WHERE CATEGORIA_PADRE_ID={$padre}";
   
$r=mysql_query($s)or die("$s
"
.mysql_error());
   global 
$node1;

   while (
$row mysql_fetch_array($r)) {
      echo 
$nodo;
      
$subNode=&$nodo->addItem(new HTML_TreeNodeXL($row[CATEGORIA], ""$pageProperties));
      
mostraAlbero($row['CATEGORIA_ID'], $livello+1,$nodo);
   }

il problema č che in questo modo ottengo un fatal error del genere:
Fatal error: Call to a member function on a non-object in /store/domains/test.evoltel.com/.../...menu/ins-categorie2.php on line 56

dove alla linea 56 ho proprio la riga:

$subNode=&$nodo->addItem(new HTML_TreeNodeXL($row[CATEGORIA], "", $pageProperties));

non capisco il motivo dell'errore in quanto facendo scrivere $nodo mi restituisce correttamente $node1.

Ho provato comunque a trasformare cosė la riga:

codice:
$subNode=&$node1->addItem(new HTML_TreeNodeXL($row[CATEGORIA], "", $pageProperties));
e cosė funziona...mettendomi perō tutto ovviamente sotto il primo nodo. Non capisco come mai...


Chiedo scusa per il post un po' lunghetto, ma ho cercato di spiegare tutte le possibili alternative. Spero che qualcuno mi sappia dare una mano.



Ringrazio anticipatamente!