对导航栏使用PHP_include不适用于嵌套文件夹

时间:2014-01-12 04:08:39

标签: php html twitter-bootstrap

我目前正在使用WAMP / localhost来开发我的网站。我不想继续在我的所有页面上更改导航栏,因此我将导航栏移动到自己的文件中并使用include('navbar.php')。它目前有效,除了我有嵌套文件夹,例如,

WAMP (folder)
--www (folder)
----index.php
----navbar.php
----lab (folder)
------lab1 (folder)
--------q1.php
--------q2.php

当我查看问题1,q1,并尝试返回home,index.php时,它可以工作。当我尝试从q1查看q2时,它不起作用。而是显示 /labs/1/labs/1/2.php 。这是我的导航栏代码,包含在所有页面上,

<div class="col-md-2 hidden-sm hidden-xs" id="sidebar" role="navigation">
  <div class="well sidebar-nav">
    <ul class="nav">
      <li><a href="/index.php">Home</a></li>
      <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown">Lab 1<b class="caret"></b></a>
                <ul class="dropdown-menu" id="sidebar-dropdown">
                  <li><a href="./labs/1/1.php">Question One</a></li>
                  <li><a href="./labs/1/2.php">Question Two</a></li>
                  <li><a href="./labs/1/4.php">Question Four</a></li>
                  <li><a href="#">sub item</a></li>
                </ul>
      <!--<li><a href="#">Item</a></li>
      <li><a href="#">Item</a></li>
      <li><a href="#">Item</a></li>
      <li><a href="#">Item</a></li>
      <li><a href="#">Item</a></li>-->
    </ul>
  </div><!--/.well -->
</div><!--/span-->

如何让它工作,以便当我点击文件夹中的某个页面时,它会加载正确的文件?

3 个答案:

答案 0 :(得分:1)

您需要在href上提供完整的地址

您可以在导航栏顶部定义变量

$base = 'http://localhost/myproject'; //as per as your site

并更改标签的href

<li><a href="<?php echo $base; ?>/labs/1/1.php">Question One</a></li>
<li><a href="<?php echo $base; ?>/labs/1/2.php">Question Two</a></li>
<li><a href="<?php echo $base; ?>/labs/1/4.php">Question Four</a></li>

以上将在href中输出完整的URL

在你的情况下。指示当前目录,当您单击问题二时,它将labs / 1 / 2.php附加到当前URL

答案 1 :(得分:0)

您需要正确设置路径,无论是绝对路径(从Windows上的驱动器号或\或Unix / Linux系统上的/开始)还是相对于当前目录(以。或..开头)。 例如,如果文件名以../开头,则解析器将查找父目录以查找所请求的文件。所以,这取决于你包含它的位置。您需要修复路径,使其指向参考文件中的目标文件。

如果在当前文件夹和其中的另一个文件夹中包含../,则无法找到。为避免使用绝对路径或适当修改相对路径。

答案 2 :(得分:0)

您可以使用配置文件(位于根目录中),也可以包含索引,具体取决于您的偏好。

在该文件中,您可以设置..

$rootDir = __DIR__; // or dirname(__FILE__);.. location of the config/index file

$includeDir = $rootDir.DIR_SEP.include.DIR_SEP; // so $rootDir/in

然后,您可以将配置或索引文件包含在您希望的任何嵌套文件中,但仍然可以调用...

include_once($includeDir.'navbar.php');

除此之外的一切,我都不太确定。

或者你可以使用一个函数(这是一个可怕的方法,但可能会有效)

function getNavBar()
{
    include($includeDir.'navbar.php');
}

或者非常粗糙(实际上我不知道如果有的话,这会有多好用)...

fucntion getNavBar()
{
    ob_start();
    include($includeDir.'navbar.php');
    ob_end_flush();
}