Вопрос: Как сгенерировать навигацию, позволяющую применять разные классы к разным подпунктам из многомерного массива?
Вот как я это делал до того, как мне понадобилась многоуровневая навигация:
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, но я не уверен, как применить другой стиль только к элементам подменю, а также как показать эти элементы, только если вы находитесь на правильной странице.
Я создал этот массив для тестирования, но не знаю, как работать с элементами подменю1 индивидуально:
$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
Но у меня нет способа применить классы к этим подэлементам и нет способа отображать их только условно, потому что я не вижу, как нацеливать только эти элементы.