我目前正在使用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-->
如何让它工作,以便当我点击文件夹中的某个页面时,它会加载正确的文件?
答案 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();
}