CMS内容管理系统的多级评论回复和文章数据表关系

CMS内容管理系统中,文章和评论(回复)是一对多的关系。不少网友也经常问到这个问题,怎样获取一篇文章下的评论并盖楼式输出。

我们以wordpress的数据表(评论表comment)为例,来理解一下实现这种需求的数据表设计。

先上一张wordpress评论(comment)数据表结构图。


表中我们可以观察到三个重要字段:comment_id、comment_post_ID和comment_parent。
comment_id就是评论或回复的id号。
comment_post_ID对应的就是发表评论的文章id号,post_id或article_id,实现了由评论id找到文章id。
comment_parent就是评论的多级回复,由comment_parent再找comment_id,从而可以实现这种盖楼式输出,对文章发表评论和对评论再发表评论。

事实上,comment_post_ID和comment_parent这种结构设计也是CMS内容管理系统评论(回复)表实现盖楼式输出的常见设计逻辑。由文章id找评论,由父子级评关联到对评论的再次回复。

知道了这种文章和评论,评论和回复的逻辑关系,实现多级评论回复的嵌套输出就容易多了。

一、拿到当前文章id
$aid = isset($_GET['id']) > 0 ? intval($_GET['id']) : "";

二、拿到当前文章id的所有评论
$sql="SELECT c.author, c.comment, 
a.id article_id, a.title, a.publicationDate, a.content
FROM comments c
RIGHT JOIN articles a
ON c.id = a.id";
$res= mysqli_query($link,$sql);
$result=mysqli_fetch_array($res);
三、递归式获取当前文章下的评论和回复
protected  function commentList($aid,$pid = 0,&$result=array()){//加&表示引用传递
$arr = ArticleComment::relation(['usertalent'=> function($query){
$query->field('id,talent_usernickname,talent_avatar');
}])->where(['pid' => $pid])->where(['article_id' => $aid])->order('id desc')->select();
if(empty($arr)){
return array();
}
foreach ($arr as $cm) {
$thisArr=&$result[];
$cm["children"] = $this->commentList($aid,$cm["id"],$thisArr);
$thisArr = $cm;
}
return $result;
}
四、输出当前文章的评论和回复
echo $this->commentList($aid);
以上盖楼式获取和输出评论回复只是一种参考逻辑,还有很多不同方法,仅供实现数据结构的参考。再加上评论数及回复、审核等按钮,这种CMS评论模版就有点五脏俱全了,就象明生网的评论模块一样展示这种梯级评论,参考样式:https://www.monseng.com/8377409.html。

#现在前往

精选留言

CMS,内容,管理系统,多级
sample
2022-11-13
写留言
签到
投稿
QQ咨询
返回顶部