获取当前网址,不包括包含的文件名

时间:2013-10-19 17:23:09

标签: php css include filepath

我有一个名为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__获取当前路径?那么如何获取当前文件路径,不包括路径中包含的文件名?

2 个答案:

答案 0 :(得分: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);

希望这会有所帮助。

答案 1 :(得分: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);

现在它按我想要的方式工作!谢谢大家的帮助!