0

0

php怎么实现评论回复功能

藏色散人

藏色散人

发布时间:2021-09-12 09:57:47

|

7853人浏览过

|

来源于php中文网

原创

php实现评论回复功能的方法:1、进行数据表设计;2、通过递归获取评论列表;3、展示评论页面的action;4、展示页面的整体结构设计;5、创建单个评论信息p结构代码;6、设置回复评论的a标签按钮样式。

php怎么实现评论回复功能

本文操作环境:windows7系统、PHP7.1版,DELL G3电脑

php怎么实现评论回复功能?

php无限级分类实现评论及回复功能

经常在各大论坛或新闻板块详情页面下边看到评论功能,当然不单单是直接发表评论内容那么简单,可以对别人的评论进行回复,别人又可以对你的回复再次评论或回复,如此反复,理论上可以说是没有休止,从技术角度分析很容易想到运用无限级分类技术存储数据,运用递归获取评论层级结构数据,运用ajax实现评论页面交互,这里用thinkphp框架做个简单的demo练练手,为了简化流程这里第三级评论开始停止回复,当然只要在这个基础上稍作修改就可以实现无限回复功能,主要是view层样式修改较麻烦,需花些时间。

立即学习PHP免费学习笔记(深入)”;

一、效果需求分析:

1.在头部可以直接发布一级评论,最新发表的评论显示在最上面,如下效果图

2.对发表的评论可以回复,回复显示在上级评论下边,形成层级关系,如下效果图

3.页面操作细节:点击某个评论的回复按钮时,显示回复文本输入框,同时其他评论的回复文本输入框消失,当再次点击该回复按钮时,该文本框消失

4.在最后一级评论(这里设置是第三级)关闭回复功能

5.即时显示评论总数

二、实现思路及细节

1.数据表设计

2.controller层关键函数:

(1). 递归获取评论列表

/**
*递归获取评论列表
 */
 protected function getCommlist($parent_id = 0,&$result = array()){ 
 $arr = M('comment')->where("parent_id = '".$parent_id."'")->order("create_time desc")->select(); 
 if(empty($arr)){
 return array();
 }
 foreach ($arr as $cm) { 
 $thisArr=&$result[];
 $cm["children"] = $this->getCommlist($cm["id"],$thisArr); 
 $thisArr = $cm;     
 }
 return $result;
 }

(2). 展示评论页面的action

public function index(){ 
 $num = M('comment')->count(); //获取评论总数
 $this->assign('num',$num);
 $data=array();
 $data=$this->getCommlist();//获取评论列表
 $this->assign("commlist",$data);
 $this->display('index');
 }

(3).评论页面ajax访问添加评论的action

/**
*添加评论
 */
 public function addComment(){  
 $data=array();
 if((isset($_POST["comment"]))&&(!empty($_POST["comment"]))){
 $cm = json_decode($_POST["comment"],true);//通过第二个参数true,将json字符串转化为键值对数组
 $cm['create_time']=date('Y-m-d H:i:s',time());
 $newcm = M('comment');
 $id = $newcm->add($cm);

 $cm["id"] = $id;
 $data = $cm;

 $num = M('comment')->count();//统计评论总数
 $data['num']= $num;

 }else{
 $data["error"] = "0";
 }


 echo json_encode($data);
 }

3.view层实现

(1). 展示页面的整体结构设计

I-Shop购物系统
I-Shop购物系统

部分功能简介:商品收藏夹功能热门商品最新商品分级价格功能自选风格打印结算页面内部短信箱商品评论增加上一商品,下一商品功能增强商家提示功能友情链接用户在线统计用户来访统计用户来访信息用户积分功能广告设置用户组分类邮件系统后台实现更新用户数据系统图片设置模板管理CSS风格管理申诉内容过滤功能用户注册过滤特征字符IP库管理及来访限制及管理压缩,恢复,备份数据库功能上传文件管理商品类别管理商品添加/修改/

下载

实际效果:

页面html代码:




 
 php无限级分类实战————评论及回复功能
 
 
 



{$num}条评论

发表评论

全部评论

  • @@##@@

    {$data.nickname} {$data.create_time}

    {$data.content}

    • @@##@@

      {$child.nickname} {$child.create_time}

      {$child.content}

      • @@##@@

        {$grandson.nickname} {$grandson.create_time}

        {$grandson.content}

(2). 单个评论信息p结构代码

@@##@@

{$data.nickname} {$data.create_time}

{$data.content}

对应的效果图:

php怎么实现评论回复功能

对应的css代码:

.head-pic{
 width:40px;
 height:40px; 
}

.cm{
 position:relative;
 top:0px;
 left:40px;
 top:-40px;
 width:600px;
}

.cm-header{
 padding-left:5px;
}

.cm-content{
 padding-left:5px;
}

.cm-footer{
 padding-bottom:15px;
 text-align:right;
 border-bottom: 1px dotted #CCC;
}

.comment-reply{
 text-decoration:none;
 color:gray;
 font-size: 14px;
}

