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 执行系统外部命令 system() exec() passthru()
Aug 11 PHP
PHP安全技术之 实现php基本安全
Sep 04 PHP
PHP执行批量mysql语句的解决方法
May 02 PHP
LotusPhp笔记之:Logger组件的使用方法
May 06 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
Jun 03 PHP
使用php验证复选框有效性的示例
Nov 13 PHP
php smarty truncate UTF8乱码问题解决办法
Jun 13 PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 PHP
php实现生成验证码实例分享
Apr 10 PHP
Redis构建分布式锁
Mar 28 PHP
PHP守护进程化在C和PHP环境下的实现
Nov 21 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 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
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
PHP--用万网的接口实现域名查询功能
2012/12/13 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
node.js实现快速截图
2016/08/27 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
Python使用装饰器进行django开发实例代码
2018/02/06 Python
python 自定义装饰器实例详解
2019/07/20 Python
Numpy 多维数据数组的实现
2020/06/18 Python
python中selenium库的基本使用详解
2020/07/31 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
巴黎一票通:The Paris Pass
2018/02/10 全球购物
什么是Rollback Segment
2013/04/22 面试题
心得体会开头
2014/01/01 职场文书
学生会主席就职演讲稿
2014/01/14 职场文书
初中化学教学反思
2014/01/23 职场文书
文案策划求职信
2014/04/14 职场文书
十月围城观后感
2015/06/08 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
python批量创建变量并赋值操作
2021/06/03 Python
Python Pandas常用函数方法总结
2021/06/15 Python
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL