博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
商品评论
阅读量:4981 次
发布时间:2019-06-12

本文共 5504 字,大约阅读时间需要 18 分钟。

需求

 1 登陆之后可以评论

 2  打分1--2 差评 3 中评 4--5好评

 3  用户评论时 可以指定一个印象,如果这个印象已经存在就把数字+1

 4 评论的功能完全使用ajax制作 【商品页面有缓存,所有要使用局部不缓存】

   

 实际操作:

    1 建表

   

/************商品评论表***********/

drop table if exists p40_comment;
create table p40_comment
(
id mediumint unsigned not null auto_increment comment 'id',
goods_id mediumint unsigned not null comment '商品ID',
member_id mediumint unsigned not null comment '会员id',
content varchar(200) not null comment '内容',
addtime datetime not null comment '发表时间',
start tinyint unsigned not null comment '分值',
click_count smallint unsigned not null default '0' comment '有用的数字',
primary key(id),
key goods_id(goods_id)
)engine=InnoDB default charset=utf8 comment '评论';

 

 

/************商品评论回复表***********/

drop table if exists p40_comment_reply;
create table p40_comment_reply
(
id mediumint unsigned not null auto_increment comment 'id',
comment_id mediumint unsigned not null comment '评论ID',
member_id mediumint unsigned not null comment '会员id',
content varchar(200) not null comment '内容',
addtime datetime not null comment '发表时间',
primary key(id),
key comment_id(comment_id)
)engine=InnoDB default charset=utf8 comment '评论回复';

/************商品印象表***********/
drop table if exists p40_yinxiang;
create table p40_yinxiang
(
id mediumint unsigned not null auto_increment comment 'id',
goods_id mediumint unsigned not null comment '商品ID',
yx_name varchar(30) not null comment '印象名称',
yx_count smallint unsigned not null default '1' comment '印象的次数',
primary key(id),
key goods_id(goods_id)
)engine=InnoDB default charset=utf8 comment '印象';

--------------------------------

 2  ajax发表评论

 2.1  创建评论模型 放在后台

    

<?php

namespace Admin\Model;
use Think\Model;
class CommentModel extends Model
{
//评论时允许提交的字段
protected $insertFields='start,content,goods_id';

//发表评论时表单验证规则

protected $_validate=array(
array('goods_id','require','参数错误!',1),
array('start','1,2,3,4,5','分值只能是1-5!',1,'in'),
array('content','1,200','内容必须是1-200个字符!',1,'length'),
);

protected function _before_insert(&$data,$option)

{
$memberId=session('m_id');
if(!$memberId)
{
$this->error='必须先登录!';
return false;
}

$data['member_id']=$memberId;
$data['addtime']=date('Y-m-d H:i:s');
}

}

------------------------------------ 

  控制器代码

 

<?php

namespace Home\Controller;
use Think\Controller;
class CommentController extends Controller
{
//发表评论
public function add()
{
if(IS_POST)
{
$model=D('Admin/Comment');
if($model->create(I('post.'),1))
{
if($model->add())
{
$this->success('添加成功!','',TRUE);   因为是ajax所以这里设置返回JSON
exit;
}
}
$this->error($model->getError(),'',TRUE); 
}
}
}

  ------------------------------

 2.3  修改表单 以AJAX方式提交

   1  先修改表单

   

<!-- 评论表单 start-->

<div class="comment_form mt20">
<form id="comment-form">
<input type="hidden" name="goods_id" value="<?php echo $info['id']; ?>">
<ul>
<li>
<label for=""> 评分:</label>
<input type="radio" name="start" value="5" checked="checked"/> <strong class="star star5"></strong>
<input type="radio" name="start" value="4"/> <strong class="star star4"></strong>
<input type="radio" name="start" value="3"/> <strong class="star star3"></strong>
<input type="radio" name="start" value="2"/> <strong class="star star2"></strong>
<input type="radio" name="start" value="1"/> <strong class="star star1"></strong>
</li>

<li>

