簡體   English   中英

將PHP_include用於導航欄不適用於嵌套文件夾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM