* Date: 2018-4-3 */ namespace app\home\controller; use think\Db; use think\Config; use think\AjaxPage; use think\Request; class Ajax extends Base { public function _initialize() { parent::_initialize(); } /** * 跳转到文档详情页 * @return [type] [description] */ public function toView() { $aid = input('param.aid/d'); if (!empty($aid)) { $archives = Db::name('archives')->alias('a') ->field('b.*, a.*, c.ctl_name') ->join('arctype b', 'a.typeid = b.id', 'LEFT') ->join('channeltype c', 'c.id = a.channel', 'LEFT') ->where(['a.aid'=>$aid]) ->find(); $url = arcurl('home/'.$archives['ctl_name'].'/view', $archives, true, true); header('Location: '.$url); exit; } } /** * 获取评论列表 * @return mixed */ public function product_comment() { \think\Session::pause(); // 暂停session,防止session阻塞机制 $post = input('post.'); $post['aid'] = !empty($post['aid']) ? $post['aid'] : input('param.aid/d'); if (isMobile() && 1 < $post['p']) { $Result = []; } else { $Result = cache('EyouHomeAjaxComment_' . $post['aid']); if (empty($Result)) { /*商品评论数计算*/ $time = getTime(); $where = [ 'is_show' => 1, 'add_time' => ['<=', $time], 'product_id' => $post['aid'] ]; $count = Db::name('shop_order_comment')->field('total_score, is_new_comment')->where($where)->select(); $Result['total'] = count($count); $Result['good'] = 0; $Result['middle'] = 0; $Result['bad'] = 0; foreach ($count as $k => $v) { // 评价转换星级评分(旧版评价数据执行) $v['total_score'] = empty($v['is_new_comment']) ? GetScoreArray($v['total_score']) : $v['total_score']; if (in_array($v['total_score'], [1, 2])) { $Result['bad']++; } else if (in_array($v['total_score'], [3, 4])) { $Result['middle']++; } else if (in_array($v['total_score'], [5])) { $Result['good']++; } } $Result['good_percent'] = $Result['good'] > 0 ? round($Result['good'] / $Result['total'] * 100) : 0; if (0 === intval($Result['good_percent']) && $Result['total'] === 0) $Result['good_percent'] = 100; $Result['middle_percent'] = $Result['middle'] > 0 ? round($Result['middle'] / $Result['total'] * 100) : 0; $Result['bad_percent'] = $Result['bad'] > 0 ? 100 - $Result['good_percent'] - $Result['middle_percent'] : 0; // 存在评论则执行 // if (!empty($Result)) cache('EyouHomeAjaxComment_' . $post['aid'], $Result, null, 'shop_order_comment'); } /*选中状态*/ $Result['Class_1'] = 0 == $post['score'] ? 'check' : ''; $Result['Class_2'] = 1 == $post['score'] ? 'check' : ''; $Result['Class_3'] = 2 == $post['score'] ? 'check' : ''; $Result['Class_4'] = 3 == $post['score'] ? 'check' : ''; } // 调用评价列表 $this->GetCommentList($post); $this->assign('Result', $Result); return $this->fetch('system/product_comment'); } // 手机端加载更多时调用 public function comment_list() { \think\Session::pause(); // 暂停session,防止session阻塞机制 // 调用评价列表 $this->GetCommentList(input('post.')); return $this->fetch('system/comment_list'); } // 调用评价列表 private function GetCommentList($post = []) { // 商品评论数据处理 $field = 'a.*, u.username, u.nickname, u.head_pic, u.sex, l.level_name, b.data'; $time = getTime(); $where = [ 'a.is_show' => 1, 'a.add_time' => ['<=', $time], 'a.product_id' => $post['aid'] ]; if (!empty($post['score'])) { // $where['a.total_score'] = $post['score']; if (3 === intval($post['score'])) { $where['a.total_score'] = ['IN', [1, 2]]; } else if (2 === intval($post['score'])) { $where['a.total_score'] = ['IN', [3, 4]]; } else if (1 === intval($post['score'])) { $where['a.total_score'] = ['IN', [5]]; } } $count = Db::name('shop_order_comment')->alias('a')->where($where)->count(); $Page = new AjaxPage($count, 5); $Comment = Db::name('shop_order_comment') ->alias('a') ->field($field) ->where($where) ->join('__SHOP_ORDER_DETAILS__ b', 'a.details_id = b.details_id', 'LEFT') ->join('__USERS__ u', 'a.users_id = u.users_id', 'LEFT') ->join('__USERS_LEVEL__ l', 'u.level = l.level_id', 'LEFT') ->order('a.comment_id desc') ->limit($Page->firstRow . ',' . $Page->listRows) ->select(); $Comment = !empty($Comment) ? $Comment : []; foreach ($Comment as &$value) { // 规格处理 $value['data'] = unserialize($value['data']); $value['spec_value'] = !empty($value['data']['spec_value']) ? htmlspecialchars_decode($value['data']['spec_value']) : ''; $value['spec_value'] = rtrim(str_replace("
", ",", $value['spec_value']), ','); // 会员头像处理 $value['nickname'] = empty($value['nickname']) ? $value['username'] : $value['nickname']; $value['head_pic'] = handle_subdir_pic(get_default_pic($value['head_pic'], false, $value['sex'])); // $value['head_pic'] = get_head_pic($value['head_pic'], false, $value['sex']); // 是否匿名评价 $value['nickname'] = empty($value['is_anonymous']) ? $value['nickname'] : '匿名用户'; // 评价转换星级评分(旧版评价数据执行) $value['total_score'] = empty($value['is_new_comment']) ? GetScoreArray($value['total_score']) : $value['total_score']; // 评价上传的图片 $value['upload_img'] = !empty($value['upload_img']) ? explode(',', unserialize($value['upload_img'])) : ''; // 评价的内容 $value['content'] = !empty($value['content']) ? htmlspecialchars_decode(unserialize($value['content'])) : ''; // 回复的内容 $adminReply = !empty($value['admin_reply']) ? unserialize($value['admin_reply']) : []; $adminReply['adminReply'] = !empty($adminReply['adminReply']) ? htmlspecialchars_decode($adminReply['adminReply']) : ''; $value['admin_reply'] = $adminReply; } // dump($Comment);exit; // 新版评价处理,查询全部评价评分 $totalScoreAll = Db::name('shop_order_comment')->alias('a')->field('total_score, is_new_comment')->where($where)->select(); $totalScore = $praiseNum = 0; foreach ($totalScoreAll as $score) { // 计算总评分 $score['total_score'] = empty($score['is_new_comment']) ? GetScoreArray($score['total_score']) : $score['total_score']; $totalScore = intval($totalScore) + intval($score['total_score']); // 好评数统计(4星以上算好评) if (intval($score['total_score']) >= 4) $praiseNum++; } // 评价总数 $totalScoreRows = count($totalScoreAll); // 好评率(4星以上算好评) $praiseRate = intval($totalScoreRows) == 0 ? 0 : intval((intval($praiseNum) / intval($totalScoreRows)) * 100); if (0 === intval($praiseRate)) $praiseRate = 100; // 总评分 / 评价人数 = 评分平均值 // $averageRating = floatval(sprintf("%.2f", strval(intval($totalScore) / intval($totalScoreRows)))); $averageRating = intval($totalScoreRows) == 0 ? 0 : sprintf("%.1f", strval(intval($totalScore) / intval($totalScoreRows))); if (0 === intval($averageRating)) $averageRating = '5.0'; // 平均值占比 $averageRatingRate = floatval(sprintf("%.2f", (strval($averageRating) / strval(5)) * strval(100))); $this->assign('praiseRate', $praiseRate); $this->assign('averageRating', $averageRating); $this->assign('totalScoreRows', $totalScoreRows); $this->assign('averageRatingRate', $averageRatingRate); // 加载渲染模板 $this->assign('PageObj', $Page); $this->assign('Page', $Page->show()); $this->assign('Comment', $Comment); } // 联动地址获取 public function ajax_get_region_data() { $parent_id = input('param.parent_id/d'); // 获取指定区域ID下的城市并判断是否需要处理特殊市返回值 $RegionData = $this->SpecialCityDealWith($parent_id); // 处理数据 $region_html = $region_names = $region_ids = ''; if ($RegionData) { // 拼装下拉选项 foreach ($RegionData as $key => $value) { $region_html .= ""; if ($key > '0') { $region_names .= ','; $region_ids .= ','; } $region_names .= $value['name']; $region_ids .= $value['id']; } } $return = [ 'region_html' => $region_html, 'region_names' => $region_names, 'region_ids' => $region_ids, // 'parent_array' => config('global.field_region_all_type'), ]; echo json_encode($return); } // 获取指定区域ID下的城市并判断是否需要处理特殊市返回值 // 特殊市:北京市,上海市,天津市,重庆市 private function SpecialCityDealWith($parent_id = 0) { empty($parent_id) && $parent_id = 0; /*parent_id在特殊范围内则执行*/ // 处理北京市,上海市,天津市,重庆市逻辑 $RegionData = Db::name('region')->where("parent_id", $parent_id)->select(); $parent_array = config('global.field_region_type'); if (in_array($parent_id, $parent_array)) { $region_ids = get_arr_column($RegionData, 'id'); $RegionData = Db::name('region')->where('parent_id', 'IN', $region_ids)->select(); } /*结束*/ return $RegionData; } }