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 相关文章推荐
数据库相关问题
Oct 09 PHP
PHP中通过ADO调用Access数据库的方法测试不通过
Dec 31 PHP
php入门学习知识点二 PHP简单的分页过程与原理
Jul 14 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
May 08 PHP
PHP Cookie的使用教程详解
Jun 03 PHP
php中的路径问题与set_include_path使用介绍
Feb 11 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
php中静态类与静态变量用法的区别分析
Jan 15 PHP
php+mysqli使用面向对象方式查询数据库实例
Jan 29 PHP
详解PHP的Yii框架中日志的相关配置及使用
Dec 08 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
swoole锁的机制代码实例讲解
Mar 04 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函数解决SQL injection
2006/12/09 PHP
PHP 动态随机生成验证码类代码
2010/04/09 PHP
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
nodejs读取memcache示例分享
2014/01/02 NodeJs
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
Vue工程模板文件 webpack打包配置方法
2017/12/26 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
python实现360皮肤按钮控件示例
2014/02/21 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
Python中协程用法代码详解
2018/02/10 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
学生党员思想汇报
2013/12/28 职场文书
个人授权委托书范本
2014/04/03 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫
Elasticsearch 配置详解
2022/04/19 Java/Android