我几乎完成了这个导航......我有以下代码递归生成我的导航,可以在这个链接中看到:http: //khill.mhostiuckproductions.com/siteLSSBoilerPlate/arraytest2.php
它还成功地将“活动”类添加到标签 = 页面标题的任何链接。到目前为止,这是我的代码,请在底部查看我的问题。我已经标记了 javascript 和 jquery,但我更喜欢 PHP 解决方案,尽管我愿意接受建议。请注意这个导航的全部目的是让我可以通过下面的数组编辑单个文件来添加/删除/编辑导航元素。
设置页面的 $title:
<?php $title = 'Home'; ?>
导航数组:
<?php
$nav_array = array ('Home' => 'index.php',
'About' => array ( 'about.php', array (
'Michael' => array( 'michael.php', array (
'Blog' => 'blog.php',
'Portfolio' => 'portfolio.php')),
'Aaron' => 'aaron.php' ,
'Kenny' => 'kenny.php',
'David'=> 'david.php')),
'Services' => array ( 'services.php', array (
'Get Noticed' => 'getnoticed.php',
'Hosting' => 'hosting.php')),
'Clients' => 'clients.php',
'Contact Us' => 'contact.php'
);
$base = basename($_SERVER['PHP_SELF']);
?>
前锋:
<?php
echo "<ul>";
foreach ($nav_array as $nav_title => $nav_data) {
echo buildLinks($nav_title, $nav_data, $base, $title);
}
echo "</ul>";
?>
buildLinks 函数:
<?php // Building the links
function buildLinks ($label_name, $file_name, $active_class, $title) {
$theLink = '';
$navigation_list = false;
if (is_array($file_name)) {
$navigation_list = $file_name[1];
$file_name = $file_name[0];
}
// build the links with active class
if ($label_name == $title) {
$theLink = "<li><a class=\"active\" href=\"$file_name\">$label_name</a></li>\n";
} else {
$theLink = "<li><a href=\"$file_name\">$label_name</a></li>\n";
}
// recursively loop back through build links function
if ($navigation_list) {
$theLink .= "<ul>";
foreach ($navigation_list as $nav_title => $nav_data) {
$theLink .= buildLinks($nav_title, $nav_data, $active_class, $title);
}
$theLink .= "</ul>";
}
return $theLink; // print the nav
}
所以,我已经有了这个导航视觉样式,但它是使用非递归讨厌的代码生成的。不过,您可以在以下链接中看到我将要引用的箭头,这样您就可以了解我想要实现的目标。http://khill.mhostiuckproductions.com/siteLSSBoilerPlate/
请注意仅出现在具有子菜单的导航元素上的箭头...
这是通过<span class='arrow'> +</span>
在<A>
标签内添加来完成的。因此,例如...(如果 nav_label = title 为 TRUE,则 class="" 可能使类处于活动状态)
<a class="" href="about.php">About<span class='arrow'> +</span></a>
所以我试图弄清楚如何将此功能添加到递归生成的内容中......我想我最大的问题是我不太确定如何确定子导航是否存在,如果这是真的, 然后加上<span>
我会假设我会在 buildLinks 函数中使用 elseif 扩展我原来的 IF 语句。所以...
// 使用活动类建立链接
if ($label_name == $title) {
$theLink = "<li><a class=\"active\" href=\"$file_name\">$label_name</a></li>\n";
} elseif ([what goes here?]) {
$theLink = "<li><a href=\"$file_name\">$label_name<span class='arrow'> +</span></a></li>\n";
} else {
$theLink = "<li><a href=\"$file_name\">$label_name</a></li>\n";
}
问题是上面 elseif 行中的 [这里发生了什么?]。另外,我意识到我需要两个 elseif。一个用于“如果 active = true AND if sub_menu = true”,则此...另一个用于“如果 sub_menu = ture”,则此...
到时候上面就变成了...
if ($label_name == $title) {
$theLink = "<li><a class=\"active\" href=\"$file_name\">$label_name</a></li>\n";
} elseif ($label_name == $title && [what goes here?]) {
$theLink = "<li><a class=\"active\" href=\"$file_name\">$label_name<span class='arrow'> +</span></a></li>\n";
} elseif ([what goes here?]) {
$theLink = "<li><a href=\"$file_name\">$label_name<span class='arrow'> +</span></a></li>\n";
} else {
$theLink = "<li><a href=\"$file_name\">$label_name</a></li>\n";
}
我现在完全不知所措,因为我帮助生成了这个递归导航,我了解它主要是如何工作的,但我不完全了解这里发生了什么:
$theLink = '';
$navigation_list = false;
if (is_array($file_name)) {
$navigation_list = $file_name[1];
$file_name = $file_name[0];
}
我怀疑要弄清楚这一点需要上面的一些东西^
所以我的问题又来了......我需要在我的代码的[这里有什么?]位中放入什么才能使其工作?
我的第二个问题,对我来说更多的是进一步研究,那就是我可以通过哪些方式更动态地提供上述数组,最好不使用 MySQL?
编辑: 我对此进行了更多研究,但我仍然停留在我自己没有制作的这段代码上。
$navigation_list = false;
if (is_array($file_name)) {
$navigation_list = $file_name[1];
$file_name = $file_name[0];
}
我大部分都了解 is_array 运算符。有了上面的说法$file_name[1];
,那是说法$file_name[TRUE]
吗?然后对于下面的行 0 = FALSE?
我需要帮助来了解如何检测数组是否存在,以便打印包含<span class="arrow"> +</span>