2012-02-13 105 views
0

我正在構建一個php cms風格的應用程序,用於跟蹤成員字符,項目進展得很好,但我想知道是否有更有效的方式編碼我的導航欄。導航欄,相對鏈接

酒吧被包含在許多不同的頁面,從而相對鏈接作爲標準不會出於顯而易見的原因的工作,我已經越來越解決這個問題的方法是通過

if (strstr($_SERVER['SCRIPT_FILENAME'], "admin/char/")) { 
$home = "../../index.php"; 
$logout = "../user/logout.php"; 
} else if (strstr($_SERVER['SCRIPT_FILENAME'], "admin/user/")) { 

所以我每一種可以輸入的路徑組合,這個解決方案的工作原理都很好,但是由於我正在複製粘貼代碼並進行更改,我失去了一些東西的機會增加了,並且有了更多的鏈接,這個機會就會增加。

我想知道是否有更好的方式來實現相同的結果,少代碼?

任何意見將不勝感激。

+0

沒有其他人有任何其他方式做到這一點? – 2012-02-16 18:07:10

+0

我保留一個變量,它知道每個頁面在哪個級別,所以很容易將相對鏈接返回到基礎。 – hakre 2012-07-12 17:09:16

回答

1

您可能希望在定義常量(例如BASE_URL ='http:// localhost/your_site /')的位置創建一個通用配置文件(包含在所有腳本中)。

然後,使用配置文件中定義的BASE_URL常量,改爲使用ABSOLUTE值更改所有鏈接。

在你有類似的結尾:

$home = BASE_URL . 'index.php'; 

這將永遠是一個有效的鏈接。

部署時,您需要更改配置文件並將BASE_URL設置爲您的新域(例如www.mysite.com)。

+0

是的,關鍵是這是其他網站管理員使用的開放代碼,所以主機的實際url會有所不同。 – 2012-02-13 13:58:00

+0

根據用戶角色,您將擁有不同的菜單鏈接,但這與保持不變的BASE_URL無關。如果管理員的菜單不同,他們應該根據用戶類型有不同的塊,而不是'SCRIPT_FILENAME',這些鏈接仍然會啓動/使用相同的'BASE_URL':'BASE_URL.'admin /註銷。 php'' – 2012-02-13 14:03:34

+0

沒有你在部署中提到我需要更改基本網址意味着手動更改,我需要的東西,可以在任何域上工作,自動沒有管理員要求輸入此地址。 – 2012-02-13 22:36:16

0

以前的建議,雖然不完全回答我的問題,但給了我一個使用名爲$ BASE_URL的變量的想法。從這裏我已經使用sytax如。

if (strstr($_SERVER['SCRIPT_FILENAME'], "admin/index.php")) { 
$BASE_URL = substr($_SERVER['SCRIPT_FILENAME'], 0, -15) 
} else if (strstr($_SERVER['SCRIPT_FILENAME'], "index.php")) { 
$BASE_URL = substr($_SERVER['SCRIPT_FILENAME'], 0, -9) 
} 

我已經重複了這個多路徑,同時它佔用的空間,公平一點,我的全部,當鏈接從一個頁面斷做的就是添加的網頁地址和相應的長度,這是多大更輕鬆。

我已經在我的header.php文件中包含了這段代碼,從而使整個站點的變量都可訪問。