이 글은 주로 NetEase 댓글을 모방하여 건물을 짓는 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;
키 필드는 참조된 댓글의 ID를 저장하는 pid입니다. 참조가 없으면 0으로 설정합니다.
구체적인 구현은 주로 재귀 알고리즘을 사용하여 참조된 모든 주석을 찾습니다(
무한 분류 메뉴와 유사). 코드는 다음과 같습니다. ';
foreach($comment_arr as $key => $value) {
$str.= ' ';
$str.= ' '.$value['username'] .'';
$str.= '' . $value['time'] .' 发表';
$str.= ' " . $value['content'] ." ';
$tmp.= $htmlStr;
$tmp.= '' . $value['username'] .' 原贴:<?php
require_once"sqlHelper.class.php";
//连接数据库
$sqlHelper= new SqlHelper('localhost','root', 'root','test', 3306);
//插入评论数据
if(isset($_POST) && !empty($_POST)){
$comment= array();
$comment['username'] =$_POST['name']?$_POST['name']:'匿名';
$comment['site'] =$_POST['site']?$_POST['site']:'
';
$comment['pid'] =$_POST['commentid']?$_POST['commentid']:'0';
if($comment['pid']
== $comment['id']){
$comment['pid'] ='0';
}
$comment['content'] =$_POST['content']?$_POST['content']:'...';
$comment['articleid'] =$_POST['articleid']?$_POST['articleid']:'1';
$comment['time'] = date ( 'Y-m-d H:i:s', time () );
$sql_str= $sqlHelper->get_replace_db_sql("comment",$comment);
//echo $sql_str;
$sqlHelper->insert_db($sql_str);
}
?>
<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"xml:lang="en">
<head>
<meta http-equiv="Content-Type"content="text/html;charset=UTF-8"/>
<title>文章评论的无限引用实现</title>
<style type="text/css">
*{margin:0;padding:0;}
body{margin:10px;font-size:14px;font-family:宋体}
h1{font-size:26px;margin:10px 0 15px;}
#commentHolder{width:540px;border-bottom:1px solid #aaa;}
.comment{padding:5px 8px;background:#f8fcff;border:1px solid #aaa;font-size:14px;border-bottom:none;}
.comment p{padding:5px 0;}
.comment p.title{color:#1f3a87;font-size:12px;}
.comment p span{float:right;color:#666}
.comment p{background:#ffe;padding:3px;border:1px solid #aaa;line-height:140%;margin-bottom:5px;}
.comment p span{color:#1f3a87;font-size:12px;}
</style>
</head>
<body>
<?php
functionp($str){
echo"<pre class="brush:php;toolbar:false">";
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.= '
' . $value['content'];
$tmp.= '
";
return$list[$key];
}
}
returnfalse;
}
$temp_arr= array();//设一个全局的数组变量来保存引用评论的信息
$list= getCommentByArticleId();//通过文章id获取所有的文章评论
$htmlStr= commentArr2Html($list);//把获取到的评论格式化转换为html形式
?>