<label for="">评价内容:</label>
<textarea name="content" id="" cols="" rows=""></textarea>
</li>
<li>
<label for="">&nbsp;</label>
<input type="button" value="提交评论" class="comment_btn"/>
</li>
</ul>
</form>
</div>
<!-- 评论表单 end-->

2 为提交按钮绑定点击事件点击时以ajax的方式提交

 

/************ajax发表评论*************/
$(".comment_btn").click(function(){
//先接收表单中的数据 格式 : nametom&age=23
var form = $("#comment-form");
var formData=form.serialize();

$.ajax({

type:"POST",
url:"<?php echo U('Comment/add'); ?>",
data:formData, //表单中要提交的数据
dataType:"json", //服务器返回的数据格式
success:function(data)
{
if(data.status == 0)
alert(data.info);

else

{
//清空表单
form.trigger("reset"); //触发表单的reset事件

}

}

});

});

 

3  发表评论成功之后在以上页面中显示出来新的评论

       修改发表评论的控制器

 

public function add()

{
if(IS_POST)
{
$model=D('Admin/Comment');
if($model->create(I('post.'),1))
{
if($model->add())
{
$this->success(array(
'face'=>session('face'),
'username'=>session('username'),
'addtime'=>date('Y-n-d H:i:s'),
'content'=>I('post.content'),
'start'=>I('post.start'),
),'',TRUE);
}
}
$this->error($model->getError(),'',TRUE);
}
}
}

 

把新评论拼成HTML 并显示在页面中

 

<!-- 评论容器 -->

<div id="comment_container"></div>

 

 

/************ajax发表评论*************/

$(".comment_btn").click(function(){
//先接收表单中的数据 格式 : nametom&age=23
var form = $("#comment-form");
var formData=form.serialize();

$.ajax({

type:"POST",
url:"<?php echo U('Comment/add'); ?>",
data:formData, //表单中要提交的数据
dataType:"json", //服务器返回的数据格式
success:function(data)
{
if(data.status == 0)
alert(data.info);

else

{
//清空表单
form.trigger("reset"); //触发表单的reset事件
//用新发表的评论数据拼出一个显示的HTML字符串
var html=' <div class="comment_items mt10 none"><div class="user_pic"><dl><dt><a href=""><img src="'+data.info.face+'" alt="" /></a></dt><dd><a href="">'+data.info.face+'</a></dd></dl></div><div class="item"><div class="title"><span>'+data.info.addtime+'</span><strong class="star star'+data.info.star+'"></strong></div><div class="comment_content">'+data.info.content+'</div><div class="btns"><a href="" class="reply">回复(0)</a><a href="" class="useful">有用(0)</a></div><div class="cornor"></div></div>';
//把整个评论的字符串转化成jq的对象
html = $(html);
// 把拼好的评论放到页面中
$("#comment_container").prepend(html);
// 让导航条直接滚动第一个评论处
$("body").animate({
"scrollTop" : "750px"
}, 1000, function(){
html.fadeIn(2000);
});
}
}

});

});

 

转载于:https://www.cnblogs.com/gooderic/p/5791546.html

你可能感兴趣的文章
迪米特法则
查看>>
第三小节之Java API
查看>>
树莓派Android Things物联网开发:GitHub案例程序汇总
查看>>
游戏分析菜鸟必须阅读的5篇文章(译自国外网站)
查看>>
《SQL 基础教程》第四章:数据更新
查看>>
Nine-patch
查看>>
P1387 最大正方形
查看>>
百度地图 - demo
查看>>
MFC单文档视图拆分窗口和相关链接
查看>>
(转)轻松学习Objective-C消息转发
查看>>
python3之迭代器&生成器
查看>>
RabbitMQ-安装以及入门
查看>>
浏览器缓存策略
查看>>
hdu3873 有约束条件的最短路
查看>>
【清华集训2014】mex
查看>>
冲刺七
查看>>
MySql学习13----触发器
查看>>
圆形百分比进度表
查看>>
[bzoj4241] 历史研究 (分块)
查看>>
MySQL8.0新特性
查看>>