提交 ed941686 编写于 作者: G gongfuxiang

商品评论

上级 0b260593
......@@ -12,6 +12,7 @@ namespace app\index\controller;
use think\facade\Hook;
use app\service\GoodsService;
use app\service\GoodsCommentsService;
use app\service\SeoService;
/**
......@@ -45,10 +46,10 @@ class Goods extends Common
*/
public function Index()
{
$id = input('id');
$goods_id = input('id');
$params = [
'where' => [
'id' => $id,
'id' => $goods_id,
'is_delete_time' => 0,
],
'is_photo' => true,
......@@ -61,17 +62,17 @@ class Goods extends Common
return $this->fetch('/public/tips_error');
} else {
// 当前登录用户是否已收藏
$ret_favor = GoodsService::IsUserGoodsFavor(['goods_id'=>$id, 'user'=>$this->user]);
$ret_favor = GoodsService::IsUserGoodsFavor(['goods_id'=>$goods_id, 'user'=>$this->user]);
$ret['data'][0]['is_favor'] = ($ret_favor['code'] == 0) ? $ret_favor['data'] : 0;
// 商品评价总数
$ret['data'][0]['comments_count'] = GoodsService::GoodsCommentsTotal($id);
$ret['data'][0]['comments_count'] = GoodsService::GoodsCommentsTotal($goods_id);
// 商品收藏总数
$ret['data'][0]['favor_count'] = GoodsService::GoodsFavorTotal(['goods_id'=>$id]);
$ret['data'][0]['favor_count'] = GoodsService::GoodsFavorTotal(['goods_id'=>$goods_id]);
// 钩子
$this->PluginsHook($id, $ret['data'][0]);
$this->PluginsHook($goods_id, $ret['data'][0]);
// 商品数据
$this->assign('goods', $ret['data'][0]);
......@@ -88,13 +89,13 @@ class Goods extends Common
}
// 二维码
$this->assign('qrcode_url', MyUrl('index/qrcode/index', ['content'=>urlencode(base64_encode(MyUrl('index/goods/index', ['id'=>$id], true, true)))]));
$this->assign('qrcode_url', MyUrl('index/qrcode/index', ['content'=>urlencode(base64_encode(MyUrl('index/goods/index', ['id'=>$goods_id], true, true)))]));
// 商品访问统计
GoodsService::GoodsAccessCountInc(['goods_id'=>$id]);
GoodsService::GoodsAccessCountInc(['goods_id'=>$goods_id]);
// 用户商品浏览
GoodsService::GoodsBrowseSave(['goods_id'=>$id, 'user'=>$this->user]);
GoodsService::GoodsBrowseSave(['goods_id'=>$goods_id, 'user'=>$this->user]);
// 左侧商品 看了又看
$params = [
......@@ -134,7 +135,8 @@ class Goods extends Common
* @version 1.0.0
* @date 2019-04-22
* @desc description
* @param [array] $params [输入参数]
* @param [int] $goods_id [商品id]
* @param [array] $params [输入参数]
*/
private function PluginsHook($goods_id, &$goods)
{
......@@ -259,4 +261,47 @@ class Goods extends Common
$params = input('post.');
return GoodsService::GoodsSpecDetail($params);
}
/**
* 商品评论
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-05-13T21:47:41+0800
*/
public function Comment()
{
// 参数
$params = input();
// 分页
$number = 10;
$page = max(1, isset($params['page']) ? intval($params['page']) : 1);
// 条件
$where = ['goods_id'=>$params['goods_id']];
// 获取总数
$total = GoodsCommentsService::GoodsCommentsTotal($where);
$page_total = ceil($total/$number);
$start = intval(($page-1)*$number);
// 获取列表
$data_params = array(
'm' => $start,
'n' => $number,
'where' => $where,
'is_public' => 1,
);
$data = GoodsCommentsService::GoodsCommentsList($data_params);
// 返回数据
$result = [
'number' => $number,
'total' => $total,
'page_total' => $page_total,
'data' => $data['data'],
];
return DataReturn('请求成功', 0, $result);
}
}
......@@ -184,7 +184,7 @@
<li class="tm-ind-item">
<div class="tm-indcon"><span class="tm-label">浏览次数</span><span class="tm-count">{{$goods.access_count}}</span></div>
</li>
<li class="tm-ind-item">
<li class="tm-ind-item ind-panel-comment">
<div class="tm-indcon"><span class="tm-label">累计评价</span><span class="tm-count">{{$goods.comments_count}}</span></div>
</li>
</ul>
......@@ -383,14 +383,14 @@
{{/if}}
<!-- tab -->
<div class="am-tabs" data-am-tabs>
<div class="am-tabs" data-am-tabs id="goods-tabs">
<ul class="am-avg-sm-3 am-tabs-nav am-nav am-nav-tabs" data-am-sticky="{animation: 'slide-top'}">
<li class="am-active">
<a href="javascript:;">
<span class="index-needs-dt-txt">详情</span>
</a>
</li>
<li>
<li class="tabs-comment">
<a href="javascript:;">
<span class="index-needs-dt-txt">评价({{$goods.comments_count}})</span>
</a>
......@@ -402,6 +402,7 @@
</li>
</ul>
<!-- 详情 -->
<div class="am-tabs-bd">
<div class="am-tab-panel am-fade am-in am-active">
{{if !empty($goods['attribute'])}}
......@@ -430,61 +431,13 @@
</div>
<!-- 评论 -->
<div class="am-tab-panel am-fade goods-comment">
<article class="am-comment">
<a href="#">
<img src="http://tp5-dev.com/static/index/default/images/default-user-avatar.jpg" class="am-comment-avatar" alt=""/>
</a>
<div class="am-comment-main"> <!-- 评论内容容器 -->
<header class="am-comment-hd">
<!--<h3 class="am-comment-title">评论标题</h3>-->
<div class="am-comment-meta"> <!-- 评论元数据 -->
<a href="#link-to-user" class="am-comment-author">魔鬼</a> <!-- 评论者 -->
评论于 <time datetime="">2019-05-13 15:32</time>
</div>
</header>
<div class="am-comment-bd">
<p>那,那是一封写给南部母亲的信。我茫然站在骑楼下,我又看到永远的樱子走到街心。其实雨下得并不大,却是一生一世中最大的一场雨。而那封信是这样写的,年轻的樱子知不知道呢?</p>
<p class="comment-spec">颜色:红色,尺码:M</p>
<div class="comment-reply">
<span class="comment-reply-title">管理员回复:</span>
<span class="comment-reply-desc">我打算在下个月和樱子结婚。</span>
</div>
</div>
</article>
<article class="am-comment">
<a href="#">
<img src="http://tp5-dev.com/static/index/default/images/default-user-avatar.jpg" class="am-comment-avatar" alt=""/>
</a>
<div class="am-comment-main"> <!-- 评论内容容器 -->
<header class="am-comment-hd">
<!--<h3 class="am-comment-title">评论标题</h3>-->
<div class="am-comment-meta"> <!-- 评论元数据 -->
<a href="#link-to-user" class="am-comment-author">魔鬼</a> <!-- 评论者 -->
评论于 <time datetime="">2019-05-13 15:32</time>
</div>
</header>
<div class="am-comment-bd">
<p>那,那是一封写给南部母亲的信。我茫然站在骑楼下,我又看到永远的樱子走到街心。其实雨下得并不大,却是一生一世中最大的一场雨。而那封信是这样写的,年轻的樱子知不知道呢?</p>
<p class="comment-spec">颜色:红色,尺码:M</p>
</div>
</article>
<article class="am-comment">
<a href="#">
<img src="http://tp5-dev.com/static/index/default/images/default-user-avatar.jpg" class="am-comment-avatar" alt=""/>
</a>
<div class="am-comment-main"> <!-- 评论内容容器 -->
<header class="am-comment-hd">
<!--<h3 class="am-comment-title">评论标题</h3>-->
<div class="am-comment-meta"> <!-- 评论元数据 -->
<a href="#link-to-user" class="am-comment-author">魔鬼</a> <!-- 评论者 -->
评论于 <time datetime="">2019-05-13 15:32</time>
</div>
</header>
<div class="am-comment-bd">
<p>那,那是一封写给南部母亲的信。我茫然站在骑楼下,我又看到永远的樱子走到街心。其实雨下得并不大,却是一生一世中最大的一场雨。而那封信是这样写的,年轻的樱子知不知道呢?</p>
</div>
</article>
<div class="am-tab-panel am-fade goods-comment" data-goods-id="{{$goods.id}}" data-url="{{:MyUrl('index/goods/comment')}}">
<div class="goods-comment-content"></div>
<div class="goods-page-container"></div>
<div class="table-no goods-page-no-data none">
<i class="am-icon-warning"></i>
<span>没有评论数据</span>
</div>
</div>
<!-- 猜你喜欢 -->
......
......@@ -99,8 +99,14 @@ class Hook
];
// 金额
$params['data']['base']['increase_price'] -= $price;
$params['data']['base']['actual_price'] -= $price;
if($params['data']['base']['increase_price'] > 0)
{
$params['data']['base']['increase_price'] -= $price;
}
if($params['data']['base']['actual_price'] > 0)
{
$params['data']['base']['actual_price'] -= $price;
}
}
return DataReturn('无需处理', 0);
} else {
......
......@@ -156,7 +156,21 @@ class GoodsCommentsService
foreach($data as &$v)
{
// 用户信息
$v['user'] = UserService::GetUserViewInfo($v['user_id']);
$user = UserService::GetUserViewInfo($v['user_id']);
if(!isset($params['is_public']) || $params['is_public'] == 1)
{
$v['user'] = [
'avatar' => $user['avatar'],
'user_name_view' => ($v['is_anonymous'] == 1) ? '匿名' : substr($user['user_name_view'], 0, 3).'***'.substr($user['user_name_view'], -3),
];
} else {
$v['user'] = $user;
}
// 订单规格
$spec = Db::name('OrderDetail')->where(['order_id'=>$v['order_id'], 'goods_id'=>$v['goods_id']])->value('spec');
$v['spec'] = empty($spec) ? null : json_decode($spec);
// 是否
$v['is_reply_text'] = isset($common_is_text_list[$v['is_reply']]) ? $common_is_text_list[$v['is_reply']]['name'] : '';
......
......@@ -1194,6 +1194,66 @@ function MobileBrowserEnvironment()
return null;
}
/**
* [pagelibrary 分页按钮获取]
* @param {[int]} total [数据总条数]
* @param {[int]} number [页面数据显示条数]
* @param {[int]} page [当前页码数]
* @param {[int]} sub_number [按钮生成个数]
* @return {[string]} [html代码]
*/
function PageLibrary(total, number, page, sub_number)
{
if((total || null) == null) return '';
if((page || null) == null) page = 1;
if((number || null) == null) number = 15;
if((sub_number || null) == null) sub_number = 2;
var page_total = Math.ceil(total/number);
if(page > page_total) page = page_total;
page = (page <= 0) ? 1 : parseInt(page);
var html = '<ul class="am-pagination am-pagination-centered pagelibrary"><li ';
html += (page > 1) ? '' : 'class="am-disabled"';
page_x = page-1;
html += '><a data-page="'+page_x+'" class="am-radius">&laquo;</a></li>';
var html_before = '';
var html_after = '';
var html_page = '<li class="am-active"><a class="am-radius">'+page+'</a></li>';
if(sub_number > 0)
{
/* 前按钮 */
if(page > 1)
{
total = (page-sub_number < 1) ? 1 : page-sub_number;
for(var i=page-1; i>=total; i--)
{
html_before = '<li><a data-page="'+i+'" class="am-radius">'+i+'</a></li>'+html_before;
}
}
/* 后按钮 */
if(page_total > page)
{
total = (page+sub_number > page_total) ? page_total : page+sub_number;
for(var i=page+1; i<=total; i++)
{
html_after += '<li><a data-page="'+i+'" class="am-radius">'+i+'</a></li>';
}
}
}
html += html_before+html_page+html_after;
html += '<li';
html += (page > 0 && page < page_total) ? '' : ' class="am-disabled"';
page_y = page+1;
html += '><a data-page="'+page_y+'" class="am-radius">&raquo;</a></li></ul>';
return html;
}
// 公共数据操作
$(function()
{
......
......@@ -66,6 +66,8 @@ input{font-size:12px;font-size:100%;outline:none;line-height:normal;color:#444;}
.goods-comment .am-comment-main { border: 1px solid #eee; }
.goods-comment .comment-spec { margin-top: 5px; color: #B0B0B0; }
.comment-reply { border-top: 1px dashed #eee; margin-top: 10px; padding-top: 10px; }
.goods-comment .am-comment .am-comment-hd { background: #fbfbfb; }
.goods-comment .am-comment .am-comment-main:after { border-right-color: #fbfbfb; }
.comment-reply-title { color: #666; }
.comment-reply-desc { color: #905602; }
......
......@@ -18,6 +18,82 @@ function poptit_close()
}
}
/**
* 评论记录ajax请求
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-05-13T21:39:55+0800
* @param {[int]} page [分页值]
*/
function GoodsCommentsHtml(page)
{
$('.goods-page-no-data').addClass('none');
$.ajax({
url: $('.goods-comment').data('url'),
type:'POST',
data:{"goods_id": $('.goods-comment').data('goods-id'), "page": page},
dataType:'json',
success:function(result)
{
if(result.code == 0)
{
var html = '';
for(var i in result.data.data)
{
html += '<article class="am-comment">';
html += '<img src="'+result.data.data[i]['user']['avatar']+'" class="am-comment-avatar" alt="'+result.data.data[i]['user']['user_name_view']+'" />';
html += '<div class="am-comment-main">';
html += '<header class="am-comment-hd">';
html += '<div class="am-comment-meta">';
html += '<span class="am-comment-author">'+result.data.data[i]['user']['user_name_view']+'</span>';
html += ' 评论于 <time datetime="">'+result.data.data[i]['add_time_time']+'</time>';
html += '</div>';
html += '</header>';
html += '<div class="am-comment-bd">';
html += '<p>'+result.data.data[i]['content']+'</p>';
// 规格
if((result.data.data[i]['spec'] || null) != null)
{
var spec_string = '';
for(var s in result.data.data[i]['spec'])
{
if(s > 0)
{
spec_string += ' | ';
}
spec_string += result.data.data[i]['spec'][s]['type']+''+result.data.data[i]['spec'][s]['value'];
}
html += '<p class="comment-spec">'+spec_string+'</p>';
}
// 回复
if(result.data.data[i]['is_reply'] == 1 && (result.data.data[i]['reply'] || null) != null)
{
html += '<div class="comment-reply">';
html += '<span class="comment-reply-title">管理员回复:</span>';
html += '<span class="comment-reply-desc">'+result.data.data[i]['reply']+'</span>';
html += '</div>';
}
html += '</div>';
html += '</article>';
}
$('.goods-comment-content').html(html);
$('.goods-page-container').html(PageLibrary(result.data.total, result.data.number, page, 2));
}
// 没有数据
if($('.goods-comment-content article').length <= 0)
{
$('.goods-page-no-data').removeClass('none');
}
}
});
}
/**
* 购买/加入购物车
* @author Devil
......@@ -513,6 +589,30 @@ $(function() {
t.val((value <= 1) ? 1 : value);
});
// 评论
GoodsCommentsHtml(1);
$(document).on('click', '.goods-page-container .pagelibrary a', function()
{
var page = $(this).data('page') || null;
if(page != null)
{
// 获取数据
GoodsCommentsHtml(page);
// 回到评论顶部位置
var top = $('.introduce-main').offset().top;
$(window).smoothScroll({position: top});
}
});
// 累计评价点击事件
$('.tm-ind-panel .ind-panel-comment').on('click', function()
{
var top = $('.introduce-main').offset().top;
$(window).smoothScroll({position: top});
$('.introduce-main .am-tabs').tabs('open', 1);
});
});
// 浏览器窗口实时事件
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册