最近做项目的时候用到了评论回复,使用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.接下来是在页面上显示评论和回复信息:

在控制器里面,我们需要去查询该文章下的所有评论及回复内容,并且注册到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" /> &nbsp;
<span>{$vp.name}</span>&nbsp;
<span>{$vp.time|date="Y-m-d H:i:s",###}</span>&nbsp;
<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" /> &nbsp;
<span>{$vp.name}</span>&nbsp;
<span>{$vp.time|date="Y-m-d H:i:s",###}</span>&nbsp;
<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即可。

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

TP5.0实现无限极回复功能的更多相关文章

  1. thinkphp5.0无限极分类及格式化输出

    首先我们来看数据表 从上图中可以发现,中国下有贵州,北京两个子节点,而北京有天安门一个子节点,纽约的子节点是"纽约的子类". 从pid为0看出,中国和纽约是顶级节点. 因为贵州的p ...

  2. TP5.0中的小知识总结

    2017年6月26日15:01:231.input    获取输入数据 支持默认值和过滤:接收用户在前台输入的数据,可以是get方式也可以是post方式.2.ThinkPHP5.0内置了分页实现,要给 ...

  3. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现

    今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): /// & ...

  4. thinkphp 无限极 评论

    郑创 今天用啦一天的时间用了各种方法终于把评论成无限极了,随便评论,有判断自己不能评论自己,下面先说前台源代码! 要实现的视图 前台源代码html模板 <div class="wen_ ...

  5. sqlalchemy tree 树形分类 无限极分类的管理。预排序树,左右值树。sqlalchemy-mptt

    简介: 无限极分类是一种比较常见的数据格式,生成组织结构,生成商品分类信息,权限管理当中的细节权限设置,都离不开无限极分类的管理. 常见的有链表式,即有一个Pid指向上级的ID,以此来设置结构.写的时 ...

  6. PHP无限极分类 - 2 - 无限极评论

    参考上一节: 结合ZUI前端框架,制作的无限极评论列表: 项目目录: 代码: <!DOCTYPE html> <html lang="en"> <he ...

  7. php 实现无限极分类

    原始数据 $array = array( array('id' => 1, 'pid' => 0, 'n' => '河北省'), array('id' => 2, 'pid' ...

  8. PHP 递归无限极下级

    下面是自己用到的一些递归方法,当然都是借鉴的,各位看官请勿怪 第一种 有层级 $array = array( array('id' => 1, 'pid' => 0, 'n' => ...

  9. php无限级分类实战——评论及回复功能

    经常在各大论坛或新闻板块详情页面下边看到评论功能,当然不单单是直接发表评论内容那么简单,可以对别人的评论进行回复,别人又可以对你的回复再次评论或回复,如此反复,理论上可以说是没有休止,从技术角度分析很 ...

随机推荐

  1. R语言成功加载rJava方法

    加载rJava的同时,要下载JAVA的JRE并且配置环境变量JAVA_HOME,因为rJava的调用需要java运行环境. 1.下载JRE 64位版本的JRE官网下载:http://www.java. ...

  2. Python 文件的处理

    简单的读取文件 f.read()  是读取这个文件的所有内容 f.readline()  是读取文件的一行 .write()  会去检查这个文件是否存在,不存在则创建,存在的话,则以覆盖的方式将内容写 ...

  3. Nodejs package.json文件介绍

    每个npm的安装包里面都会包含一个package.json,通常这个文件会在包的根目录下. 这个文件很类似于.net项目中的.csproj+AssemblyInfo.cs+App.config文件,主 ...

  4. pudian

    https://zh.wikipedia.org/wiki/%E7%89%B9%E5%BE%81%E7%A0%81 http://www.voidcn.com/blog/lionzl/article/ ...

  5. Java动态代理学习【Spring AOP基础之一】

    Spring AOP使用的其中一个底层技术就是Java的动态代理技术.Java的动态代理技术主要围绕两个类进行的 java.lang.reflect.InvocationHandler java.la ...

  6. sshpass做秘钥分发,ansible做自动化运维工具

    最近公司机器的增多,顺便还要上报表系统,考虑到服务器越来越多,手工的管理显得越来的越吃力,所以打算推进公司自动化运维工具的使用. 推进的过程中,一步一个坑踩过来的.由于公司之前未运用过自动化运维工具, ...

  7. 运行和控制Nginx

    Nginx命令行选项 启动.停止.重启nginx命令 如何重新加载nginx配置文件 nginx程序不重启平滑升级可执行文件   nginx命令行参数 不像许多其他软件系统,Nginx 仅有几个命令行 ...

  8. C# 调用 C++ DLL方法

    在C# 中,可以通过 DllImport 调用C++ 的非托管DLL程序. VS2010中C#调用C++的DLL示例: 一.新建C++ DLL程序 1.新建 C++ Win32项目,类型为DLL. 生 ...

  9. 移动端 canvas插入多张图片生成一张可保存到手机图片

    第一次写随笔,想把开发中遇到的问题与大家分享,可能会让您少走一步弯路. 先看下效果图: 代码分三部分为大家展示: 1.html 部分 <div id="myQrcontainer&qu ...

  10. Hadoop-2.8.0 开发环境搭建(Mac)

    Hadoop是一个由Apache基金会开发的分布式系统架构,简称HDFS,具有高容错性.可伸缩性等特点,并且可以部署在低配置的硬件上:同时,提供了高吞吐量的数据访问性能,适用于超大数据集的应用程序,以 ...