在PHP中使用Bootstrap通用导航栏实现当前链接高亮显示
嘿,这个需求在PHP开发中太常见了,我给你分享几个简单易实现的方案,完美适配你用<?php include 'filename.php'?>引入通用导航栏的场景:
方法一:通过当前页面文件名判断(最直接)
这种方法适合你的页面文件名和导航项一一对应的情况,比如index.php对应首页,about.php对应关于我们。
首先在你的导航栏include文件开头,先获取当前页面的文件名:
<?php // 获取当前执行的PHP文件名,比如访问index.php时得到"index.php" $currentPage = basename($_SERVER['PHP_SELF']); ?>
然后在每个导航项里,用三元运算符判断是否匹配当前页面,匹配就给对应的.nav-item加上Bootstrap的active类:
<nav class="navbar navbar-expand-lg navbar-light bg-light"> <a class="navbar-brand" href="#">我的网站</a> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav"> <li class="nav-item <?php echo ($currentPage == 'index.php') ? 'active' : ''; ?>"> <a class="nav-link" href="index.php">首页</a> </li> <li class="nav-item <?php echo ($currentPage == 'about.php') ? 'active' : ''; ?>"> <a class="nav-link" href="about.php">关于我们</a> </li> <li class="nav-item <?php echo ($currentPage == 'contact.php') ? 'active' : ''; ?>"> <a class="nav-link" href="contact.php">联系我们</a> </li> </ul> </div> </nav>
这样当你访问index.php时,首页的导航项就会自动加上active类,Bootstrap的样式会让它高亮显示。
方法二:通过请求URL路径判断(适合伪静态/自定义路由)
如果你用了伪静态或者自定义URL(比如/about/而不是about.php),可以用$_SERVER['REQUEST_URI']来获取完整的请求路径:
<?php // 获取当前请求的完整路径,比如访问/about/时得到"/about/" $currentUri = $_SERVER['REQUEST_URI']; ?>
然后在导航项里用strpos()判断路径是否包含目标字符串:
<li class="nav-item <?php echo (strpos($currentUri, '/about/') !== false) ? 'active' : ''; ?>"> <a class="nav-link" href="/about/">关于我们</a> </li>
这种方法适配更复杂的URL结构,不用担心文件名变化的问题。
方法三:给每个页面定义专属标识(最灵活)
如果你的页面文件名和导航名称不对应,或者需要更精细的控制,可以在每个页面的开头定义一个变量,比如:
在index.php开头:
<?php $pageIdentifier = 'home'; ?>
在about.php开头:
<?php $pageIdentifier = 'about'; ?>
然后在导航栏include文件里,直接判断这个变量:
<li class="nav-item <?php echo ($pageIdentifier == 'home') ? 'active' : ''; ?>"> <a class="nav-link" href="index.php">首页</a> </li>
这种方法的好处是,哪怕你以后改了页面文件名,只要$pageIdentifier不变,导航高亮就不会出问题,维护起来更省心。
小提醒:HTML后缀页面的处理
如果你的页面是.html后缀,需要确保服务器能解析HTML文件里的PHP代码。你可以在网站根目录的.htaccess文件里添加以下规则:
AddType application/x-httpd-php .html .htm
或者直接把.html改成.php,这样PHP代码才能正常运行。
内容的提问来源于stack exchange,提问作者Manasse

