为了举例,假设我有3个网页和一个functions.php文件。
- index.php
- shop.php
- 联系人.php
- functions.php
每个页面上都应该有一个导航。
<nav>
<ul>
<li class=""> <a href="#">Home</a> </li>
<li class=""> <a href="#">Shop</a> </li>
<li class=""> <a href="#">Contact</a> </li>
</ul>
</nav>
每个页面上都有一个手动设置的变量。index=1、shop=2和contact=3。
示例:
$page_id = 1;
我宁愿使用一个函数将导航代码输出到页面上,并让它根据手动设置在每个页面上的当前$page_id变量,自动将.active
类设置在正确的<li>
上,而不是将导航放在每个页面中。索引=1,商店=2,联系人=3。
Index.php示例:
<?php $page_id=1; ?>
<!DOCTYPE html>
<head>
etc....
当涉及到输出导航时,我使用函数CCD_ 3在html中导航代码所在的空间中。
<nav>
<ul><?php getNaviation($page_id); ?></ul>
</nav>
Functions.php
<?php getNavigation($id) {
switch ($id) {
case 1:
echo "
<li class="active"> <a href="#">Home</a> </li>
<li class=""> <a href="#">Shop</a> </li>
<li class=""> <a href="#">Contact</a> </li>
";
break;
case 2:
echo "
<li class=""> <a href="#">Home</a> </li>
<li class="active"> <a href="#">Shop</a> </li>
<li class=""> <a href="#">Contact</a> </li>
";
break;
case 3:
echo "
<li class=""> <a href="#">Home</a> </li>
<li class=""> <a href="#">Shop</a> </li>
<li class="active"> <a href="#">Contact</a> </li>
";
break;
default:
echo "
<li class="active"> <a href="#">Home</a> </li>
<li class=""> <a href="#">Shop</a> </li>
<li class=""> <a href="#">Contact</a> </li>
";
break;
}//end of switch
}//end of getNavigation ?>
我想知道的是,是否有更"干净"、更灵活/有效的方法可以用更少的代码实现同样的结果?我更希望只使用纯PHP而不是像jQuery这样的东西来实现这一点。
由于这只是模拟数据,您可以想象,由于可能的页面数量,switch语句将变得越来越大。
您可以使用assoc_array
中的页面URL并与$_SERVER['REQUEST_URI']
进行比较
<?php
function activeClass ($href) {
if ($_SERVER['REQUEST_URI'] == $href) {
return "active";
}
}
$hrefs = array (
"/home" => "Home Page",
"/shop" => "Shop",
"/contact" => "Contact",
);
?>
<?php foreach($hrefs as $href=>$text): ?>
<li class="<?=activeClass($href) >">
<a href="<?=$href>">
<?=$text ?>
</a>
</li>
<?php endforeach; // all hrefs ?>