+ -
当前位置:首页 → 问答吧 → 实现在评论中加入回复功能的办法

实现在评论中加入回复功能的办法

时间:2008-09-22

来源:互联网

一开始,大家可以先回想下留言版的回复功能,留言版的回复内容都保存reply字段中,那我们就根据这个也给评论加一个reply字段来存放回复的内容。进数据库运行这段sql:
[indent]ALTER TABLE `p8_comment` ADD `reply` TEXT NOT NULL AFTER `yz` ;[/indent]
值得一提:默认数据库扩展名是p8_ 如果你有改成其他,那这里也要做修改,要不然就会出错。导入好了,数据库方面的操作完毕,接下来就是用PHP代码让这个字段发挥作用。

这里先说说如何在后台界面的文章评论管理/设置中实现回复功能
修改后台目录下的评论PHP文件 comment.php,找到:
elseif($job=="show"&&$Apower[comment_list])
{
$rsdb=$db->get_one("SELECT * FROM {$pre}comment WHERE cid='$cid' ");
$rsdb[content]=str_replace("\r\n","
",$rsdb[content]);
require(dirname(__FILE__)."/"."head.php");
require(dirname(__FILE__)."/"."template/comment/show.htm");
require(dirname(__FILE__)."/"."foot.php");
}
在下面添加:
[indent]elseif($job=="reply"&&$Apower[comment_list])
{
$rsdb=$db->get_one("SELECT reply FROM `{$pre}comment` WHERE cid='$cid' ");
$replydb=unserialize($rsdb[reply]);
$replydb[username] || $replydb[username]=$userdb[username];
require(dirname(__FILE__)."/"."head.php");
require(dirname(__FILE__)."/"."template/comment/reply.htm");
require(dirname(__FILE__)."/"."foot.php");
}
elseif($action=="reply"&&$Apower[comment_list])
{
$postdb[posttime]=$times****p;
$postdb[uid]=$userdb[uid];
$content=addslashes( serialize($postdb) );
$db->query("UPDATE `{$pre}comment` SET reply='$content' WHERE cid='$cid'");
jump("修改成功","$FROMURL",1);
}[/indent]

回复的代码部分功能这样就写好了,然后大家应该会注意到template/comment/reply.htm这个,默认是不存在这个htm文件的,我们可以去template\guestbook目录下查看,把这个reply.htm复制过来。
当然了,还要做点修改才行。

比如把 “修改留言” 改成 “回复评论”,当然了这个不是重点,重点是要把
替换为: [indent][/indent]

然后在comment模板文件中添加回复链接,
修改后台目录下的评论模板文件 template\comment\list.htm,找到:
删除

替换成: [indent]删除/回复[/indent]

以上操作完毕,就已经完成了回复内容写入到reply字段功能,那接下来要做的就是还要在前台内容页中把回复内容显示出来。

修改整站目录下的comment_ajax.php (调用评论用到的php文件)
找到:if($rs[icon]){
$rs[icon]=tempdir($rs[icon]);
}
在下面添加:[indent]if($rs[reply]){
$replydb=unserialize($rs[reply]);
$replydb[content]=str_replace("\r\n","
",$replydb[content]);
$replydb[posttime]=date("Y-m-d H:i:s",$replydb[posttime]);
$rs[content] .= "回复$replydb[content] (署名replydb[username]/日期replydb[posttime])";
}
[/indent]

如果你细心的话,看到这段代码就想起留言版中的回复代码,没错,就是和它一样。


好了,到此可以告一段落,大家就可以进后台对评论进行回复了,如果想要做的更方便些,好比发布者在前台登录到会员中心那里可以直接给自己文章的评论进行回复,不用每次都要管理员去后台才可以回复这样,那我们就需要修改到整站会员目录下的comment.php

打开member\comment.php 找到:
if($job=='del'){
foreach( $cidDB AS $key=>$value){
$rsdb=$db->get_one("SELECT C.cid FROM {$pre}comment C LEFT JOIN {$pre}article A ON C.aid=A.aid WHERE C.cid='$value'");
$db->query("DELETE FROM {$pre}comment WHERE cid='$rsdb[cid]'");
}
refreshto("$FROMURL","删除成功",0);
}
在下面添加:
[indent]elseif($job=="reply")
{
$rsdb=$db->get_one("SELECT reply FROM `{$pre}comment` WHERE cid='$cid' ");
$replydb=unserialize($rsdb[reply]);
$replydb[username] || $replydb[username]=$userdb[username];

require(dirname(__FILE__)."/"."template/reply.htm");

}
elseif($action=="reply")
{
$postdb[posttime]=$times****p;
$postdb[uid]=$userdb[uid];
$content=addslashes( serialize($postdb) );
$db->query("UPDATE `{$pre}comment` SET reply='$content' WHERE cid='$cid'");
refreshto("$FROMURL","修改成功",1);
}[/indent]

前台回复的代码部分功能这样就写好了,然后大家应该会注意到template/reply.htm这个,默认是不存在这个htm文件的,我们可以去之前后台目录下的template/comment/reply.htm,把这个reply.htm复制过来放在member\template\目录下。

再在comment模板文件中添加回复链接,
修改会员目录下的评论模板文件 template\comment.htm,找到:
删除
替换成: a href="?job=del&cidDB[]=$rs[cid]">删除/回复

以上操作完毕,就完成了发布者在前台登录到会员中心那里可以直接给自己文章的评论进行回复。

作者: 水晶   发布时间: 2008-09-22