4. JS代码

(1). 提交评论:提交评论的a标签按钮引用了样式comment-submit,在其点击事件中进行ajax操作

$('body').delegate('.comment-submit','click',function(){ 
 var content = $.trim($(this).parent().prev().children("textarea").val());//根据布局结构获取当前评论内容
 $(this).parent().prev().children("textarea").val("");//获取完内容后清空输入框
 if(""==content){
  alert("评论内容不能为空!"); 
 }else{
  var cmdata = new Object();
  cmdata.parent_id = $(this).attr("parent_id");//上级评论id
  cmdata.content = content;
  cmdata.nickname = "游客";//测试用数据
  cmdata.head_pic = "/Public/images/default.jpg";//测试用数据  
  var replyswitch = $(this).attr("replyswitch");//获取回复开关锁属性
  $.ajax({
  type:"POST",
  url:"/index.php/home/index/addComment",
  data:{
   comment:JSON.stringify(cmdata)  
  },
  dataType:"json",  
  success:function(data){
   if(typeof(data.error)=="undefined"){
   $(".comment-reply").next().remove();//删除已存在的所有回复p 
   //更新评论总数   
   $(".comment-num").children("span").html(data.num+"条评论");
   //显示新增评论
   var newli = "";   
   if(cmdata.parent_id == "0"){
    //发表的是一级评论时,添加到一级ul列表中   
    newli = "
  • @@##@@

    "+data.nickname+""+data.create_time+"

    "+data.content+"

    • "; $(".comment-ul").prepend(newli); }else{ //否则添加到对应的孩子ul列表中 if('off'==replyswitch){//检验出回复关闭锁存在,即三级评论不再提供回复功能 newli = "
    • @@##@@

      "+data.nickname+""+data.create_time+"

      "+data.content+"

      • "; }else{//二级评论的回复按钮要添加回复关闭锁属性 newli = "
      • @@##@@

        "+data.nickname+""+data.create_time+"

        "+data.content+"

        • "; } $("li[comment_id='"+data.parent_id+"']").children("ul").prepend(newli); } }else{ //有错误信息 alert(data.error); } } }); } });

          (2).回复评论:回复评论的a标签按钮引用了样式comment-reply,在其点击事件中进行显示或隐藏评论输入框的操作

          //点击"回复"按钮显示或隐藏回复输入框
           $("body").delegate(".comment-reply","click",function(){
           if($(this).next().length>0){//判断出回复p已经存在,去除掉
            $(this).next().remove();
            }else{//添加回复p
            $(".comment-reply").next().remove();//删除已存在的所有回复p 
            //添加当前回复p
            var parent_id = $(this).attr("comment_id");//要回复的评论id
          
            var phtml = "";
            if('off'==$(this).attr("replyswitch")){//二级评论回复后三级评论不再提供回复功能,将关闭属性附加到"提交回复"按钮"
            phtml = "

          提交回复

          "; }else{ phtml = "

          提交回复

          "; } $(this).after(phtml); } });

          推荐学习:《PHP视频教程

          php怎么实现评论回复功能php怎么实现评论回复功能php怎么实现评论回复功能php怎么实现评论回复功能php怎么实现评论回复功能php怎么实现评论回复功能

          相关文章

          PHP速学教程(入门到精通)
          PHP速学教程(入门到精通)

          PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

          下载

          相关标签:

          php

          本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

          相关专题

          更多
          云朵浏览器入口合集
          云朵浏览器入口合集

          本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

          20

          2026.01.20

          Java JVM 原理与性能调优实战
          Java JVM 原理与性能调优实战

          本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

          29

          2026.01.20

          PS使用蒙版相关教程
          PS使用蒙版相关教程

          本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

          162

          2026.01.19

          java用途介绍
          java用途介绍

          本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

          120

          2026.01.19

          java输出数组相关教程
          java输出数组相关教程

          本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

          41

          2026.01.19

          java接口相关教程
          java接口相关教程

          本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

          10

          2026.01.19

          xml格式相关教程
          xml格式相关教程

          本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

          14

          2026.01.19

          PHP WebSocket 实时通信开发
          PHP WebSocket 实时通信开发

          本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

          23

          2026.01.19

          微信聊天记录删除恢复导出教程汇总
          微信聊天记录删除恢复导出教程汇总

          本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

          172

          2026.01.18

          热门下载

          更多
          网站特效
          /
          网站源码
          /
          网站素材
          /
          前端模板

          精品课程

          更多
          相关推荐
          /
          热门推荐
          /
          最新课程
          PHP课程
          PHP课程

          共137课时 | 9万人学习

          JavaScript ES5基础线上课程教学
          JavaScript ES5基础线上课程教学

          共6课时 | 9万人学习

          PHP新手语法线上课程教学
          PHP新手语法线上课程教学

          共13课时 | 0.9万人学习

          关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
          php中文网:公益在线php培训,帮助PHP学习者快速成长!
          关注服务号 技术交流群
          PHP中文网订阅号
          每天精选资源文章推送

          Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号