这篇文章主要介绍了关于仿网易评论盖楼PHP+Mysql实现,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
大家可能都看过网易评论的那种盖楼式的引用,这边文章就用php和mysql来实现这种效果。
先设计数据表来存放评论数据:
DROP TABLE IF EXISTS `comment`; CREATE TABLE `comment` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(32) NOT NULL, `site` varchar(128) DEFAULT NULL, `content` varchar(1000) NOT NULL, `time` datetime NOT NULL, `pid` int(10) NOT NULL, `articleid` int(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
其中的关键字段就是pid,保存的是引用评论的id,如果没有引用那么设为0即可。
具体的实现主要是通过递归算法来找出所有引用的评论(和无限分类菜单类似),代码如下:
get_replace_db_sql("comment",$comment);
//echo $sql_str;
$sqlHelper->insert_db($sql_str);
}
?>
文章评论的无限引用实现
";
if(is_array($str))
print_r($str);
else
echo$str;
echo"";
}
/*
获取文章id对应的所有评论,以数组的形式返回结果
*/
functiongetCommentByArticleId($articleid=1){
$result= array();
if(empty($articleid)
|| !is_numeric($articleid)){
return$result;
}
$sql= 'select * from comment where articleid = '. $articleid;
global$sqlHelper;
$result= $sqlHelper->get_all($sql);
//p($result);
return$result;
}
/*
把评论数组数据转换为html格式
*/
functioncommentArr2Html($comment_arr) {
$str= '';
if(is_array($comment_arr)
&& !empty($comment_arr)){
$str.= ''; foreach($comment_arr as $key => $value) { $str.= '
'; $str.= '
'.$value['username'] .''; $str.= '' . $value['time'] .' 发表'; $str.= '
'; global$temp_arr; $temp_arr= array(); //这里去查找当前评论下的所有引用的评论,并格式化为html字符串 $tmpStr= ''; addCommentNode($comment_arr,$value); krsort($temp_arr);//根据key倒叙排序数组 $tmpStr= getChildComment($temp_arr);//添加所有的引用评论 $str.= $tmpStr; $str.= "" . $value['content'] ."
立即学习“PHP免费学习笔记(深入)”;
"; $str.= ''; } $str.=''; } return$str; } /* 把temp_arr数组中保存的引用评论信息转换为html形式 */ functiongetChildComment($temp_arr){ $htmlStr= ''; if(!is_array($temp_arr) || empty($temp_arr)){ return''; } foreach($temp_arras $value){ $tmp= '';
$tmp.= $htmlStr;
$tmp.= '' . $value['username'] .' 原贴:
' . $value['content'];
$tmp.= '
"; return$list[$key]; } } returnfalse; } $temp_arr= array();//设一个全局的数组变量来保存引用评论的信息 $list= getCommentByArticleId();//通过文章id获取所有的文章评论 $htmlStr= commentArr2Html($list);//把获取到的评论格式化转换为html形式 ?>











