PHP Codeigniter框架使用rateyo插件时如何计算卖家平均星级评分
评分系统综合平均分实现方案(CodeIgniter + RateYo)
一、Model 层修改
你原有的 get_rate 方法只能返回单条评分记录,需要调整为计算指定主体的平均得分,两种实现方式可选:
方式1:SQL 聚合函数计算(推荐,性能更高)
public function get_average_rate($target_id) { // 假设你的评分存储字段名为rating,可替换为实际字段名 $this->db->select_avg('rating', 'avg_score'); // 原有查询条件是book_id,根据业务需求替换为卖家/商品的关联ID字段即可 $this->db->where('book_id', $target_id); $query = $this->db->get('rates'); $result = $query->row_array(); // 保留1位小数,匹配2.9、3.8这类数值格式,无评分时默认返回0 return round($result['avg_score'] ?? 0, 1); }
方式2:全量查询自行计算(需要额外统计场景用)
public function get_average_rate($target_id) { $this->db->select('rating'); $this->db->where('book_id', $target_id); $query = $this->db->get('rates'); $ratings = $query->result_array(); if (empty($ratings)) { return 0; } $total_score = array_sum(array_column($ratings, 'rating')); $avg = $total_score / count($ratings); return round($avg, 1); }
二、Controller 层逻辑
在对应控制器中调用模型方法获取平均分,传递到视图层:
public function detail($id) { // 其他业务逻辑 $data['avg_rating'] = $this->your_model_name->get_average_rate($id); $this->load->view('your_view_file', $data); }
三、View 层修改
把拿到的平均分值赋值给 RateYo 初始化属性,直接渲染综合评分:
<div class="rateyo" id="rating" data-rateyo-rating="<?php echo $avg_rating; ?>" data-rateyo-num-stars="5" data-rateyo-score="3"> </div> <br> <span class='result'>综合评分:<?php echo $avg_rating; ?></span> <!-- 仅用户提交评分页需要保留隐藏域,纯展示页可删除 --> <input type="hidden" name="rating">
四、Script 层调整
如果是综合评分展示页,可添加只读配置避免用户修改展示的评分:
$(function () { $(".rateyo").rateYo({ readOnly: true // 纯展示页加此配置,用户提交评分页可删除 }).on("rateyo.change", function (e, data) { var rating = data.rating; $(this).parent().find('.score').text('score :'+ $(this).attr('data-rateyo-score')); $(this).parent().find('.result').text('Rating :'+ rating); $(this).parent().find('input[name=rating]').val(rating); }); });
内容的提问来源于stack exchange,提问作者Jigen Otsuki
相关产品推荐
相关产品推荐

