Min menu trænger til en opdatering
Hej Eksperter,Jeg har henover de sidste par aftener bøvlet lidt med den menu funktion jeg har brugt til dato, men den giver desværre problemer så snart jeg kommer ud over level 2...
Jeg har en DB struktur der ser således ud:
id (int) auto increment
gruppe (varchar)
parentID (int) reference til ID - hvis der er tale om en undergruppe
level (int) et felt der angiver hvilket level menupunktet ligger på.
Feltet level vil jeg meget gerne have udfaset helt.
Min kode består af 3 funktioner:
---------------------------------
<?php
function setExpand($id, $level) {
if (!isset($_SESSION['expand']) && !is_array($_SESSION['expand'])) {
$_SESSION['expand'] = array();
}
if ($level == 0) {
unset($_SESSION['expand']);
$_SESSION['expand'] = array();
array_push($_SESSION['expand'],$id);
}
if (!in_array($id, $_SESSION['expand'])) {
array_push($_SESSION['expand'], $id);
}
return $_SESSION['expand'];
}
function getMenu($root=0) {
$parent = (int) $root;
$query = "SELECT id,parent_id,groupname, y FROM groups WHERE parent_id = ".$parent." AND active = '1' ORDER BY y, groupname";
$res = mysql_query($query) or die(mysql_error());
$self = array();
while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
$row['child'] = getMenu($row['id']);
$self[] = $row;
}
if (count($self) > 0) {
return $self;
} else {
return null;
}
}
function showMenu($struct, $level, $expand) {
$out = '';
if (is_array($struct) && count($struct)) {
if (isset($struct['id'])) {
$indent = '';
for ($i=0;$i<$level;$i++) {
$indent = ' ';
}
$out = $indent . '<a href="?id='.$struct['id'].'&level='.$level.'">'.$struct['groupname'].'</a><br />';
if (is_array($struct['child'])) {
$level++;
foreach ($struct['child'] as $child) {
if(in_array($struct['id'], $expand)){
$out .= $indent.showMenu($child, $level,$expand);
}
}
}
} else {
foreach ($struct as $root) {
$out .= showMenu($root,$level,$expand);
}
}
}
return $out;
}
?>
Menuen bliver kaldt på følgende måde:
-------------------------------------
empty($_GET['level']) ? $level = 0: $level = $_GET['level'];
empty($_GET['id']) ? $id = 0: $id = $_GET['id'];
$exp = setExpand($id,$level);
print showMenu(getMenu(),0, $exp);
Det jeg så gerne vil have den til, er at kunne lave en menu med et uendeligt antal levels.
