我正在尝试使用PHP突出显示当前打开的菜单项。
我的菜单项的HTML。
<ul class="menu">
<li><a href="index.php?p=edit-profile&error=message">Edit Profile</a></li>
<li><a href="index.php?p=edit-contact">Edit Contact</a></li>
<li><a href="index.php?p=edit-facilities">Edit Facilities</a></li>
<li><a href="index.php?p=edit-location">Edit Location</a></li>
<li><a href="index.php?p=edit-images">Manage Images</a></li>
</ul>
这是我在PHP中尝试的方式:
if ($_SERVER['QUERY_STRING']) {
list($queryString) = explode('&',$_SERVER['QUERY_STRING']);
$openPage = $queryString;
list($key, $value) = explode('=',$openPage);
$currentPage = $value;
// Determine what menu item to be highlight:
switch ($currentPage) {
case 'edit-profile':
$class1 = 'class="active"';
break;
case 'edit-contact':
$class2 = 'class="active"';
break;
case 'edit-facilities':
$class3 = 'class="active"';
-----------
// Default is to include the main page.
default:
$class = 'class=""';
break;
} // End of main switch.
} else {
//Determine The Index page
$path = $_SERVER['PHP_SELF'];
$indexPage = basename($path);
$indexPage = basename($path, '.php');
}
这就是我在菜单中回显这些类的方法:
<li <?php if(isset($class1)) echo $class1; ?>><a href="index.php?p=edit-profile">Edit Profile</a></li>
<li <?php if(isset($class2)) echo $class2; ?>><a href="index.php?p=edit-contact">Edit Contact</a></li>
这是解决方案对我有用。但我的问题是,如果我有很多页面,我需要在SWITCH case
中使用许多类变量。
有人能告诉我是否有替代解决方案来最小化我的PHP代码?
希望有人可以帮助我。
谢谢。
答案 0 :(得分:1)
一个简单的解决方案是将菜单项存储在地图中,并迭代它们:
$menuItems = [
'edit-profile' => [
'url' => 'index.php?p=edit-profile&error=message',
'name' => 'Edit Profile'
],
'edit-contact' => [
'url' => 'index.php?p=edit-contact',
'name' => 'Edit Contacts'
],
...
]
然后迭代这些项目。
<ul class="menu">
<?php
foreach($menuItems as $menuItem => $desc) {
// You get $currentPage from the query string
$class = ($currentPage === $menuItem)? 'class="active"': '';
echo '<li '.$class.'><a href="'.$desc['url'].'">'.$desc['name'].'</a></li>';
}
?>
</ul>
答案 1 :(得分:0)
有了这个,你不需要SWITCH案例。
<li <?php if($currentPage=='edit-profile') echo 'class="active"'; ?>><a href="index.php?p=edit-profile">Edit Profile</a></li>
<li <?php if($currentPage=='edit-contact') echo 'class="active"'; ?>><a href="index.php?p=edit-contact">Edit Contact</a></li>
答案 2 :(得分:0)
不要完成所有这些操作,只需将所有菜单项放在一个数组中并循环遍历它。
您正在发送带变量的页面参数。
因此,在发送时可以控制它。
页面数组将页面标题作为键,页面url作为值。
这样,你不需要单独的变量,循环中的单个变量将为这项工作提供服务。
<?php
$pages = array(); // Get all page titles and urls in array.
$pages['Edit Profile'] = 'edit-profile&error=message';
$pages['Edit Contact'] = 'edit-contact';
$pages['Edit Facilities'] = 'edit-facilities';
$pages['Edit Location'] = 'edit-location';
$pages['Manage Images'] = 'edit-images';
if (! empty($pages)) {
$current = (isset($_GET['p'])) ? $_GET['p'] : '';
?>
<ul>
<?php
foreach ($pages as $title => $url) {
$active = ($current == $url) ? 'active' : '';
?>
<li><a href="index.php?p=<?php echo $url;?>" class="<?php echo $active;?>"><?php echo $title;?></a></li>
<?php
}
?>
</ul>
<?php
}
?>
答案 3 :(得分:0)
您可以使用数组并尝试这样
if ($_SERVER['QUERY_STRING']) {
list($queryString) = explode('&',$_SERVER['QUERY_STRING']);
$openPage = $queryString;
list($key, $value) = explode('=',$openPage);
$currentPage = $value;
// Determine what menu item to be highlight:
// Store in array, you will be having only one item in array
$class[$currentPage] = 'class="active"';
} else {
//Determine The Index page
$path = $_SERVER['PHP_SELF'];
$indexPage = basename($path);
$indexPage = basename($path, '.php');
}
,菜单可以
<li <?php if(isset($class['edit-profile'])) echo $class['edit-profile']; ?>><a href="index.php?p=edit-profile">Edit Profile</a></li>
<li <?php if(isset($class['edit-contact'])) echo $class['edit-contact']; ?>><a href="index.php?p=edit-contact">Edit Contact</a></li>
注意:这没有经过测试,因为我现在无法访问PHP。
答案 4 :(得分:0)
使用PHP生成自己的菜单结构,但为了突出显示,我们可以使用Jquery。
见下面的例子:
<style>
.active{ background-color:#3F6}
</style>
<ul class="menu">
<li><a href="testmenu.php">Home</a></li>
<li><a href="testmenu.php?p=edit-profile&error=message">Edit Profile</a></li>
<li><a href="testmenu.php?p=edit-contact">Edit Contact</a></li>
<li><a href="testmenu.php?p=edit-facilities">Edit Facilities</a></li>
<li><a href="testmenu.php?p=edit-location">Edit Location</a></li>
<li><a href="testmenu.php?p=edit-images">Manage Images</a></li>
</ul>
<script type='text/javascript' src='//code.jquery.com/jquery-1.11.0.js'></script>
<script>
var aurl = window.location.href; // Get the absolute url
$('.menu li a').filter(function() {
return $(this).prop('href') === aurl;
}).parent('li').addClass('active');
</script>