如何用PHP根据当前页面为公共导航栏设置不同class类名
实现方案
前置步骤:页面传参
你需要在每个引入导航的父页面先定义当前页面标识,变量会自动传入被include的navigation.php中:
比如index.php中代码:
<?php $page = 'index'; include 'navigation.php'; ?>
register.php中代码:
<?php $page = 'register'; include 'navigation.php'; ?>
其他页面同理赋值即可。
方案1:switch 实现
navigation.php 代码如下:
<?php $navClass = 'third-class'; // 默认类 switch($page) { case 'index': $navClass = 'first-class'; break; case 'register': $navClass = 'second-class'; break; // 后续新增页面只需加case即可 } ?> <nav class="<?php echo $navClass; ?>"> <!-- 公共导航代码 不用重复写多次 --> </nav>
注意:不要把整个nav结构写在每个分支里,公共代码统一维护即可,只需要动态输出类名就行
方案2:数组映射(更推荐,维护成本更低)
如果后续会新增大量页面规则,用数组存映射关系更简洁,修改规则不用改动逻辑代码:
<?php // 页面与导航类的映射关系,新增页面直接在这里加键值对即可 $classMap = [ 'index' => 'first-class', 'register' => 'second-class' ]; // 取对应类,没有匹配就用默认的third-class $navClass = $classMap[$page] ?? 'third-class'; ?> <nav class="<?php echo $navClass; ?>"> <!-- 公共导航代码 --> </nav>
进阶:自动识别页面,无需手动传$page
不想每个页面手动定义$page的话,可以在navigation.php里自动获取当前访问的页面文件名:
<?php // 自动获取当前php文件的文件名(去掉后缀) $page = basename($_SERVER['PHP_SELF'], '.php'); $classMap = [ 'index' => 'first-class', 'register' => 'second-class' ]; $navClass = $classMap[$page] ?? 'third-class'; ?> <nav class="<?php echo $navClass; ?>"> <!-- 公共导航代码 --> </nav>
内容的提问来源于stack exchange,提问作者PHP Starter
相关产品推荐
相关产品推荐

