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 和 MYSQL
Oct 09 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
几种有用的变型 PHP中循环语句的用法介绍
Jan 30 PHP
浅析PHP的ASCII码转换类
Jul 05 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
PHP+MySQL修改记录的方法
Jan 21 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 PHP
PHP实现的DES加密解密类定义与用法示例
Nov 02 PHP
php+laravel依赖注入知识点总结
Nov 04 PHP
PHP数组Key强制类型转换实现原理解析
Sep 01 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
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
Angular2利用组件与指令实现图片轮播组件
2017/03/27 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
jQuery获取随机颜色的实例代码
2018/05/21 jQuery
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
Python控制多进程与多线程并发数总结
2016/10/26 Python
Python将图片转换为字符画的方法
2020/06/16 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
python实例化对象的具体方法
2020/06/17 Python
python字典与json转换的方法总结
2020/12/28 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
马来西亚太阳镜、眼镜和隐形眼镜网上商店:Focus Point
2018/12/13 全球购物
自动化专业本科毕业生求职信
2013/10/20 职场文书
认识深刻的检讨书
2014/02/16 职场文书
体育课课后反思
2014/04/24 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
Python音乐爬虫完美绕过反爬
2021/08/30 Python