2013-05-30 51 views
0

如何包含文件,但在包含和呈現後'忘記'它的所有內容;包含它,可以這麼說。包含一個html頁面,並在頁面渲染後丟棄css樣式

回到當天,我想我會用一個框架,但現在時代已經改變。我想一個iframe仍然是公平的遊戲....但有沒有其他方法?

p.s. 我無法編輯包含的文件:)。

的index.php

<?php 
echo '<p>This is some left-aligned text</p>'; 
include 'include.html'; 
echo '<p>This is some more left-aligned text</p>'; 
?> 

include.html

<html> 
<head> 
<style> 
body{ 
    text-align:center; 
} 
</style> 
</head> 
<body> 
<p>This is some centered text</p> 
</body> 
</html> 

輸出

     This is some left-aligned text 

         This is some centered text 

         This is some more left-aligned text 

所需的輸出

This is some left-aligned text 

         This is some centered text 

This is some more left-aligned text 

'終極' 目標 只給一些更多的信息,我有一個EPUB文件。我加載container.xml以確定根文件,它是一個.opf文件,它告訴我包含大量.html文件的spint ...

然後我將所有這些html文件包含到頁面中一個epub可以在一個連續的流中讀取。

epub文件不能被編輯?除非我可以永久修改epub文件來做到這一點。

+0

你只是試圖從一個文件的頁面追加一些HTML? – JustinMichaels

+0

我不認爲我實際上明白'爲什麼'你想要在呈現它後禁用CSS樣式。如果您禁用它,頁面會再次呈現,就好像您禁用的樣式不在那裏一樣。 – funforums

+2

對不起,我的意思是CSS。我想'包含'我包含的文件,以便它所做的任何操作都不會影響我網站的其他部分。 –

回答

1

將文件加載爲字符串,並僅加載html文件的主體,因爲在同一個文件中不能包含2個HTML標記。

<?php 
echo '<p class=\'left\'>This is some left-aligned text</p>'; 
$html = file_get_contents('include.html'); 
preg_match('/\<body\>(.*?)\<\/body\>/is', $html, $matches); 
echo $matches[1]; 
echo '<p class=\'left\'>This is some more left-aligned text</p>'; 
?> 
+0

謝謝,這有幫助。我稍微修改了正則表達式,因此它是/ \ (。*?)\ <\/body\> /是考慮到身體標記可能具有的任何屬性。但是,這增加了我的一些epub的加載時間。 –

+0

您好,我有一個目錄結構如下 的index.php /Articles/0/file1.html 到 /Articles/0/file20.html 總共有大約HTML的500KB麥汁文件我的索引正在渲染。我將它們全部變成一個平面html文件,爲用戶提供動態... 我可能不得不重新考慮我的方法,也許只關注爲webview預編譯1個html文件,這樣服務器就不必每個都做時間。 –

+0

@Emdiesse是的,這是一個好主意。 :) – lexmihaylov

1

上的index.php

<?php 
echo '<p class=\'left\'>This is some left-aligned text</p>'; 
include 'include.html'; 
echo '<p class=\'left\'>This is some more left-aligned text</p>'; 
?> 

在風格標籤只需創建CSS類添加上的index.php:

<style type="text/css"> 
.left{text-align:left;} 
</style> 

需要任何修改你的 「包含」 HTML文件。

它現在應該可以正常工作,包括。我會說,一個iframe是完美的,取決於你在做什麼。當前的演示頁面沒有多大意義,但我認爲這僅僅用於測試。所以上述應該適合你。

+0

我喜歡這個想法,它絕對適用於這一個文件包括。直到現在我還沒有解釋我的問題的其餘部分,但這不能解決第二個包含文件仍然會受到影響的問題。謝謝。 –

2

您可以嘗試使用scoped css,但它是一個實驗性功能。 所以在的index.php的頭,你應該包括這個jQuery插件:https://github.com/thingsinjars/jQuery-Scoped-CSS-plugin

然後,以達到你想達到的目標,你有你的include.html文件更改爲以下:

<html> 
<head> 
</head> 
<body> 
<style scoped> 
body{ 
    text-align:center; 
} 
</style> 
<p>This is some centered text</p> 
</body> 
</html> 

我想這應該做的伎倆,讓你載入「每一個」包括要包括但不讓它的風格來影響文檔的其餘部分頁面..但在您使用的jQuery插件的限制(它有一些問題)。Chrome和Firefox目前在本地實現了這個特定功能,不需要這個插件。

+0

我會考慮未來,當它少一點實驗:)。與此同時,我將充分利用iframe。 –

+0

如果你想知道「實驗是多少」,你必須知道Firefox在上一個版本中實現了它(前幾天發佈),Chrome在其「實驗性Webkit功能」中使用它。 JQuery插件工作得很好,雖然它在使用@import規則處理樣式時遇到了一些問題。 – funforums