嵌套页面找不到父.js文件

时间:2013-12-02 18:44:08

标签: javascript php require-once

我在子文件夹“mysite / theSubfolder”中嵌套.php页面 - 例如'oneNestedPhpWebPage.php'。

子文件夹中的这些页面包含一个位于父文件夹中的导航栏.php文件:

 // this is code inside my nested .php page "oneNestedPhpWebPage.php"
 <?php
   require_once('../TopNav.php');
 ?>

此TopNav.php也被网站的根文件夹中的网页使用,我必须将TopNav.php保留在根文件夹中。

当我访问页面“oneNestedPhpWebPage.php”时,一切都很好 - 我可以看到该页面。我也可以看到TopNav.php导航栏。

但TopNav.php页面有以下代码行:

          <script src="nb.js"></script>

并且,与TopNav.php本身一样,javascript文件“nb.js”在网站的根文件夹中是

如果我的嵌套.php页面之一使用了TopNav.php,例如oneNestedPhpWebPage.php - 这个 nb.js 文件的javascript函数不是从包含的TopNav.php中调用时被发现。

javascript文件nb.js位于网站的根文件夹中,这是嵌套网页上方的一个文件夹,如我的“oneNestedPhpWebPage.php”

现在,我也在网站的文件夹中的一堆.php网页中使用TopNav.php - 我的导航栏代码 - 例如,在我的索引中.php网站在网站的根文件夹中,我有以下内容 - 请注意上面类似代码行的不同之处:

  // this is code inside my index.php page located in the site's root folder
 <?php
   require_once('TopNav.php');
 ?>

这里,因为我的nb.js文件位于带有index.php的父文件夹中,所以TopNav.php对nb.js中javascript函数的调用工作罚款。

因此,为了解决这个问题,我添加了两行代码:

  • 我的嵌套文件“oneNestedPhpWebPage.php”底部的这行代码:

    <input type="hidden" id="nestedBnbPage" value="1" />
    
  • 然后我尝试了以前没试过的东西,我把它放在TopNav.php中:

       <script src="nb.js">if(document.getElementById('nestedBnbPage'))this.src="../nb.js";
    

这并没有解决问题。

我有53个.php网页文件位于嵌套的“mysite / theSubfolder”子文件夹中。我在网站的根文件夹中有更多。

我需要在两组根文件夹页面和嵌套文件夹页面中使用Navbar代码。

我不能将nb.js javascript代码放在TopNav.php中。

如何配置TopNav.php,以便当其中一个嵌套网页使用它时,TopNav.php将能够在网站的根文件夹中“找到”其nb.js javascript文件?

1 个答案:

答案 0 :(得分:0)

解决此类问题的最佳且唯一真实的方法是为所有需求/包含设置绝对路径和基本URL。我建议最好的方法是在您的应用中设置$BASE_PATH变量,如此。

$BASE_PATH='/var/www/path/to/my/website/';

并且要求所有这样的文件:

require($BASE_PATH . 'TopNav.php');

无论在何处调用文件,require都将使用文件的绝对路径。由于$BASE_PATH是您设置的一次性变量,您可以在主配置文件中设置它 - 或者TopNav.php或其他元素页面加载的任何公共文件 - 而不用担心它。要使代码可移植,只需根据系统设置更改$BASE_PATH

我还建议为浏览器方面设置基本URL变量,例如Javascript。

$BASE_URL='http://my.website/';

然后确保在呈现脚本URL时您的PHP文件正确设置$BASE_URL

<script src="<?php echo $BASE_URL; ?>nb.js"></script>