Skip to content
Derek Jones edited this page Jul 4, 2012 · 24 revisions

Category:Help::TipsAndTricks Image:DynamicMenu.gif

Updating my contributions on the wiki has become a nightmare. Please check my svn at google for the latest revisions: http://code.google.com/p/tamer/ [url=http://code.google.com/p/tamer/]CI_TaMeR SVN[/url]

Menu library. Will show/hide sub-menus depending on in which, uri->segment the user is browsing. Just add it in to autoload.

I call it from the view file like this:

$menu = $this->menu->mkmenu();

I use a header.php and footer.php so I have to do this only once in my header.php. In any case where ever in the view file you like to have your menu you would enter this: [i]Make sure you also load the html helper for ul[/i]

<?=ul($menu,array('class' => 'Navbar','id' => 'Navbar'));?>

And here you create your menu

class Menu
{
    function setVars()
    {
        $uid = $this->db_session->userdata('uid');

    $this->menu = array(
           '1' => anchor('news', 'News'),
           '4' => anchor('ticket', 'Support'),
           '5' => anchor('test', 'Test'),
    );

        if($this->uid > 0){
            $this->['3'] = anchor('contact/person', 'Profile');
            $this->sub['contact'] = array(
                anchor('contact/person','User'),
                anchor('contact/company','Comapny'),
                anchor('contact/secquestion','Security'),
                anchor('contact/password','Password')
                );
    }       
        
        $this->sub['news'] = array(anchor('news/post','Post'));
        
    }
    
    function Menu()
    {
        log_message('debug', 'Menu: initialized');
    }
    
    function mkMenu()
    {
        $CI =& get_instance();
        $this->uid = $CI->db_session->userdata('uid');
        $this->setVars();
        ksort($this->menu);
        $segment = $CI->uri->segment(1);
        foreach($this->menu as $k => $v){
            $menutmp[$k] = $v;
            if (strripos($v, $segment) !== FALSE && isset($this->sub[$segment])){
                $this->menu[$this->menu[$k]] = $this->sub[$segment];
                unset($menutmp[$k]);
                $menutmp[$this->menu[$k]] = $this->sub[$segment];
            }
        }
        return $menutmp;
    }
}

Here is the style code:

#HeaderNav {
border: 1px solid #000000;
background: #333333;
color: #ffffff;
}

#HeaderNav a {
border: 1px solid #000000;
background: #333333;
color: #ffffff;
}

#HeaderNav a:hover {
border: 1px solid #000000;
background: #333333;
color: #ffffff;
}

#Navbar {

}

#Navbar ul.menu {
/* font-family: Verdana, Arial, Helvetica, sans-serif; */
font-size: .8em;
font-style: normal;
line-height: 1.3em;
font-weight: normal;
font-variant: normal;
text-transform: none;
color: #00CC33;
text-decoration: none;
background-color: #CCCCCC;
text-indent: 0em;
/* list-style-position: inside; */
list-style-position: outside;
list-style-type: none;
padding: 0 0 0 0;
margin: 0 0 0 0;
}

#Navbar li {
margin: 0 0 0 0;
list-style-type: none;
}
#Navbar a {
display: block;
padding: 2px 2px 2px 1em;
border: 1px solid #000000;
background: #dcdcdc;
text-decoration: none; /*remove the link underlines*/
}

#Navbar a:link, 
#list-menu a:active, 
#list-menu a:visited {
color: #000000;
}

#Navbar a:hover {
border: 1px solid #000000;
background: #333333;
color: #ffffff;
}

If you make an improvement or have questions post them here:

[url=http://codeigniter.com/forums/viewthread/48152/]Dynamic Menu Forum[/url]

Clone this wiki locally