【问题标题】:How do I make relative file pathing work with include()?如何使相对文件路径与 include() 一起工作?
【发布时间】:2016-07-14 16:18:01
【问题描述】:

我正在开发一个网站,我的文件结构的相关部分是:

  • 网站
      • class1
    • js

现在,js 包含使用同一文件夹中其他脚本的脚本。我可以让脚本在 php 页面上正确加载的唯一方法是将整个 js 文件夹复制到相关的子文件夹中,或者将页面移动到站点文件夹中。这些选项都不好。
我知道问题出在文件路径上,那么如何将 js 脚本中的包含项获取到相对于它们的位置的路径,而不是 php 页面的位置?

一个例子:
我在 class1 中有一个名为 class1home.php 的页面。
它调用一个名为 script.js 的 js 脚本。
script.js 包含一个带有 include(script2.js) 的函数,该函数位于 js 文件夹中。
由于路径,包含正在寻找 site/classes/class1/script2.js。
我希望它转到 site/js/script2.js。

因为有多个文件夹和脚本使用 script2.js,所以我不能只将包含中的文件路径更改为相对于该特定页面。

在 script.js 中:

/**
 * @function      Include
 * @description   Includes an external scripts to the page
 * @param         {string} scriptUrl
 */
function include(scriptUrl) {
    document.write('<script src="' + scriptUrl + '"></script>');
}  

使用它的一个地方(在 script.js 中):

/**  
* @module       ToTop  
* @description  Enables ToTop Plugin  
*/  
(function ($) {
    var o = $('html');
    if (o.hasClass('desktop')) {
        include('js/jquery.ui.totop.min.js');

        $(document).ready(function () {
            $().UItoTop({
                easingType: 'easeOutQuart',
                containerClass: 'ui-to-top fa fa-angle-up'
            });
        });
    }
})($);

【问题讨论】:

  • 谁明白这个问题?
  • 我认为一些示例代码可能会帮助我们理解并帮助某人提供有用的答案
  • 我已经用一个例子更新了这个问题
  • 你能分享一些代码吗? include 的函数定义(一个糟糕的函数名称选择)以及调用它的位置会有所帮助。
  • 您需要查看 Require.js 或 yepnope.js 或类似的东西。您在那里使用的内容将不起作用,因为在您调用其中定义的函数时,该脚本可能尚未下载。

标签: javascript php html


【解决方案1】:

我通常通过调用 Server 来确定页面所在的位置来解决此类问题。它看起来像这样:

$callingPageURL =$_SERVER['SCRIPT_FILENAME'];

然后,我使用explode 函数解析该字符串以确定文件和文件夹。它看起来像这样:

$callingPageURLHolder = explode("/", $callingPageURL);

这会将一组值加载到调用PageURLHolder。从那里,我使用常见的数据结构方法(如数组弹出)来获取我认为与程序相关的 URL 部分。它看起来像这样:

$callingPageFile = array_pop($callingPageURLHolder);
$callingPageFolder = array_pop($callingPageURLHolder);

一旦您可以解析出从服务器返回的数组,您就可以简单地加载需要连接到 URL 中的变量,您将在包含中调用该 URL。

通过添加一些测试这些提取值的流控制,可以使用相同类型的技术根据模板页面的包含位置在模板页面中进行小幅更改。

例如,

    switch ($callingPageFile){
    case "index.php":
    // some response
        break;
 }

使用这样的逻辑,我可能会构建一系列案例,在这些案例中我会响应预期的 URL 部分。当我想稍微定制一个 PHP 页面时,我会使用这种类型的代码。使用这些技术和一些计划,您可能能够响应您打算将代码移植到各个地方的想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 2020-10-16
    • 2019-02-12
    • 2010-10-01
    • 2013-04-26
    • 1970-01-01
    • 2011-07-19
    相关资源
    最近更新 更多