我在子文件夹“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文件?
答案 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>