tags:

views:

108

answers:

2

Possible Duplicate:
how to generate an dynamic array

how to generate an dynamic menu which have submenu so on which have store in database and on click show submenu. Please help me i am an fresher php developer.

+1  A: 

Here's a blog article which describes it well: http://crisp.tweakblogs.net/blog/317/formatting-a-multi-level-menu-using-only-one-query.html Then you just use CSS to show/hide submenus.

BalusC
+1  A: 

Ok first create the tables like this

CREATE TABLE `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`)
) TYPE=MyISAM;


Prepare your DB

$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);


Write The Function


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 .= "  <li><a class=\"".$extra_style."\" href=\"".$pval['link']."?".$qs_val."=".$pkey."\">".$pval['label']."</a></li>\n";
        } else {
            $menu .= "  <li><a href=\"".$pval['link']."\">".$pval['label']."</a></li>\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 .= "<li><a href=\"".rebuild_link($sval['link'], $qs_val, $sval['parent'])."\">".$sval['label']."</a></li>\n";
                }
            }
            $menu .= "</ul>\n";
        }
    }
    $menu .= "</ul>\n";
    return $menu;
}

Thats it have fun

streetparade