例如,假设我有3个网页和一个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;
我不是将导航放在每个页面上,而是使用一个函数将导航代码输出到页面上,让它自动将.active
类设置为正确的<li>
取决于在手动每页上设置的当前$ page_id变量上。 Index = 1,shop = 2且contact = 3.
Index.php示例:
<?php $page_id=1; ?>
<!DOCTYPE html>
<head>
etc....
在输出导航时,我使用了该功能
导航代码在html中的空间getNaviation($page_id);
。
<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 ?>
我想知道的是,是否有更多更清洁的&#39;以更少的代码实现相同结果的更灵活/更有效的方法?我最好只想使用纯PHP而不是像jQuery那样实现这一点。
由于这只是模拟数据,正如您所想象的那样,由于可能的页数,该switch语句将变得越来越大。
答案 0 :(得分:2)
您可以使用assoc_array
中的网页网址并与$_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 ?>