Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTML菜单,php,突出显示其子菜单项的第一项_Php_Html_Arrays_Function_Menu - Fatal编程技术网

HTML菜单,php,突出显示其子菜单项的第一项

HTML菜单,php,突出显示其子菜单项的第一项,php,html,arrays,function,menu,Php,Html,Arrays,Function,Menu,我正在寻找一个解决方案,自动highlightning顶部菜单项 目前的情况是这样的: 我将默认菜单存储在.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></

我正在寻找一个解决方案,自动highlightning顶部菜单项

目前的情况是这样的: 我将默认菜单存储在.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>
它由
.current
CSS样式突出显示

现在,我正在搜索一个PHP脚本,它可以执行如下操作(仅示例):


上面的代码基本上可以做到这一点,但我需要调用一些函数
somefunctiontofinout()
,以了解当前页面的
$top\u menuitem\u是什么


有什么建议吗?

您可以改用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");
        }

    });

});

由于没有人提供有效的解决方案,我想回答我的问题:

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);
include(“menu.php”);
$current_page=basename($_SERVER['PHP_SELF']);
$menu=“”;
功能菜单\u到\u数组($array,$found){
foreach($key=>$element的数组){
如果(!is_数组($element)){
如果($element=$current\u page&&!$found){
$found=true;
$menu.=“
  • ”; }否则{ $menu.=“
  • ”; } }否则{ 如果(在($element)&&!$found中找到当前页面){ $menu.=“
    • ”。menu\u到数组($element,true)。“
  • ”; }否则{ $menu.=“
    • ”。menu\u to\u数组($element,false)。“
  • ”; } } } 返回$menu; } 函数在($elem)中找到当前页面{ foreach($key=>$element的元素){ 如果(!is_数组($element)){ 如果($element=$当前页面){ 返回true; } }否则{ 如果(在($element)中找到当前页面){ 返回true; } } } 返回false; } $highlighted\u menu=菜单到数组($menu\u数组,false);
    以及菜单.php文件(一个php数组,而不是.txt文件中存储的平面文本):

    
    

    这很有效。这基本上是互联网上代码聚合的结果。

    不是。这似乎突出了当前页面。我需要突出显示包含当前页面的第一个菜单。不是当前页面或其父页面。已尝试,但对我无效。当然,我已经将“yourMenuClass”替换为“navigation”,这是我菜单的类名。。。谢谢。你真正的子菜单链接看起来怎么样?是否只有PHP文件、GET参数或其他文件?只有PHP文件,如“index.PHP”、“page1.PHP”、“sub_page1.PHP”。。。但是,上面的代码将突出显示包含当前页面的第一个菜单项?或者只是当前页面或其父页面?我需要它来突出显示第一个菜单项,即使当前页面在菜单中很深。谢谢。我已经更新了我的代码-看看吧!现在它只突出显示一级菜单链接!我测试了脚本,它适合我!无论我如何努力,我都无法让它工作:(.你的代码中的:
    ul.navigation
    是什么?我的菜单以:
    • 开始……
    等等。。。
    $(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");
            }
    
        });
    
    });
    
    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);
    
    <?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"
            );
    
    ?>