我正在尝试为您当前查看的页面分配一个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传递的任何参数。