如何在PHP中高亮菜单当前页面(静态页面+公共文件引入场景)
在PHP静态页面中实现菜单当前活跃页高亮
嘿,这个问题其实很好解决,核心就是让PHP自动识别当前访问的页面,然后给对应的菜单项加上active类就行。结合你用include引入公共导航的场景,我给你两种实用方案:
方案一:逐个判断菜单项(适合少量菜单)
直接修改你的navigation.php,先获取当前页面的文件名,再给匹配的菜单项加上高亮类:
<?php // 获取当前访问的页面文件名(比如 index.php 或 contact-us.php) $currentPage = basename($_SERVER['REQUEST_URI']); // 处理首页可能是根目录(不带index.php)的情况 if (empty($currentPage) || $currentPage === '/') { $currentPage = 'index.php'; } ?> <div class="collapse navbar-collapse" id="navbar-collapse-1"> <ul class="nav navbar-nav"> <li <?php echo ($currentPage === 'index.php') ? 'class="active"' : ''; ?>><a href="index.php">Home</a></li> <li <?php echo ($currentPage === 'contact-us.php') ? 'class="active"' : ''; ?>><a href="contact-us.php">Contact</a></li> </ul> </div>
原理很直白:$_SERVER['REQUEST_URI']会返回当前页面的完整路径,用basename()提取最后一段就是文件名,然后和每个菜单项的href对比,匹配就输出class="active"。
方案二:数组循环生成菜单(适合菜单较多的场景)
如果之后要添加更多菜单项,逐个写判断会很繁琐,不如把菜单数据存在数组里循环生成,维护起来更省心:
<?php // 定义菜单数组:键是页面路径,值是菜单显示文本 $menuItems = [ 'index.php' => 'Home', 'contact-us.php' => 'Contact', // 以后加新菜单直接在这里追加即可 // 'about.php' => 'About Us', ]; // 处理当前页面的特殊情况 $currentPage = basename($_SERVER['REQUEST_URI']); if (empty($currentPage) || $currentPage === '/') { $currentPage = 'index.php'; } ?> <div class="collapse navbar-collapse" id="navbar-collapse-1"> <ul class="nav navbar-nav"> <?php foreach ($menuItems as $pagePath => $menuText): ?> <li <?php echo ($currentPage === $pagePath) ? 'class="active"' : ''; ?>> <a href="<?php echo $pagePath; ?>"><?php echo $menuText; ?></a> </li> <?php endforeach; ?> </ul> </div>
额外提示
- 因为你是用
include将navigation.php引入到各个页面,$_SERVER是全局变量,所以每个页面都会自动获取当前访问的路径,不需要修改index.php或contact-us.php的代码。 - 如果你的网站用了URL重写(比如去掉.php后缀),可以调整
$currentPage的获取逻辑,比如用parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)提取路径再处理,但普通带.php后缀的静态页面,上面的代码完全够用。
内容的提问来源于stack exchange,提问作者rakeshkumar
相关产品推荐
相关产品推荐

