TP5.0框架实现无限极回复功能的方法分析


Posted in PHP onMay 04, 2019

本文实例讲述了TP5.0框架实现无限极回复功能的方法。分享给大家供大家参考,具体如下:

最近做项目的时候用到了评论回复,使用ThinkPHP5.0框架做回复碰到了一些问题,简单总结一下。(李昌辉)

1.首先是数据表的设计:

create table zy_huifu
(
  code int auto_increment primary key, #回复代号
  puser varchar(50), #回复人员
  listcode int, #文章代号
  time varchar(50), #回复时间
  content text, #回复内容
  pcode int, #父级代号 0文章
  leval int, #级别 0顶级 1其它
  isok int #已读未读0未读1已读
);

评论和回复放在了一张表里面,为了在显示的时候做区分,评论作为顶级回复级别代号为0,其它的子级回复级别代号为1。

每个回复都有一个父级代号代表回复的哪一条评论,如果是直接评论的文章,父级代号设置为0.

2.接下来是在页面上显示评论和回复信息:

TP5.0框架实现无限极回复功能的方法分析

在控制器里面,我们需要去查询该文章下的所有评论及回复内容,并且注册到TP框架里面,这里调用了一个方法CommentList()来获取该文章下的评论回复:

//查询评论
$ahuifu = $this->CommentList($code,0);
$this->assign("ahuifu",$ahuifu);

CommentList()方法如下,使用递归的方式将所有评论回复按照一定的顺序查询出来并且存储到数组里面:

//读取评论列表的递归,code为文章代号,pcode为父级代号
  public function CommentList($code,$pcode){
    $commentlist = array(); //存储评论数组
    $list = Db::table("zy_huifu")
    ->alias('a')
    ->where("listcode",$code)
    ->where("pcode",$pcode)
    ->join("zy_user b","a.puser = b.uid")
    ->select();
    foreach($list as $v){
      $commentlist[] = $v;
      //查询子回复
      $zi = $this->CommentList($code,$v["code"]);
      if(count($zi)){
        foreach($zi as $v1){
          $commentlist[] = $v1;
        }
      }
    }
    return $commentlist;
  }

在view视图页面显示数据:

{volist name="ahuifu" id="vp"}
        {if condition="($vp.leval == 0)"}
        <div class="panel panel-default pl_list">
        <div class="panel-body pl_list_nr">
          <div class="show_nr_pl_tou">
            <img src="{$vp.img}" width="30" height="30" />  
            <span>{$vp.name}</span> 
            <span>{$vp.time|date="Y-m-d H:i:s",###}</span> 
            <span><button class="btn btn-primary btn-xs show_huifu_btn" pcode="{$vp.code}">回复</button></span>
          </div>
          <div class="show_nr_pl_nr">
            {$vp.content}
          </div>
        </div>
        </div>
        {else /}
        <div class="panel panel-default pl_list">
        <div class="panel-body pl_list_nr" style="margin-left:50px">
          <div class="show_nr_pl_tou">
            <img src="{$vp.img}" width="30" height="30" />  
            <span>{$vp.name}</span> 
            <span>{$vp.time|date="Y-m-d H:i:s",###}</span> 
            <span><button class="btn btn-primary btn-xs show_huifu_btn" pcode="{$vp.code}">回复</button></span>
          </div>
          <div class="show_nr_pl_nr">
            {$vp.content}
          </div>
        </div>
        </div>
        {/if}
{/volist}

3.添加回复及评论

添加评论的时候注意将父级代号pcode添加为0,将级别leval添加为0即可。

添加回复的时候将父级代号添加为要回复的这一条数据的主键,将级别leval添加为1即可。

具体实现比较简单,不赘述。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP截取中文字符串的问题
Jul 12 PHP
php目录操作函数之获取目录与文件的类型
Dec 29 PHP
php懒人函数 自动添加数据
Jun 28 PHP
PHP性能优化准备篇图解PEAR安装
Dec 05 PHP
使用JSON实现数据的跨域传输的php代码
Dec 20 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
php读取大文件示例分享(文件操作类)
Apr 13 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
PHP封装的MSSql操作类完整实例
May 26 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
Jun 13 PHP
Yii2框架实现注册和登录教程
Sep 30 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
Aug 16 PHP
PHP7 mongoDB扩展使用的方法分享
May 02 #PHP
PHP超低内存遍历目录文件和读取超大文件的方法
May 01 #PHP
Yii框架学习笔记之session与cookie简单操作示例
Apr 30 #PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
Apr 30 #PHP
YII框架关联查询操作示例
Apr 29 #PHP
YII框架页面缓存操作示例
Apr 29 #PHP
YII框架http缓存操作示例
Apr 29 #PHP
You might like
网站当前的在线人数
2006/10/09 PHP
php使用mkdir创建多级目录入门例子
2014/05/10 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
Prototype Date对象 学习
2009/07/12 Javascript
JavaScript 事件查询综合
2009/07/13 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
使用JavaScript获取电池状态的方法
2014/05/03 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
javascript实现日历效果
2019/06/17 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
简单介绍Python中的floor()方法
2015/05/15 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
linux面试题参考答案(10)
2013/11/04 面试题
计算机工程学院个人求职信
2013/10/05 职场文书
大学教师年终总结的自我评价
2013/10/29 职场文书
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
文明教师事迹材料
2014/01/16 职场文书
学校花圃的标语
2014/06/18 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
企业法人代表证明书
2015/06/18 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
浅析MySQL如何实现事务隔离
2021/06/26 MySQL
Python基于百度API识别并提取图片中文字
2021/06/27 Python
MySql数据库 查询时间序列间隔
2022/05/11 MySQL