有幾個我希望包含在「父」文件中的html代碼片段。
父文件包含相對路徑。
這些片段還包含相對路徑,相對於它們的位置 - 與它們將包括在其中的文件無關。
例如,一個片段是標題,對網站上的所有頁面都是通用的。包含html,同時保留包含文件的路徑
<div style='background:url(img/bg.jpg)'>
<img src='img/logo.png'>
</div>
這將被插入到現有的頁面如下:
<div style='background:url(img/gradient.jpg)'>
<?php include '../includes/header.txt'; ?>
</div>
實施例是非常大大簡化,實際的文件有許多路徑。
我不控制將被包含的文件。
這意味着我無法將PHP變量添加到網址。
我也無法以任何方式使路徑絕對路徑。
對於包含的文件 - 因爲我無法控制html。
所有文件 - 因爲最終的頁面dev'd幾臺機器上,且必須在是否http://www.mysite/myfile,http://localhost/mysite/myfile,甚至http://127.0.0.1/~/anyuser/ ...
一些想法我有:
- php include:
include '../includes/header.txt';
- 路徑與其包含的文件相關。
- 包括每個片段作爲一個iFrame:
- 頁面佈局不是很友好的iFrame。除了SEO &頁面加載問題。
- 解析頁面並使用解析器替換所有路徑。
- 這些頁面不是100%有效的HTML(無法控制它們),解析器會咳嗽並翻滾死亡。除了可笑的服務器負載。
- 在每一個真正的瀏覽器使用base tags
- 精美的作品。
但Internet Explorer 7,8和9只是忽略基本標記(頭部以外)。 一個基本標記可能會在頭部聲明,但頁面上的所有其他路徑(可能在CSS文件中)將全部錯誤。
- 精美的作品。
BaseTag用法:
<?php
echo "<base href='$path_to_includes_folder' />";
include '../includes/header.txt';
echo "<base href='$path_based_on___file__' />";
?>
據我所知,這正是爲什麼基地創建變量,並在每一個體面的瀏覽器支持 - 這樣我們就可以在一箇中間HTML文件,告訴瀏覽器我即將包含第二個HTML文件,並且所有路徑都應該相對於新位置。這在IE6中運行得非常好,我認爲必須有一些邏輯放棄對它的支持。一些逃脫Opera,Webkit和Mozilla的邏輯。 我可以找到關於這個問題的唯一的帖子讚美微軟放棄支持,甚至沒有給出什麼暗示爲什麼下降支持公認的標準(在所有瀏覽器中使用的時間)和有用的是一件好事。
現在,我討厭以熱情爲IE開發,但不能忽視它。他們仍然有近三分之一的用戶!
那麼,如何包含相對路徑的php片段,並保持它們相對於被包含的文件?
任何人都可以請告訴我,如果有任何理由在所有MS丟棄基地支持,或可以做些什麼來幫助恢復?
爲什麼要將基本標籤放置在頭部的任何位置?你想包括相關的PHP腳本(服務器端)或圖像(客戶端)?從你的問題來看,這不是很清楚。 – Phil 2010-11-10 21:45:37
我沒有發現你的問題非常清楚,但它似乎與include()或PHP沒有任何關係。 include()語句的結果與包含文件的內容在源文件中的該位置粘貼的結果相同。所以,想象一下這個HTML就在那裏,並且你沒有使用include()。現在你的問題與include()無關,只是想知道你想如何處理應用程序中的路徑。也許你應該爲項目中更高級別的圖像定義一個基本的URL,並在你的CSS中使用它。 – 2010-11-10 21:50:53
@Phil - 我試圖將HTML中包含的路徑包含到圖像,JavaScript或CSS文件中。我將基本標籤放在包含的內容之前的原因是,包含的內容具有與該頁面的其餘部分不同的根,該部分與位置對象相關。如果我把基本標籤放在頭部,它會使頁面上的所有路徑相對於其他位置......爲什麼我要這樣做? – SamGoody 2010-11-11 08:53:00