PHP/MySQL Navigation Menu -


i'm trying create function hierarchical navigational menu bar.

i want able have this...

<ul id="navigation"> <li><a href="#">menu item 1</a></li> <li><a href="#">menu item 2</a></li>     <ul>         <li><a href="#">sub menu item 1</a></li>         <li><a href="#">sub menu item 1</a></li>     </ul> <li><a href="#">menu item 3</a></li> <li><a href="#">menu item 4</a></li> </ul> 

i'm using function, it's not working i'd to. it's showing main parent links, not child links.

function build_navbar($pid,$sub=0) {     global $db;      $query = $db->simple_select("navbar", "*", "pid='".$pid."'", array("order_by" => "disporder"));     $menu_build = "<ul id=\"navigation\">\n";     while($menu = $db->fetch_array($query))     {            if($sub == 1)         {            $menu_build .= "<ul>\n";            $menu_build .= "<li><a href=\"#\">".$menu['title']."</a></li>\n";            $menu_build .= "</ul>\n";         }         else         {            $menu_build .= "<li><a href=\"#\">".$menu['title']."</a></li>\n";         }         build_navbar($menu['id'],1);     }     $menu_build .= "</ul>\n";      return $menu_build; } 

perhaps can me fix this? thanks.

--- new update ---

andy groff, code outputting:

<ul id="navigation">     <li><a href="#">home</a></li>     <ul>         <li><a href="#">child link</a></li>         <li><a href="#">child 2</a></li>     </ul>     <li><a href="#">parent</a></li> </ul> 

however, need modified it'll output this:

<ul id="navigation">     <li><a href="#">home</a>         <ul>             <li><a href="#">child link</a></li>             <li><a href="#">child 2</a></li>         </ul>     </li>     <li><a href="#">parent</a></li> </ul> 

this outputting now, andy:

<ul id="navigation">     </li>     <li><a href="#">home</a>     </li>     <ul>         <li>         <a href="#">child link</a>         </li>         <li><a href="#">child 2</a>     </ul>     </li>     <li><a href="#">parent</a> </ul> 

i think problem have fact function recursive, string you're building gets reset @ top of function each time, instead of being passed function again. also, don't see anywhere sub set 0 final iteration. additionally, seems shouldn't need query each individual row. more effective query once , build whole menu. think recursion can ditched. also, recommend storing "sub" flag in data, instead of using hard understand php logic whether or not given row sub menu. made modifications based of these concepts, no idea if works or not though since don't have/want create data test it:

function build_navbar() {     global $db;     //first things first, i'd recommend putting "sub" flag in database. example use it.      //start off getting of rows. no need recursion.     $query = $db->simple_select("navbar", "*", "1", array("order_by" => "disporder"));     $menu_build = "<ul id=\"navigation\">\n";      //keep track of level we're @     $level = 1;      while($menu = $db->fetch_array($query))     {       //get sub data       $sub = $menu['sub']        //we need go root level       if($sub == 0 && $level == 2){         $level--;         $menu_build .= "</ul></li>\n";       }       else $menu_build .= "</li>\n";        //we need go 1 level       if($sub == 1 && $level == 1)       {         $level++;         $menu_build .= "<ul><li>\n";       }       else $menu_build .= "<li>";       //always print out link       $menu_build .= "<a href=\"#\">".$menu['title']."</a>\n";     }     $menu_build .= "</ul>\n";      return $menu_build; } 

Comments

Popular posts from this blog

php - What is the difference between $_SERVER['PATH_INFO'] and $_SERVER['ORIG_PATH_INFO']? -

fortran - Function return type mismatch -

queue - mq_receive: message too long -