2011-04-08 60 views
3

我想在一個頁面上使用Commentics php sript包含多個註釋部分。 首先,我試圖完成使用include喜歡所以這個:<iframe>而不是包括

<div id="1"> 
    <?php 
    include "comments_id1.php"; 
    ?> 
</div> 
<div id="2"> 
    <?php 
    include "comments_id2.php"; 
    ?> 
</div> 

comments_id1.php:

<?php 
session_start(); 
ob_start(); 
?> 
[...] 
<?php 
$page_id = "1"; 
$reference = "Page One"; 
$path_to_comments_folder = "comments/"; 
define ('IN_COMMENTICS', 'true'); 
require $path_to_comments_folder . "includes/commentics.php"; 
?> 

(comments_id2.php相應:$page_id = "2"; $reference = "Page Two"

顯然(和它可能是值得注意的是,對於PHP我仍然很笨拙),這不起作用,或者至少會導致各種麻煩(例如「警告:無法修改標題信息 - 標題已發送」)。

於是我想出了用的是標籤解決方案,例如:

<div id="1"> 
    <iframe width="100%" src="comments_id1.php"></iframe> 
</div> 
<div id="2"> 
    <iframe width="100%" src="comments_id2.php"></iframe> 
</div> 

現在,這裏是我的問題: 這甚至有人會推薦一個有效的解決方案?如果是的話,是否有任何使用的重大後果(除搜索引擎之外)? 如果這不是路要走,有什麼建議嗎?

謝謝!

回答

1

我不會使用iframe的...

來解決此問題標題,你可以緩衝輸出(頭只能在實際內容之前發送),然後發送一次全部:

ob_start(); 
// your code with includes 
ob_end_flush(); 
+0

這將在主頁面右側?不在個別評論頁面。無論如何,我無法讓它工作。雖然標題似乎不是問題,因爲我不再以某種方式得到這個警告。現在我沒有任何錯誤 - 它只是在第二次包含之後停止加載。 – Tim 2011-04-08 19:33:39

3

就我個人而言,由於可能的原因我深深地憎恨IFRAME,所以我建議遠離它們。

你看過Commentics' integration guide嗎?

看來你必須把

<?php 
    session_start(); 
    ob_start(); 
?> 

在PAG的開始,

<?php 
    $page_id = "1"; 
    $reference = "Page One"; 
    $path_to_comments_folder = "comments/"; 
    define ('IN_COMMENTICS', 'true'); //no need to edit this line 
    require $path_to_comments_folder . "includes/commentics.php"; //no need to edit this line 
?> 
您希望您的意見

。還有一個extended integration guide

+0

這隻適用於一個評論部分,當我在同一頁面上添加另一個時,它不會顯示,並且頁面停止從第二個註釋部分的位置加載(儘管沒有PHP錯誤)。 – Tim 2011-04-08 16:14:22

+0

此外,在評論支持論壇上通過此主題評論http://www.commentics.org/forum/showthread.php?tid=55,通常不可能在同一頁面上有多個評論部分。 – Tim 2011-04-08 16:49:31

1

我不熟悉您使用的腳本,但iframes有一些重大的缺點。該方法的一些缺點可能是:

  • iframe需要在HTML標記中定義的寬度和高度。如果iframe中的維度不同(例如,由於比常規評論長),您將獲得額外的滾動條集。 I幀的
  • 的內存使用和渲染時間都很高,尤其是在舊的Internet Explorer版本

爲了避免「無法修改標題信息」的警告,你可以啓用PHP output buffering,或者你可以看看標題您正在使用的腳本實際上是發送。也許他們沒有必要?

1

使用iframe的另一個結果是渲染可能無序,因爲它是一個獨立的HTTP請求,並且由於它是一個附加請求,因此可以增加整體時間來檢索數據,特別是在在8之前的IE版本中,它們一次只能同時發出2個HTTP請求 - 因此,如果您同時加載了圖像或其他腳本,其中一些可能會排隊,直到兩個插槽中的一個或兩個都可用爲止。 IE8(和Firefox)將其提升至6.

雖然看起來真正的解決方案是尋求修復Commentics腳本,或者找到另一個庫,儘管所有的建議你可能會發現在這裏相反(儘管爲好對於初學者,我建議注重實用性和實驗性,而不是教條;換句話說,只要iframe中沒有鏈接,點擊就會導致iframe被替換爲內容,它就可以爲你工作。不過,由於我和其他人提到的原因,這不是最佳做法。

另一個需要注意的問題是,即使在開始<?php之前最細微的空格也會被解釋爲發送給用戶的文本,所以如果您包含的腳本嘗試添加標題,則可能會出現問題。頭文件已經發送消息意味着腳本已經開始發送頭文件了,因爲在開始發送已經開始打印出來的內容(在這種情況下爲空白)之前它需要發送頭文件(無緩衝)。對於PHP,我真的推薦一個像Smarty這樣的模板引擎(和Smarty很好地記錄在案),在這裏你可以熟悉讓業務邏輯先運行的模式,然後將變量提供給設計邏輯以便在那裏使用(目前你的HTML +包括什麼)。當你包含輸出文本的其他庫時,你仍然需要使用緩衝,但是由於你發現的原因。從comments_id1.php

它將工作

<?php 
    session_start(); 
    ob_start(); 
?> 

+0

謝謝。看起來我至少要放棄我對多個註釋的概念,直到我對PHP有了更深的理解,或者我找到了一個能夠做到這一點的腳本。我並不是真的熱衷於使用iframe,但它是唯一可行的方法。而且由於這裏的每個人的建議是保持我的手,iframes,我會。無論如何,Smarty都在我的名單上,所以我打算這麼做。 – Tim 2011-04-08 19:50:31