【发布时间】:2010-05-20 20:47:26
【问题描述】:
问题:如何从多维数组生成导航,允许将不同的类应用于不同的子项?
在我需要多级导航之前,我是这样做的:
Home
Pics
About
并且是通过调用 nav() 生成的:
function nav(){
$links = array(
"Home" => "home.php",
"Pics" => "pics.php",
"About" => "about.php"
);
$base = basename($_SERVER['PHP_SELF']);
foreach($nav as $k => $v){
echo buildLinks($k, $v, $base);
}
}
这里是 buildLinks():
function buildLinks($name, $page, $selected){
if($selected == $page){
$theLink = "<li class=\"selected\"><a href=\"$page\">$name</a></li>\n";
} else {
$thelink = "<li><a href=\"$page\">$name</a></li>\n";
}
return $thelink;
}
我的问题,再次:
我将如何实现以下导航(并注意可见的子导航元素仅在该特定页面上出现):
Home
something1
something2
Pics
About
还有……
Home
Pics
people
places
About
我的尝试
从外观上看,SPL 中的某些迭代器似乎很适合这个,但我不知道如何处理这个问题。我玩过 RecursiveIteratorIterator 但我不确定如何仅对子菜单项应用不同的样式,以及如何仅在正确的页面上显示这些项。
我构建了这个数组来测试,但不知道如何单独处理 submenu1 项:
$nav = array(
array(
"Home" => "home.php",
"submenu1" => array(
"something1"=>"something1.php",
"something2" => "something2.php")
),
array("Pics" => "pics.php"),
array("About" => "about.php")
);
以下内容将按顺序打印出批次,但我该如何申请,对子菜单 1 项目说类名或仅在该人在“主页”页面时显示它们?
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($nav));
foreach($iterator as $key=>$value) {
echo $key.' -- '.$value.'<br />';
}
这让我明白了:
Home
something1
something2
Pics
About
但我无法将类应用于这些子项,也无法仅有条件地显示它们,因为我不知道如何仅针对这些元素。
【问题讨论】:
标签: php iterator navigation