2011-04-08 48 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