[英]Using PHP_include for navbar does not work with nested folders
我目前正在使用WAMP / localhost来开发我的网站。 我不想一直在所有页面上更改导航栏,因此将导航栏移到了自己的文件中,并使用了include('navbar.php')。 它目前可以正常工作,例如当我有嵌套文件夹时,
WAMP (folder)
--www (folder)
----index.php
----navbar.php
----lab (folder)
------lab1 (folder)
--------q1.php
--------q2.php
当我查看问题1(q1)并尝试回到首页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-->
如何使用它,以便在单击文件夹中的页面时可以加载正确的文件?
您需要在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中输出完整的网址
就你而言。 指示当前目录,当您单击问题二时,将labs / 1 / 2.php附加到当前URL
您需要正确设置路径,无论是绝对路径(在Windows中以驱动器号或\\开头,在Unix / Linux系统中以/开头)还是相对于当前目录的路径(以。或..开头)。 例如,如果文件名以../开头,则解析器将在父目录中查找以找到请求的文件。 因此,这取决于您将其包括在何处。 您需要修复路径,使其指向参考文件中的目标文件。
它不会找到您是否同时在当前文件夹和其中的另一个文件夹中都包含../。 为了避免使用它,请绝对路径或适当地修改相对路径。
您可以使用配置文件(位于根目录中),也可以包括索引,具体取决于您的偏好。
您可以在该文件中进行设置。
$rootDir = __DIR__; // or dirname(__FILE__);.. location of the config/index file
$includeDir = $rootDir.DIR_SEP.include.DIR_SEP; // so $rootDir/in
然后,您可以将config或index文件包含在所需的任何嵌套文件中,但仍可以调用...
include_once($includeDir.'navbar.php');
除此之外,我不太确定。
或者您可以使用一个函数(这是一种可怕的方法,但是可能会起作用)
function getNavBar()
{
include($includeDir.'navbar.php');
}
或真的很粗糙(实际上,我不知道这有多好,如果可以的话)。
fucntion getNavBar()
{
ob_start();
include($includeDir.'navbar.php');
ob_end_flush();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.