2

名前の付いたファイルがadministrator1.phpあり、その中にtest.php含まれています。したがって、内部のコードadministrator1.php

 <?php include 'test.php'; ?>

内にダイナミック ナビゲーション メニューがありますtest.php。コードは

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

class Nav {
  function GenerateMenu($items) {
    $html = "<ul>";
    foreach($items as $item) {
      if(stristr(__FILE__,$item['url'])===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']}.nnn</B></span> </a></li>";
      }
    }
  $html .= "</ul>";
  return $html;
}};

echo Nav::GenerateMenu($menu); 
?>

そしてNav、同じファイル内でメソッドを呼び出しました。

ここでの問題は、ナビゲーション バー全体が出力されるが、選択された項目 ('USERS') の CSS クラスactiveが呼び出されないことです。administrator1.phpしかし、ファイルを含めずにファイル内のこのコード全体を置き換えると、test.php正常に動作します。ということで、インクルードファイルのファイルパスに問題があると思います。そして、それは私が__FILE__現在のパスを取得するために使用したからですか? 次に、パスに含まれるファイル名を除いて現在のファイルパスを取得するにはどうすればよいですか?

4

2 に答える 2

2

静的関数を呼び出すには、::演算子を使用できます。ただし、クラスの非静的メンバーにアクセスするには、次のようにオブジェクトを作成する必要があります-

$nav_ob = new Nav();
echo $nav_ob->GenerateMenu($menu);

そして、配列を作成しているときに問題があります-

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

最後の要素の後のカンマ。そのはず -

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

更新しました

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

class Nav {
  function GenerateMenu($path, $items) {
    $html = "<ul>";
    foreach($items as $item) {
      if(stristr($path,$item['url'])===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']}.nnn</B></span> </a></li>";
      }
    }
  $html .= "</ul>";
  return $html;
}}; 
?>

そして、上記のphpファイルを含めた後の各administrator.phpファイルで、次のようなメソッドを呼び出します-

$nav_ob = new Nav();
echo $nav_ob->GenerateMenu(__FILE__, $menu);

これが役立つことを願っています。

于 2013-10-19T17:31:00.257 に答える
1

答えが見つかりました!に置き換えられまし__FILE__$_SERVER["PHP_SELF"]。コードは次のとおりです。

class Nav {
 function GenerateMenu($items) {
 $html = "<ul>";
 foreach($items as $item) {
  if(stristr($_SERVER["PHP_SELF"],$item['url'])===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>";
  }
}
$html .= "</ul>";
return $html;
}};
$nav_ob = new Nav();
echo $nav_ob->GenerateMenu($menu);

今では私が望んでいたように動作します! 助けてくれてありがとう!

于 2013-10-19T19:09:11.310 に答える