thinkphp 无限极 评论
郑创
今天用啦一天的时间用了各种方法终于把评论成无限极了,随便评论,有判断自己不能评论自己,下面先说前台源代码!
要实现的视图
前台源代码html模板
<div class="wen_1">
郑创
<div class="wen_1_1">
<a href="#pinl" ><i style="background-image: url('images/pl.png')"></i><b>回复</b>(200)</a>
<a href="#"><i style="background-image: url('images/zan.png')"></i><b>文章赞</b>(200)</a>
</div>
<div class="wen_1_2">
<div class="wen_1_5"><b>此邮箱指派的领导是:<span>局长——张三</span></b></div>
<div class="wen_1_3">
<b>是肠胃主任——张三:</b>
<div class="wen_1_4">
<p>2017-8-17 22:00</p>
<a href="#"><i style="background-image: url('images/pl.png')"></i>赞(10)</a>
<a href="#"><i style="background-image: url('images/zan.png')"></i>回复(10)</a>
</div>
<p>市委书记、局长市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市</p>
<div class="wen_1_3">
<b>市长——-李四<span>回复:</span>党员——某某人</b><p>市委书记、局长市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市</p>
<div class="wen_1_4">
<p>2017-8-17 22:00</p>
<a href="#"><i style="background-image: url('images/pl.png')"></i>赞(10)</a>
<a href="#"><i style="background-image: url('images/zan.png')"></i>回复(10)</a>
</div>
</div>
<div class="wen_1_3">
<b>党员——某某人<span>回复:</span>市长——-李四</b><p>市委书记、局长市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市局召开党建市</p>
<div class="wen_1_4">
<p>2017-8-17 22:00</p>
<a href="#"><i style="background-image: url('images/pl.png')"></i>赞(10)</a>
<a href="#"><i style="background-image: url('images/zan.png')"></i>回复(10)</a>
</div>
</div>
</div>
</div>
郑创
<div class="wen_2">
<div class="wen_2_1">
<a name="pinl"></a>
<textarea name="" class="wen_2_2"></textarea>
<div class="wen_2_bot">评论</div>
</div>
</div>
</div>
数据库字段!!!!!!!!!!!!!!!!!!!!!!!!!!!
前台源代码css样式
/*邮箱评价 郑创*/
.wen_1{
background-color: azure;
}
.wen_1_1{
width: 100%;
background-color: #e5e5e5;
height: 30px;
text-align: left;
overflow: hidden;
}
.wen_1_1 a:nth-child(2){
float: right;
margin-right: 20px;
}
.wen_1_1 a> i{
background-repeat: no-repeat;
background-position: left 15px center;
background-size: 16px 16px;
display: inline-block;
width: 20px;
height: 20px;
}
.wen_1 .wen_1_2 .wen_1_3{
padding: 10px 50px;
text-align: left;
}
.wen_1_3{
overflow: hidden;
}
.wen_1_3 p{
margin-top: 5px;
}
.wen_1_3 .wen_1_4 {
float: right;
}
.wen_1_3 .wen_1_4 a{
margin-right: 10px;
}
.wen_1_3 .wen_1_4 a >i{
background-repeat: no-repeat;
background-position: left 15px center;
background-size: 16px 16px;
display: inline-block;
width: 20px;
height: 20px;
}
.wen_1_4 p{
float: left;
margin-right: 20px;
}
.wen_1_5{
text-align: left;
border-bottom: 2px solid #e5e5e5;
padding: 10px;
}
.wen_1_5 >b >span{
color: #EE5151;
padding: 0 10px;
}
/*评论输入框 郑创*/
.wen_2{
margin-top: 20px;
}
.wen_2 .wen_2_1 .wen_2_2{
width: 95%;
height: 150px;
border: 1px solid #c3c3c3;
border-top: 1px solid #7c7c7c;
border-left: 1px solid #9a9a9a;
background-color: #ffffff;
padding: 10px;
}
.wen_2_1 .wen_2_bot{
width: 150px;
height: 40px;
float: right;
margin-right: 20px;
line-height: 40px;
background: #5cb85c url('../images/ppl.png') no-repeat 30px;
background-size: 20px 20px;
color: #ffffff;
cursor: pointer;
}
郑创
.wen >p >a:hover{
background:rgba(0,0,0,0.1) none repeat scroll !important; /*实现FF背景透明,文字不透明*/
background:#000; filter:Alpha(opacity=10);/*实现IE背景透明*/
}
先说最主要的一个方法:在function.php函数库里!!!!!!!!!!!!!!
function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0) {
// 创建Tree
$tree = array();
if(is_array($list)) {
// 创建基于主键的数组引用
$refer = array();
foreach ($list as $key => $data) {
$refer[$data[$pk]] =& $list[$key];
}
foreach ($list as $key => $data) {
// 判断是否存在parent
$parentId = $data[$pid];
if ($root == $parentId) {
$tree[] =& $list[$key];
}else{
if (isset($refer[$parentId])) {
$parent =& $refer[$parentId];
$parent[$child][] =& $list[$key];
}
}
}
}
return $tree;
}
下面就是控制里 的内容了
//评论文章加评论内容
郑创
public function xin_hui(){ $xin_art = M('linzi_xin')->where(array('id'=>I('id')))->find();//文章详情
$xin_art['user'] = M('linzi_user')->where(array('id'=>$xin_art['zhipai_uid']))->find();//用户信息
// dump($xin_art);die();
$xin_art['hui_count'] = M('linzi_xin_hui')->where(array('xin_id'=>I('id')))->count();//评论总数量 $array['xin_id'] = I('id');
$hui = M('linzi_xin_hui')->where($array)->order('stime')->select();//全部评论文章的数据
foreach($hui as $k=>$r){
$hui[$k]['user'] = M('linzi_user')->where(array('id'=>$r['uid']))->find();//评论语 用户信息
}
$xin_hui = list_to_tree($hui, $pk='id', $pid = 'huifu_id', $child = 'child', $root = 0); //自己封装的无限极方法 放在了function.php
$this -> pinglun = $this -> dohui($xin_hui); // dump($sub);
$this-> xin_hui = $xin_hui;
$this->xin_art = $xin_art;
$this->display();
} //无限极评论处理方法
public function dohui($treelist, $root=0){ $template = '';
foreach($treelist as $key => $value){
if($root == 0){
$content = $value['huifu_content'];
$zhiwu = $value['user']['dn_zhiwu'];
$name = $value['user']['name'];
$stime = date('Y-m-d H:i', $value['stime']);
$zan = $value['zan'];
$id = $value['id'];
$sub = '';
if(isset($value['child'])){
$sub = $this -> dohui($value['child'], 1);
} $tmp = <<<str
<div class="wen_1_3">
<b>$zhiwu - $name :</b>
<div class="wen_1_4">
<p>$stime</p>
<a href="javascript:;" onclick="hui_zan($id)"><i style="background-image: url('Public/linzi_gong_an/images/zan.png')"></i>赞( $zan )</a>
<a href="javascript:;" onclick="hui_fu($id)"><i style="background-image: url('Public/linzi_gong_an/images/pl.png')"></i>回复</a>
</div>
<p>$content</p>
$sub
</div>
str; $template .= $tmp;
} else {
$content = $value['huifu_content'];
$zhiwu = $value['user']['dn_zhiwu'];
$name = $value['user']['name'];
$stime = date('Y-m-d H:i', $value['stime']);
$zan = $value['zan'];
$id = $value['id'];
$hui = $value['huifu_id'];
$hui_uid = $value['huifu_uid'];
$hui_name = get_mingcheng($hui_uid,'name');
$hui_zhiwu = get_mingcheng($hui_uid,'dn_zhiwu');
$sub = '';
if(isset($value['child'])){
$sub = $this -> dohui($value['child'], 1); }
$tmp = <<<str
<div class="wen_1_3">
<b> $zhiwu - $name <span> 回复:</span> $hui_zhiwu - $hui_name</b>
<div class="wen_1_4">
<p>$stime</p>
<a href="javascript:;" onclick="hui_zan($id)"><i style="background-image: url('Public/linzi_gong_an/images/zan.png')"></i>赞( $zan )</a>
<a href="javascript:;" onclick="hui_fu($id)"><i style="background-image: url('Public/linzi_gong_an/images/pl.png')"></i>回复</a>
</div>
<p>$content</p>
郑创
</div>
$sub
str; $template .= $tmp;
}
}
return $template;
}
数据完成后的 视图
下面是一些前台页面ajax请求数据
<script>
//赞此文章传过去id就可以了
function zan(id){
$.post("{:U('Ren/zan')}",{zan:id},function(v){
if(v.status){
layer.msg(v.info, 1, 6);
setTimeout('location.reload()',1200);
}
})
}
//赞某人的评论 传过去id就可以了
function hui_zan(id){
$.post("{:U('Ren/hui_zan')}",{hui_zan:id},function(v){
if(v.status){
layer.msg(v.info, 1, 6);
setTimeout('location.reload()',1200);
}
})
}
//回复某人的 评价 传过去id就可以了
function hui_fu(id){
$('#huifu_id').val(id);
$.post("{:U('Ren/hui_fu')}",{huifu_id:id},function(v){
// console.log(v);
if(v.info=="no"){
layer.msg('您 不 能 评 论 自 己 所 评 论 的 内 容!', 3, 5);
return false;
} var html = '';
html +='<p>回复【'+v.user+'】:</p><input type="hidden" name="huifu_uid" value="'+v.uid+'">';
var emNum = v.user.length+5; $('.ping_lun').html(html); $(".wen_2 .wen_2_1 .wen_2_2").css({"text-indent":emNum+"em"});
$(".ping_lun p").css({"width":emNum+"em"}); })
return false;
}
/*点击评价 郑创*/
$('.wen_2_bot').click(function(){
var f = $('#ping_bot');
var $val = $('.wen_2_2').val();
if($val == ''){
layer.msg('评论不能为空!', 1,12);
return false;
}
$.post(f.attr('action'),f.serialize(),function(v){
if(v.status){
layer.msg(v.info, 2, 9);
setTimeout('location.reload()',1200);
}else{
layer.msg(v.info, 1, 8);
}
})
})
</script>
处理页面请求的ajax控制器
//文章赞
public function zan(){
if(IS_POST){
$xin_ok = M('linzi_xin')->where(array('id'=>I('zan')))->setInc('zan');
if($xin_ok){
$this->success('赞!');
} }
}
//回复的内容赞
public function hui_zan(){
if(IS_POST){
$xin_ok = M('linzi_xin_hui')->where(array('id'=>I('hui_zan')))->setInc('zan');
if($xin_ok){
$this->success('赞!');
} }
}
//点击内容一次文章查看次数加一
public function cishu(){
if(IS_POST){
$xin_ok = M('linzi_xin')->where(array('id'=>I('cishu')))->setInc('cishu');
}
}
//回复谁的名字
public function hui_fu(){
// $name = get_mingcheng(I('huifu_uid'),'name');
$id = M('linzi_xin_hui')->where(array('id'=>I('huifu_id')))->find();
$id['user'] = M('linzi_user')->where(array('id'=>$id['uid']))->getField('name');
/*dump(session('uid'));
dump($id);die();*/
if($id['uid'] != session('uid')){ $this -> ajaxReturn($id);
}else{
$this->error('no');
} // dump($id);die(); }
//回复的内容
public function pinglun(){
if(IS_POST){
// dump($_POST);die();
$data['xin_id'] = I('id');
$data['huifu_content'] = I('huifu_content');
$data['huifu_id'] = I('huifu_id');
$data['huifu_uid'] = I('huifu_uid');
$data['stime'] = time();
$data['uid'] = session('uid');
$re = M('linzi_xin_hui')->add($data);
if($re){
$this->success('评论成功');
}else{
$this->error('评论失败!请稍后评论!');
}
}
}
想要这种插件的可翻翻我的博客有自写教程和源代码压缩包,或者访问网址 http://layer.layui.com/
thinkphp 无限极 评论的更多相关文章
- PHP无限极分类 - 2 - 无限极评论
参考上一节: 结合ZUI前端框架,制作的无限极评论列表: 项目目录: 代码: <!DOCTYPE html> <html lang="en"> <he ...
- [thinkphp] 无限极分类
<?php /* * 无限极分类 类 */ header("Content-Type: text/html; charset=UTF-8"); Class Category ...
- thinkphp 无限极分类的数据库设计及效果测试
控制器继承IndexAction.class.php <?php // 本类由系统自动生成,仅供测试用途 class IndexAction extends CateAction { } ?&g ...
- thinkphp 实现无限极分类
thinkphp实现无限极分类,获得所有的子类 今天学习测试了一上午也没有整出来,一开始一直没有办法把所有的子分类拿出来. 最后找到原因: 每次调用的时候没有在最后return的位置我没有选择retu ...
- php无限极分类以及递归(thinkphp)
php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...
- 夺命雷公狗ThinkPHP项目之----企业网站8之栏目的添加完善(无限极分类的完成)
我们刚才只是完成了添加的一部分,但是我们的上级分类也不能永远都是只有一个死的嘛,所以我们需要对她进行修改: 我们先将add方法里面的数据查出来再说: 然后在模板页进行遍历: 展示效果如下所示: 虽然是 ...
- thinkphp5.0无限极分类及格式化输出
首先我们来看数据表 从上图中可以发现,中国下有贵州,北京两个子节点,而北京有天安门一个子节点,纽约的子节点是"纽约的子类". 从pid为0看出,中国和纽约是顶级节点. 因为贵州的p ...
- js实现无限极分类
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
随机推荐
- 【T10】记住,TCP__IP不是轮询的
1.TCP/IP协议栈无法将连接的丢失立即通知应用程序. TCP为什么不提供这种通知机制,不这么做的优点和缺点,应用程序怎么检测链接的丢失. 2.TCP为什么不提供连接丢失即时通知的功能? a.其他通 ...
- 详细解读Android中的搜索框(三)—— SearchView
本篇讲的是如何用searchView实现搜索框,其实原理和之前的没啥差别,也算是个复习吧. 一.Manifest.xml 这里我用一个activity进行信息的输入和展示,配置方式还是老样子,写一个输 ...
- MySQL(3)-MySQL Workbench
远程连接mysql不上,CentOS7下的防火墙关闭命令,别光看iptables的状态. # systemctl stop firewalld # systemctl mask firewalld ...
- 迁移ORACLE_HOME引发的登录sqlplus无法加载类库错误
在10g以后,一般情况下环境变量中没有必要设置LD_LIBRARY_PATH,但是一旦将ORACLE_HOME迁移到其他目录,则环境变量中还需要添加这个变量. Linux和Unix支持TAR方式迁移O ...
- java的两种同步方式, Synchronized与ReentrantLock的区别
java在编写多线程程序时,为了保证线程安全,需要对数据同步,经常用到两种同步方式就是Synchronized和重入锁ReentrantLock. 相似点: 这两种同步方式有很多相似之处,它们都是加锁 ...
- 浅谈java构建工具的选择
在学校的时候还总是自己用eclipse自带的jar导出工具,然后人工来给项目打包,那是相当的原始. 而后工作了,项目中都是用ant,慢慢的开始学会使用这个工具.感觉就和脚本一样,很容易读懂,做项目构建 ...
- oracle排序后的第一条记录
该查寻语句没有经过任何的优化,因为oracle没有SQL的TOP关键字,但是有一个ROWNUM的列,因此,可以通过ROWNUM来进行查询.oracle的关于rownum的参考手册里面提到了 分析 ...
- nginx与apache的参考配置
nginx与apache是两大最主流的服务器,功能强大,但配置起来也比较麻烦,对于初学者来讲可能有些地方并不完全清楚其作用,这里搜集了一些配置的作用及其使用方法.其中nginx提供了推荐配置,而apa ...
- Jmeter发送Json请求
jmeter发送的post请求,可以是json请求,和普通的post请求稍微有点区别,那么怎么用jmeter发送json请求呢? 首先要找一个json请求的例子,这个例子是携程网搜索机票, 网址为:h ...
- Disruptor学习笔记
前言 以前一直听说有Disruptor这个东西,都说性能很强大,所以这几天自己也看了一下. 下面是自己的学习笔记,另外推荐几篇自己看到写的比较好的博客: Disruptor——一种可替代有界队列完成并 ...