用PHP处理应用类的更有效方法


More effective way of handling applying classes with PHP

为了举例,假设我有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 ?>