2

我有一个名为的文件administrator1.phptest.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在同一个文件中调用了该方法。

这里的问题是,将打印整个导航栏,但active不会调用所选项目的 ('USERS') CSS 类。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 回答