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 n个不重复的随机数生成代码
Jun 23 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
destoon复制新模块的方法
Jun 21 PHP
PHP封装分页函数实现文本分页和数字分页
Oct 23 PHP
php中file_get_contents与curl性能比较分析
Nov 08 PHP
php更新mysql后获取改变行数的方法
Dec 25 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
Zend Framework实现多服务器共享SESSION数据的方法
Mar 22 PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 PHP
PHP文件上传操作实例详解
Sep 27 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 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
Smarty安装配置方法
2008/04/10 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
PHP连接SQLServer2005的方法
2015/01/27 PHP
js 文本滚动效果的实例代码
2013/08/17 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
2016/06/14 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
JSONP基础知识详解
2017/03/19 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
Javascript生成器(Generator)的介绍与使用
2021/01/31 Javascript
python搭建虚拟环境的步骤详解
2016/09/27 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
python实现共轭梯度法
2019/07/03 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
一道Delphi上机题
2012/06/04 面试题
经理管理专业毕业自荐书范文
2014/02/12 职场文书
银行委托书范本
2014/09/28 职场文书
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL