Version: .2
Type: Function
Category: Other
License: GNU General Public License
Description: One base function for calling menu information from a db and building a functional cascading menu tree from it.
admin_menu table setup:
+------------+------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------------------------+------+-----+---------+----------------+
| id | int(3) | | PRI | NULL | auto_increment |
| title | varchar(30) | YES | MUL | NULL | |
| link | varchar(100) | YES | | NULL | |
| type | enum('parent','child','sub_child') | YES | | NULL | |
| urlshow | varchar(15) | | | | |
| urlsubshow | varchar(25) | | | | |
| parent_id | int(3) | YES | | NULL | |
| position | int(2) | YES | | NULL | |
+------------+------------------------------------+------+-----+---------+----------------+
CREATE TABLE `admin_menu` (
`id` int(3) NOT NULL auto_increment,
`title` varchar(30) default NULL,
`link` varchar(100) default NULL,
`type` enum('parent','child','sub_child') default NULL,
`urlshow` varchar(15) NOT NULL default '',
`urlsubshow` varchar(25) NOT NULL default '',
`parent_id` int(3) default NULL,
`position` int(2) default NULL,
UNIQUE KEY `id` (`id`),
UNIQUE KEY `title` (`title`)
) TYPE=MyISAM;
<?php
//menu.php
mysql_connect($host, $user, $pass);
mysql_select_db('$db_name');
build_menu();
?>
<?
//menu_function.php
/**
* @return void
* @desc - variables provided<br>
* - $menu - multi-dimensional array containing all contents of the menu
* - this info is pulled for the array from the db at login (login.cinch)
* - $menu Structure
* - $menu[parent/child/sub_child][#][0] = title - title name to display
* - $menu[parent/child/sub_child][#][1] = link - hyperlink to reference to
* - $menu[parent/child/sub_child][#][2] = parent_id - id of parent (if child or subchild - for subchild, parent_id is actually the id of the child)
* - $menu[parent/child/sub_child][#][3] = id - id of this entry
* - $menu[parent/child/sub_child][#][4] = show - defined in this function, and decides what areas of the menu will be visible
* - $menu[parent/child/sub_child][#][5] = sub_show - same as $show, but for sub sections (currently only used within 'Products' section
* - $show
* - $show is defined in this function, and decides what areas of the menu will be visible
* - $sub_show
* - same as $show, but for sub sections (currently only used within 'Products' section
*/
function build_menu()
{
$get_menu = mysql_query("select * from admin_menu");
$menu[parent] = array();
$menu[child] = array();
$menu[sub_child] = array();
while ($row=mysql_fetch_array($get_menu))
{
switch ($row[type])
{
case 'parent':
$position = $row[position];
$menu[parent][$position] = array($row[title],$PHP_SELF,$row[parent_id],$row[id],$row[urlshow],$row[urlsubshow]);
break;
case 'child':
$menu[child][] = array($row[title],$PHP_SELF,$row[parent_id],$row[id],$row[urlshow],$row[urlsubshow]);
break;
case 'sub_child':
$menu[sub_child][] = array($row[title],$PHP_SELF,$row[parent_id],$row[id],$row[urlshow],$row[urlsubshow]);
break;
}
}
if (!isset($show))
{
$show = "";
}
if (!isset($sub_show))
{
$sub_show = "";
}
for ($i=0; $i<sizeof($menu[parent]); $i++)
{
// echo "parent $i<br>\n";
if ((isset($show) && $show == $menu[parent][$i][4]) || $show == "all")
{
if (eregi("http", $menu[parent][$i][1]))
{
echo "<a href='" . $menu[parent][$i][1] . "' target='new'>-</a> <a href='" . $menu[parent][$i][1] . "' target='new'>" . $menu[parent][$i][0] . "</a><br>\n";
}
else
{
echo "<a href='" . $menu[parent][$i][1] . "?show=" . $menu[parent][$i][4] . "&sub_show=" . $menu[parent][$i][5] . "'>-</a> <a href='" . $menu[parent][$i][1] . "?show=" . $menu[parent][$i][4] . "&sub_show=" . $menu[parent][$i][5] . "'>" . $menu[parent][$i][0] . "</a><br>\n";
}
for ($j=0; $j<sizeof($menu[child]); $j++)
{
if ($menu[child][$j][2] == $menu[parent][$i][3] && (isset($sub_show) && $sub_show == $menu[child][$j][5] || $show == "all"))
{
// echo "child $j<br>\n";
if (eregi("http", $menu[child][$j][1]))
{
echo " <a href='" . $menu[child][$j][1] . "' target='new'>-</a> <a href='" . $menu[child][$j][1] . "' target='new'>" . $menu[child][$j][0] . "</a><br>\n";
}
else
{
echo " <a href='" . $menu[child][$j][1] . "?show=" . $menu[child][$j][4] . "&sub_show=" . $menu[child][$j][5] . "'>-</a> <a href='" . $menu[child][$j][1] . "?show=" . $menu[child][$j][4] . "&sub_show=" . $menu[child][$j][5] . "'>" . $menu[child][$j][0] . "</a><br>\n";
}
for ($k=0; $k<sizeof($menu[sub_child]); $k++)
{
if ($menu[sub_child][$k][2] == $menu[child][$j][3])
{
// echo "sub-child $k<br>\n";
echo " <a href='" . $menu[sub_child][$k][1] . "?show=" . $menu[sub_child][$k][4] . "&sub_show=" . $menu[sub_child][$k][5] . "'>-</a> <a href='" . $menu[sub_child][$k][1] . "?show=" . $menu[sub_child][$k][4] . "&sub_show=" . $menu[sub_child][$k][5] . "'>" . $menu[sub_child][$k][0] . "</a><br>\n";
}
}
}
}
}
else
{
if (eregi("http", $menu[parent][$i][1]))
{
echo "<a href='" . $menu[parent][$i][1] . "' target='new'>+</a> <a href='" . $menu[parent][$i][1] . "' target='new'>" . $menu[parent][$i][0] . "</a><br>\n";
}
else
{
echo "<a href='" . $menu[parent][$i][1] . "?show=" . $menu[parent][$i][4] . "&sub_show=" . $menu[parent][$i][5] . "'>+</a> <a href='" . $menu[parent][$i][1] . "?show=" . $menu[parent][$i][4] . "&sub_show=" . $menu[parent][$i][5] . "'>" . $menu[parent][$i][0] . "</a><br>\n";
}
}
}
}
?>