Recursive Menu Listing
Posted: Wed Aug 09, 2006 4:03 pm
Hey,
I have a menu structure that is put out into an array as follows
I am trying to do a breadcrumb using the following function
then i use the following process to get the breadcrumbs
but it breaks along the line when u get to a deeper level...
can anyone give me some insights here as to how to structure the function?
Kendall
I have a menu structure that is put out into an array as follows
Code: Select all
$menus_array['trinidad'] = array("name"=>'Cara Suites Trinidad',
"id"=>'1000',
"link"=>'/trinidad.php?contentid=1000',
"contentid"=>'1000',
"parentid"=>'0',
"filename"=>'1000.html',
"submenus"=>array(
1=> array("name"=>'Rooms',
"id"=>'71012',
"link"=>'/trinidad.php?contentid=6016',
"contentid"=>'6016',
"parentid"=>'1000',
"filename"=>'6016.html',
"submenus"=>array(1=> array("name"=>'One Room',
"id"=>'11415',
"link"=>'/trinidad.php?contentid=1300',
"contentid"=>'1300',
"parentid"=>'71012',
"filename"=>'1300.html'
)
)
),3=> array("name"=>'Dining',
"id"=>'91511',
"link"=>'/trinidad.php?contentid=6019',
"contentid"=>'6019',
"parentid"=>'1000',
"filename"=>'6019.html',
"submenus"=>array(1=> array("name"=>'Breakfast Menu',
"id"=>'15051',
"link"=>'/trinidad.php?contentid=6020',
"contentid"=>'6020',
"parentid"=>'91511',
"filename"=>'6020.html',
"submenus"=>array(1=> array("name"=>'Test Menu',
"id"=>'51532',
"link"=>'/trinidad.php?contentid=6004',
"contentid"=>'6004',
"parentid"=>'15051',
"filename"=>'6004.html',
"submenus"=>array(1=> array("name"=>'4th Test Document',
"id"=>'51002',
"link"=>'/trinidad.php?contentid=30022',
"contentid"=>'30022',
"parentid"=>'51532',
"filename"=>'30022.html',
"submenus"=>array(1=> array("name"=>'5th Level',
"id"=>'11127',
"link"=>'/trinidad.php?contentid=4440',
"contentid"=>'4440',
"parentid"=>'51002',
"filename"=>'4440.html'
)
)
)
)
),2=> array("name"=>'Another Menu',
"id"=>'14155',
"link"=>'4005.html',
"contentid"=>'',
"parentid"=>'15051',
"filename"=>''
)
)
)
)
),4=> array("name"=>'Leisure Activities',
"id"=>'75131',
"link"=>'/trinidad.php?contentid=6018',
"contentid"=>'6018',
"parentid"=>'1000',
"filename"=>'6018.html',
"submenus"=>array(1=> array("name"=>'Some Document',
"id"=>'56852',
"link"=>'5555.html',
"contentid"=>'',
"parentid"=>'75131',
"filename"=>''
)
)
),6=> array("name"=>'Conferencing and Events',
"id"=>'19531',
"link"=>'/trinidad.php?contentid=6017',
"contentid"=>'6017',
"parentid"=>'1000',
"filename"=>'6017.html'
))
);
Code: Select all
function getMenus($subMenuItems,$section = false,$parent = false,$id = false,$depth=0){
$menus = false;
if($section && @array_key_exists($section,$subMenuItems))
$subMenuItems = array(0=>$subMenuItems[$section]);
foreach ($subMenuItems as $key => $menuItem){
if(!is_integer($key))
$section = $key;
$menus[] = array($menuItem['name'],$menuItem['id'],$menuItem['link'],$menuItem['contentid'],$menuItem['parentid'],$depth,$section,$menuItem['filename']);
if($menuItem['parentid'] === $parent)
continue;
elseif($id && ($menuItem['id'] == $id))
return $menus;
elseif(@array_key_exists('submenus',$menuItem))
$menus = @array_merge($menus,getMenus($menuItem['submenus'],$section,$parent,$id,$depth+1));
}
return $menus;
}
Code: Select all
if($section){
$output_menus = getMenus($menus_array,$section,$parent,$menuid);
for($i=0;$i<count($output_menus);$i++){
if($output_menus[$i][4] == 0 || $menuid == $output_menus[$i][1] || $parent == $output_menus[$i][1] || $output_menus[$i][5] <( $depth - $output_menus[$i][5])){
print '<a href="'.$output_menus[$i][2].'">'.strtolower($output_menus[$i][0]).'</a>';
if($output_menus[$i][1] == $menuid)
break;
if($i < count($output_menus)-1)
print " <strong>»</strong> ";
}
}
}
can anyone give me some insights here as to how to structure the function?
Kendall