PHP生成的导航为活动页面分配一个类


PHP Generated Navigation assign a class to active page

我正在尝试为您当前查看的页面分配一个class='active'。我的菜单是用PHP从数组中生成的,请参阅下面的代码:

<?php
    $navmenu = array(
        'index' => 'Home',
        'about' => 'About',
        'page3' => 'Page3',
        'page4' => 'Page4',
        'page5' => 'Page5',
        'page6' => 'Page6'
    );
?>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
    <ul class="nav navbar-nav navbar-right">
        <?php
            foreach ($navmenu as $url => $diplay) {
                echo "<li><a href='{$url}.php' class=''>{$diplay}</a></li>'n";
            }
        ?>
    </ul>
</div>

我想把class=‘active’添加到你现在正在查看的页面中,但我不知道如何做到这一点,在简单的HTML中会是这样的:

<li class="active"><a href="index.html">Home</a></li>
<li><a href="about.html">About</a></li>
<li><a href="page3.html">Page3</a></li>
<li><a href="page3.html">Page4</a></li>
<li><a href="page3.html">Page5</a></li>
<li><a href="page3.html">Page6</a></li>

让我知道,我有什么选择来实现这一点。谢谢

只需比较您当前的URL(存储在$_SERVER['REQUEST_URI']中)是否是要打印的URL的一部分,在这种情况下,将class="active"添加到您的输出中。

请记住,如果您的url包含相同的名称部分(如"index"answers"profile_index_page"),则此解决方案可能会出现问题。

对于这个问题的100%解决方案,您需要使用大量regex或创建一个具有预定义路由的小型路由器。

此外,这个解决方案是非常静态的,因为您缺乏为以后的目的添加任何自定义html属性的能力,但我不想在这里走得太远,您会知道这个解决方案是否符合您的要求。

$output = "";
foreach ($navmenu as $url => $diplay) {
    $output .= '<li><a ';
    if(strpos($_SERVER['REQUEST_URI'], $url) !== false) {
        $output .= 'class="active" ';
    } 
    $output .= '>' .$diplay . '</a></li>'n';
}
echo $output;

一个选项是读取URL并在foreach循环中进行比较。

$_SERVER['REQUEST_URI']  

这将为您提供所需的URL部分。

然后在foreach循环中进行比较。

foreach ($navmenu as $url => $diplay) {
    $addClass = "";
    $urlArray = explode("/", $_SERVER['REQUEST_URI']);
    $urlArraySize = sizeof($urlArray);
    if($urlArray[$urlArraySize - 1] == $url."php")
    {
        $addClass = ' class="active"';
    }
    echo "<li".$addClass."><a href='{$url}.php' class=''>{$diplay}</a></li>'n";
}

注意:这比需要的步骤多了几个,但它与URL中的最后一个值(即页面值)进行了精确的比较。这将不考虑通过URL传递的任何参数。