我希望使用Commentics php sript在一个页面上包含多个评论部分。
首先,我尝试使用include
完成此操作,如下所示:
<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时我仍然非常无能为力),这不起作用或至少导致各种麻烦(例如“警告:无法修改标头信息 - 标题已发送“)。
因此,我提出的解决方案是使用<iframe>
标记,如下所示:
<div id="1">
<iframe width="100%" src="comments_id1.php"></iframe>
</div>
<div id="2">
<iframe width="100%" src="comments_id2.php"></iframe>
</div>
现在这是我的问题:
这甚至是任何人都会推荐的有效解决方案吗?如果是这样的话,使用<iframe>
为此目的会产生什么重大后果(除了搜索引擎)?
如果不是这样的话,有什么建议吗?
谢谢!
答案 0 :(得分: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。
答案 1 :(得分:1)
我不会使用iframe ......
解决标题问题,你可以缓冲输出(标题只能在实际内容之前发送),然后一次发送所有内容:
ob_start();
// your code with includes
ob_end_flush();
答案 2 :(得分:1)
我不熟悉您正在使用的脚本,但iframe有一些明显的缺点。这种方法的一些缺点可能是:
要避免“无法修改标头信息”警告,您可以在PHP中启用output buffering,或者您可以查看您正在使用的脚本实际发送的标头。也许他们没必要?
答案 3 :(得分:1)
使用iframe的另一个后果是渲染可能是乱序的,因为它是一个独立的HTTP请求,并且,因为它是一个额外的请求,这可以增加检索数据的总时间,尤其是在IE中8之前的版本,它们一次限制为2个同时的HTTP请求 - 因此,如果您同时加载图像或其他脚本,其中一些可能会排队,直到两个插槽中的一个或两个都空闲。 IE8(和Firefox)将此提升至6。
虽然看起来真正的解决方案是调查他们修复评论家的脚本,或者你找到了另一个图书馆,尽管你可能会在这里找到相反的建议(虽然有充分的理由),对于初学者,我建议专注关于实用性和实验而不是教条;换句话说,只要iframe中没有链接,只要iframe中没有链接,就会导致iframe被内容替换。出于我和其他人提到的原因,这不是最好的做法。
需要注意的另一个问题是,即使在开始<?php
之前最轻微的空格也会被解释为发送给用户的文本,因此如果您包含的脚本尝试添加标题,则可能会出现问题。已发送消息的标头意味着脚本已开始发送标头,因为它需要在开始发送已经开始打印的内容(在这种情况下是空白)之前发送它们(没有缓冲)。
对于PHP,我真的推荐像Smarty这样的模板引擎(Smarty很好地记录在案),你可以放心让你的业务逻辑先运行,然后将变量提供给设计逻辑以供在那里使用(目前是什么)是你的HTML +包括)。当您包含其他输出文本的库时,您仍然需要使用缓冲,原因是您发现的原因。
答案 4 :(得分:0)
只需删除:
<?php
session_start();
ob_start();
?>
来自comments_id1.php
它会起作用。