网站的评论回复功能


新建一张表

image.png

关键的字段就在于 pid。如果用户是评论的话,默认pid为0,如果是回复 ,用js控制表单隐藏域 pid等于上级

然后ajax异步提交存入库中,再用递归进行排序,最后进行页面输出.

html:

<!-- 文章id -->
<input type="hidden" name="aid" id="aid" value="0">
<!-- 用户id -->
<input type="hidden" name="uid" id="uid" value="{$Think.session.uid}">
<!-- 内容 -->
<div class="comment-textarea-box">
    <textarea rows="8" cols="50" name="content" id="respond-textarea" class="textarea comment-textarea" required ></textarea>
</div>
<a href="javascript:false;" id="{$comment.id}" onclick="reply(this)">回复</a>

js:

//点击回复时候
function reply(o){
    var comment_id=o.id;
    $("#reply").attr('comment-id',''+comment_id+'');
    $("#reply").append(newdiv);
    var username=$('#username-'+comment_id+'').text();
    $("#respond-textarea").text('@'+username+'');
}
//评论功能实现
layui.use('layer',
function() {
  var layer = layui.layer;
  $("#submit").click(function() {
    var content = $("#respond-textarea").val();
    var aid = $("#aid").val();
    var uid = $("#uid").val();
    var pid = $("#reply").attr('comment-id');
    if (content !== '') {
      $.ajax({
        type: 'POST',
        dataType: 'json',
        data: {
          aid: aid,
          uid: uid,
          content: content,
          pid: pid
        },
        url: "{:url('Article/comment')}",
        success: function(data) {
          if (data) {
            layer.msg(data.msg, {
              icon: data.code,
              time: 1000
            },
            function() {
              window.location.reload();
            });
          }
        }
      });
    }
  });
});

控制器评论存入数据库

public function comment()
{
    if(request()->isAjax()){
        $data=input('post.');
        $data['comment_time']=time();
        if(!isset($data['pid'])){
            $add=db('article_comment')->insert($data);
            if($add){
                return ['msg'=>'留言成功','code'=>1];
            }else{
                return ['msg'=>'留言失败','code'=>2];
            }
        }else{
            $add=db('article_comment')->insert($data);
            if($add){
                return ['msg'=>'留言成功','code'=>1];
            }else{
                return ['msg'=>'留言失败','code'=>2];
            }
        }
    }
}

递归显示排序显示

//获取当前文章评论和回复
public function getArticleComment($id)
{
    $articleComment=db('article_comment')
    ->alias('a')
    ->field('a.*,b.nickname,b.username,b.head')
    ->join('user b','a.uid=b.id')
    ->order('id desc')
    ->where(['a.aid'=>$id,'a.pid'=>0])
    ->select();
    foreach($articleComment as $k=>$v){
       $childrenIds=$this->childrenIds('article_comment',$v['id'],true);
       foreach ($childrenIds as $k1 => $v1) {
           $articleComment[$k]['children'][]=db('article_comment')->alias('a')->field('a.*,b.nickname,b.username,b.head')->join('user b','a.uid=b.id')->find($v1);
       }
    }
    return $articleComment;
}

//先获取所有的栏目的id和pid
public function childrenIds($dbname,$cateid,$empty=false){
    $data=db($dbname)->field('id,pid')->select();
    return $this->_childrenIds($data,$cateid,$empty);
}
//递归获取子栏目id
private function _childrenIds($data,$cateid,$empty=false){
    //判断是否清空
    if($empty){
        $arr=array();
    }else{
        static $arr=array();
    }
    foreach($data as $k => $v){
        if($v['pid'] == $cateid){
            $arr[]=$v['id'];
            $this->_childrenIds($data,$v['id']);
        }
    }
    return $arr;
}



小安

(๑>ڡ<)☆谢谢老板~

使用微信扫描二维码完成支付

评论
已有 0条评论