【问题标题】:Get current url excluding Included file names获取当前 url,不包括包含的文件名
【发布时间】:2013-10-19 17:23:08
【问题描述】:

我有一个名为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。但是,如果我在不包含test.php 文件的情况下替换administrator1.php 文件中的整个代码,它就可以正常工作。所以我猜是包含文件的文件路径有问题。是因为我使用了__FILE__ 来获取当前路径吗?那么如何获取当前文件路径,不包括路径中包含的文件名?

【问题讨论】:

    标签: php css include filepath


    【解决方案1】:

    为了调用静态函数,我们可以使用:: 运算符。但是要访问类的非静态成员,您应该创建对象,例如 -

    $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);
    

    希望这会有所帮助。

    【讨论】:

    • 请有人帮助我!
    • @dnk 删除数组中最后一个值之后的逗号。这就是问题所在。
    • 已删除!所选项目 'USER' 仍然没有调用活动类。但是当它在 administrator1.php 文件中被替换而不包括 test.php 文件时它可以工作!
    • 是不是和文件路径和__FILE__有关?
    • @dnk 是的,这里__FILE__会返回test.php的路径
    【解决方案2】:

    找到答案了! 将 __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);
    

    现在它可以按我的意愿工作了!感谢大家给予的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 2012-07-20
      相关资源
      最近更新 更多