我正在寻找自动突出显示顶级菜单项的解决方案。
目前情况如下: 我有一个存储在.txt文件中的默认菜单:
<li><a href="index.php">HOME</a></li>
<li><a href="#">MENU_1</a>
<ul>
<li><a href="submenu_1.php">Submenu_1</a></li>
<li><a href="submenu_2.php">Submenu_2</a></li>
</ul>
</li>
<li><a href="#">MENU_2</a>
<ul>
<li><a href="#">Submenu_1</a>
<ul>
<li><a href="sub_submenu_1.php">Sub_Submenu_1</a></li>
<li><a href="sub_submenu_2.php">Sub_Submenu_2</a></li>
</ul>
</li>
<li><a href="#">Submenu_2</a></li>
</ul>
</li>
<li><a href="menu_3.php">MENU_3</a></li>
<li><a href="menu_4.php">MENU_4</a></li>
因此,当submenu
或sub_submenu
或任何项目是当前页面时,我需要突出显示其顶级MENU_X
父项(仅作为{{1}在我的页面顶部栏上可以看到项目。)
我将CSS样式应用于MENU_X
,因此当我设置顶部菜单时:
MENU_X
它以<li class="current"><a href="#">MENU_1</a>
CSS样式突出显示。
现在我正在搜索一个PHP脚本,它会执行类似这样的操作(仅限示例):
.current
上面的代码基本上可以解决问题,但是我需要调用一些函数<?php
$currentPage = $_SERVER["PHP_SELF"];
$url_parts = Explode('/', $currentPage);
$current_php_file = $url_parts[count($url_parts) - 1];
$raw_menu = file_get_contents("menu.txt");
$current_menu_item = '<li><a href="' . $current_php_file . '">'
$top_menuitem_of_current_page = someFunctionToFindOut(); //need some script to find out
$highlighted_menu_item = '<li class="current"><a href="' . $top_menuitem_of_current_page . '">';
$ready_menu = str_replace($top_menuitem_of_current_page, $highlighted_menu_item, $raw_menu);
echo $ready_menu;
?>
来找出someFunctionToFindOut()
是什么。
有什么建议吗?
答案 0 :(得分:1)
由于没有人提供工作解决方案,我想回答我的问题:
include("menu.php");
$current_page = basename($_SERVER['PHP_SELF']);
$menu = "";
function menu_to_array($array, $found) {
foreach($array as $key => $element){
if(!is_array($element)){
if($element == $current_page && !$found){
$found = true;
$menu .= "<li class='current'><a href='$element'>$key</a></li>";
}else{
$menu .= "<li><a href='$element'>$key</a></li>";
}
}else{
if(found_current_page_in($element) && !$found){
$menu .= "<li class='current'><a href='#'>$key</a><ul>" . menu_to_array($element, true) . "</ul></li>";
}else{
$menu .= "<li><a href='#'>$key</a><ul>" . menu_to_array($element, false) . "</ul></li>";
}
}
}
return $menu;
}
function found_current_page_in($elem){
foreach($elem as $key => $element){
if(!is_array($element)){
if($element == $current_page){
return true;
}
}else{
if(found_current_page_in($element)){
return true;
}
}
}
return false;
}
$highlighted_menu = menu_to_array($menu_array, false);
menu.php 文件(一个php数组,而不是存储在.txt文件中的平面文本):
<?PHP
$menu_array = Array(
'Main Page 1' => "page_1.php",
'Main Page 2' => Array("Sub Page 1" => "sub_page_1.php", "Sub Page 2" => "sub_page_2.php"),
'Main Page 3' => Array('Sub Page 1' => Array("Sub Sub Page 1" => "sub_sub_page_1.php", "Sub Sub Page 2" => "sub_sub_page_2.php"), 'Sub Page 2' => "#"),
'Main Page 4' => "page_4.php"
);
?>
这非常有效。它基本上是通过互联网发现的代码集合的结果。
答案 1 :(得分:0)
您可以使用jQuery代替。所以,也许这段代码片段可以帮助您解决问题:
$(document).ready(function(){
var pathname = window.location.pathname;
var filename = pathname.substr(pathname.lastIndexOf("/") + 1);
if( ! filename)
{
filename = "index.php";
}
$("ul.navigation > li > a").each(function(){
if($(this).attr("href") == filename || $(this).next("ul").find("a[href='"+filename+"']").length > 0)
{
$(this).addClass("current");
}
});
});