Ciao a tutti,

sto usando questo codice per generare un menu ad albero da db da questa tabella
CREATE TABLE IF NOT EXISTS `dyn_menu` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`label` varchar(50) NOT NULL DEFAULT '',
`link_url` varchar(100) NOT NULL DEFAULT '#',
`parent_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

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

INSERT INTO `dyn_menu` (`id`, `label`, `link_url`, `parent_id`) VALUES
(1, 'folder 1', '#', 0),
(2, 'folder 2', '#', 0),
(3, 'item 1', '#', 1),
(4, 'item 2', '#', 1);


Codice PHP:
$sql "SELECT id, label, link_url, parent_id FROM dyn_menu ORDER BY parent_id, id ASC"$items mysql_query($sql);
while (
$obj mysql_fetch_object($items)) {
  if (
$obj->parent_id == 0) {
    
$parent_menu[$obj->id]['label'] = $obj->label;
    
$parent_menu[$obj->id]['link'] = $obj->link_url;
  } else {
    
$sub_menu[$obj->id]['parent'] = $obj->parent_id;
    
$sub_menu[$obj->id]['label'] = $obj->label;
    
$sub_menu[$obj->id]['link'] = $obj->link_url;
    
$parent_menu[$obj->parent_id]['count']++;
  } 
}
mysql_free_result($items);

function 
dyn_menu($parent_array$sub_array$qs_val "menu"$main_id "nav"$sub_id "subnav"$extra_style "foldout") {
  
$menu "<ul id=\"".$main_id."\">\n";
  foreach (
$parent_array as $pkey => $pval) { 
    if (!empty(
$pval['count'])) {
    
$menu .= "[*]<a class=\"".$extra_style."\" href=\"".$pval['link']."?".$qs_val."=".$pkey."\">".$pval['label']."</a>\n";
    } else {
    
$menu .= "[*]<a href=\"".$pval['link']."\">".$pval['label']."</a>\n";
    }
    if (!empty(
$_REQUEST[$qs_val])) {
    
$menu .= "<ul id=\"".$sub_id."\">\n";
    foreach (
$sub_array as $sval) {
      if (
$pkey == $_REQUEST[$qs_val] && $pkey == $sval['parent']) {
        
$menu .= "[*]<a href=\"".rebuild_link($sval['link'], $qs_val$sval['parent'])."\">".$sval['label']."</a>\n";
      }
    }
    
$menu .= "[/list]\n";
  }
}
$menu .= "[/list]\n";
return 
$menu;
}

function 
rebuild_link($link$parent_var$parent_val) {
  
$link_parts explode("?"$link); 
  
$base_var "?".$parent_var."=".$parent_val;
  if (!empty(
$link_parts[1])) {
  
$link_parts[1] = str_replace("&amp;""##"$link_parts[1]);
  
$parts explode("##"$link_parts[1]);
  
$newParts = array();
  foreach (
$parts as $val) { 
    
$val_parts explode("="$val);
    if (
$val_parts[0] != $parent_var) {
      
array_push($newParts$val);
    }
  }
  if (
count($newParts) != 0) {
  
$qs "&amp;".implode("&amp;"$newParts); } 
  return 
$link_parts[0].$base_var.$qs
  } else { 
  return 
$link_parts[0].$base_var;
  } 

echo 
dyn_menu($parent_menu$sub_menu"menu""nav""subnav"); 
Lo script funziona correttamente solo quando deve estrarre i "padri"...in altre parole mi rende:

Codice PHP:
<ul id="nav">[*][url="#?menu=1"]folder 1[/url][*][url="#"]folder 2[/url][/list] 
Qualcuno sa aiutarmi?