27. april 2004 - 09:14
#7
ok, printMenu er den funktion du skal lave om - jeg har lavet den, som blev brugt på min side til demo. Funktionen får to argumenter - et array med menuen og level som angiver hvor dybt vi er i træet (top = 0).. I princippet kan du lave det ligeså dybt som du ønsker..
Tabellen består af id (unik nøgle), et navn, parent_id (hvilken anden menu ligger denne under. Alle top-menupunkter ligger under 0. URL - det der skal tilføjes til url'en (se printMenu())
CREATE TABLE `treemenu` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(32) NOT NULL default '',
`parent_id` int(11) NOT NULL default '0',
`url` varchar(32) NOT NULL default '',
PRIMARY KEY (`id`)
) ;
Lidt data;
INSERT INTO `treemenu` VALUES (1, 'Main1', 0, 'Main1');
INSERT INTO `treemenu` VALUES (2, 'Main2', 0, 'Main2');
INSERT INTO `treemenu` VALUES (3, 'Main3', 0, 'Main3');
INSERT INTO `treemenu` VALUES (4, 'Sub1A', 1, 'Sub1A');
INSERT INTO `treemenu` VALUES (5, 'Sub1B', 1, 'Sub1B');
INSERT INTO `treemenu` VALUES (6, 'Sub2A', 2, 'Sub2A');
INSERT INTO `treemenu` VALUES (7, 'Sub2B', 2, 'Sub2B');
INSERT INTO `treemenu` VALUES (8, 'Sub3A', 3, 'Sub3A');
INSERT INTO `treemenu` VALUES (9, 'Sub3B', 3, 'Sub3B');
INSERT INTO `treemenu` VALUES (10, 'Sub1A1', 4, 'Sub1A1');
INSERT INTO `treemenu` VALUES (11, 'Sub1A2', 4, 'Sub1A2');
<?php
include('../lib/db.php');
if( isset($_GET['id']) )
$menu_id = $_GET['id'];
else
$menu_id = null;
$menu = getMenu($menu_id);
printMenu($menu); // Example output
function printMenu($menu,$level=0) {
foreach($menu as $item) {
$pre = $post = '';
if( $level == 0 ) {
$pre = '<font size=+1>';
$post = '</font>';
}elseif( $level == 2 ) {
$pre = '<i>';
$post = '</i>';
}
print $pre . '<a href="treemenu.php?id=' . $item['id'] . '&' . $item['url'] . '">' .$item['name'].'</a>' . $post . '<br/>';
if( $item['submenu'] != null )
printMenu($item['submenu'],$level+1);
}
}
function getMenu($path) {
if(! is_array($path) ) {
$id = $path;
$path = array();
do {
$path[] = $id;
$sql = "SELECT parent_id FROM treemenu WHERE id = '$id'";
$res = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($res);
if( $row === null )
$id = 0;
else
$id = $row[0];
}while($id != 0);
$path[] = '0'; // All path ends at root..
return getMenu($path);
}
$menu = array();
$parent_id = array_pop($path);
$sql = "SELECT id, name, url FROM treemenu WHERE parent_id = '$parent_id'";
$res = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($res)) {
$id = $row[0];
$name = stripslashes($row[1]);
$url = stripslashes($row[2]);
if( in_array($id,$path) )
$submenu = getMenu($path);
else
$submenu = null;
$menu[] = array('id' => $id, 'name' => $name, 'url' => $url, 'submenu' => $submenu);
}
return $menu;
}
?>