0

すべてのページでナビゲーション バー コードを繰り返す代わりに、ナビゲーション メニュー バー用の PHP コードのスニペットを 1 つ記述し、そのファイルを関連するページに含めたいと考えています。ナビゲーション バー メニューの最初の HTML コードは次のとおりです。(デフォルトでは「ユーザー」が選択されています。)

<ul>
   <li class="active" ><a href="administrator1.php"><span><B>USERS</B></span></a></li>
   <li><a href="administrator2.php"><span><B>CREATE PROFILE</B></span></a></li>
   <li><a href="administrator3.php"><span><B>PAYMENTS</B></span></a></li>
   <li><a href="administrator4.php"><span><B>DEFENSE</B></span></a></li>
   <li><a href="administrator5.php"><span><B>PROGRESS REPORT</B></span></a></li>
</ul>

そこで、上記のコードを PHP コードに変更しました。このコードを含むファイル名は「test.php」です

<?php
$menu = array(
    'users'          => array('text'=>'USERS',           'url'=>'?p=administrator1.php'),
    'createProfile'  => array('text'=>'CREATE PROFILE',  'url'=>'?p=administrator2.php'),
    'payment'        => array('text'=>'PAYMENTS',        'url'=>'?p=administrator3.php'),
    'defense'        => array('text'=>'DEFENSE',         'url'=>'?p=administrator4.php'),
    'progressReport' => array('text'=>'PROGRESS REPORT', 'url'=>'p=administrator5.php'),);

class Nav {
    public static function GenerateMenu($items) {
        $html = "<ul>";
        foreach($items as $item) {
            $html .= "<li><a href='{$item['url']}' ><span><B>{$item['text']}</B></span> </a></li>";
        }
        $html .= "</ul>";
        return $html;
    }
};
?>

「administrator1.php」では、上記の関数を次のように呼び出しました。

<?php 
    include 'test.php';
    echo Nav::GenerateMenu($menu);
?>

私の問題は、「administrator1.php」をデフォルトで選択されたメニューリスト項目として配置し、選択されたリスト項目を CSS クラスに配置する方法です。

選択したリスト項目には、「アクティブな」CSS クラスが必要です。

<li class="active" >
4

1 に答える 1

0

現在のスクリプト ファイル名が、ナビゲーションに表示されている URL の一部であるかどうかを確認します。activeその場合は、それにクラスを割り当てます。

foreach($items as $item) {

if(stristr($item['url'],__FILE__)===FALSE)
  {
    $html .= "<li><a href='{$item['url']}' ><span><B>{$item['text']}</B></span> </a></li>";
  }
  else
  {
    $html .= "<li class='active'><a href='{$item['url']}' ><span><B>{$item['text']}</B></span> </a></li>";
  }

}
于 2013-10-19T07:50:42.217 に答える