Recently I needed to come up with a code that would help me create a n-level menu and breadcrumb for that. So for that I wrote this code which works with great ease and provides huge flexibility. Also I kept it really low so that it is easy to embedded it in any kind of design. This is just the half part of my code which prints the menu.
Function:
$table = 'menu'; /** * The showMenu() function prints the menu with all its sub menus * @params: $ulclass common class to be applied in ul elements $liclass common class to be applied in li elements $father Father of each child menu. Pass '0' to print complete menu. * return: string */ function showMenu($ulclass, $liclass, $father) { $showmenu_query = "select * from $table where menu_father='" . $father . "' order by menu_order"; $exec_showmenu = mysql_query($showmenu_query); if ( !$exec_showmenu) { echo "Query failed. Check your query. Error Returned: " . mysql_error(); return false; } $toAppend = '<ul class="' . $ulclass . '">'; while ($row_showmenu = mysql_fetch_assoc($exec_showmenu)) { $toAppend.= '<li class="' . $liclass . ' '. $row_showmenu['menu_class'] . '">'; $toAppend.= '<a href="' . stripslashes($row_showmenu['menu_slug']) . '">' . stripslashes($row_showmenu['menu_name']); $toAppend.= '</a>'; $submenu_query = "select * from $table where menu_father='" . $row_showmenu['menu_id'] . "'"; $exec_submenu = mysql_query($submenu_query); if (mysql_num_rows($exec_submenu)>0 ) { $toAppend.= $showMenu($ulclass, $liclass, $row_showmenu['menu_id']); } $toAppend.= '</li>'; } $toAppend.= '</ul>'; return $toAppend; }
Expected table structure:
Table keys menu_id -> Primary key menu_name -> Menu name menu_class -> Menu class menu_slug -> Menu link menu_order -> Menu order menu_father -> Father menu id // For topmost level menu, menu_father needs to be 0
MYSQL create table query
CREATE TABLE IF NOT EXISTS `menu` ( `menu_id` int(11) NOT NULL AUTO_INCREMENT, `menu_name` varchar(256) NOT NULL, `menu_class` varchar(256) NOT NULL, `menu_slug` varchar(100) NOT NULL, `menu_order` tinyint(4) NOT NULL DEFAULT '0', `menu_father` tinyint(4) NOT NULL DEFAULT '0', PRIMARY KEY (`menu_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
How to use
/** * The showMenu() function prints the menu * with all its sub menus * @params: $ulclass common class to be applied in ul elements $liclass common class to be applied in li elements $father Father of each child menu. Pass '0' to print complete menu. * return: string */ showMenu($ulclass, $liclass, $father=0);
This is the simplest form of this menu, depending upon the requirements of the design it can be changed very easily.
Note: Please provide the credit to the author.
Good luck!!!
Latest posts by Abhishek Gupta (see all)
- PHP syntactic sugar code example - September 5, 2021
- Python convert random string date format to Datetime - July 12, 2021
- Laravel Custom Exception Handlers - March 28, 2019