2016-07-14 126 views
0

我正在一個網站上,我的文件結構的相關部分是:如何使用include()使相對文件路徑工作?

  • 網站
      • class1的
    • JS

現在,js包含使用同一文件夾內的其他腳本的腳本。我可以讓腳本在php頁面上正確加載的唯一方法是將整個js文件夾複製到相關的子文件夾中,或將頁面移動到站點文件夾。這些選項都不是很好。
我知道問題出在文件路徑上,那麼如何才能讓js腳本中的包含路徑相對於它們的位置而不是php頁面的位置呢?

這方面的一個例子:
我在class1中有一個名爲class1home.php的頁面。
它調用一個名爲script.js的js腳本。
script.js包含include(script2.js)函數,它位於js文件夾中。
由於路徑,include正在尋找site/classes/class1/script2.js。
我想讓它去site/js/script2.js。

因爲使用script2.js有多個文件夾和腳本,所以我不能僅僅改變include中的文件路徑就是相對於那個特定的頁面。

內的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' 
      }); 
     }); 
    } 
})($); 
+0

誰明白這個問題? – Lekhnath

+0

我認爲一些示例代碼可能會幫助我們理解並幫助某人提供有用的答案 – RiggsFolly

+0

我已用示例更新了該問題 –

回答

0

我通常由具有解決這種類型的問題的頁面識別它在哪裏通過調用服務器。它看起來像這樣:

$callingPageURL =$_SERVER['SCRIPT_FILENAME']; 

然後,我解析該字符串以確定文件和文件夾,通過使用explode函數。它看起來像這樣:

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

這會將一個值的數組加載到callingPageURLHolder中。從那裏開始,我使用常見的數據結構方法,比如數組彈出,來到我認爲與程序相關的URL部分。它看起來像這樣:

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

一旦你能分析出是來自服務器返回的數組,你可以簡單地加載您需要連接到您將在包括調用一個URL變量。

可以使用這種相同類型的技術,通過添加測試這些提取值的流量控件,根據它包含的位置對模板頁面進行小的更改。

例如,

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

使用邏輯那樣,我可以建立在我對預期的URL部分反應病例鏈。當我想稍微定製一個PHP頁面時,我使用這種類型的代碼。使用這些技術和一些計劃,您可能能夠響應您打算將代碼移植到各種場所的想法。

相關問題