插件简介
星星评分插件(也常被称为顶踩或评分插件)通常包含两个核心功能:

- 前端显示页面(如文章详情页)显示一组星星(通常是5颗),用户可以点击进行评分。
- 后端处理:记录每个用户的评分,并计算内容的平均分或总得分,在列表页或管理后台显示。
市面上有很多版本的星星评分插件,但其核心原理和安装方法大同小异,下面我将介绍一种通用且稳定的安装和使用方法,适用于大多数 DedeCMS 5.7 及 7.x 版本。
安装步骤(通用版)
假设你已经下载了一个星星评分插件,里面通常包含以下文件:
star.jpg或images/目录:星星的图片文件。score.php:处理评分请求的后台脚本。install.php或sql/目录:包含数据库导入脚本。- 一些模板文件(
.htm)。
以下是详细的安装步骤:
步骤 1:上传文件
通过 FTP 或主机管理面板,将插件文件上传到你的 DedeCMS 根目录下。

- 将
star.jpg图片上传到/images/目录下。 - 将
score.php上传到根目录下。 - 如果有
install.php,也上传到根目录。 - 如果有模板文件(如
score.htm),根据其说明上传到/templets/default/或你当前使用的模板目录下。
步骤 2:导入数据库
这是最关键的一步,用于在数据库中创建存储评分数据的表。
- 打开
install.php:用记事本或代码编辑器打开插件包里的install.php文件。 - 找到 SQL 语句:在文件中,你会找到类似以下的
CREATE TABLE语句:CREATE TABLE `dede_starscore` ( `id` int(11) NOT NULL auto_increment, `aid` int(11) NOT NULL default '0', `ip` varchar(20) NOT NULL default '', `score` tinyint(1) NOT NULL default '0', `addtime` int(10) NOT NULL default '0', PRIMARY KEY (`id`), KEY `aid` (`aid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
- 注意:如果你的表前缀不是
dede_(dy_),你需要手动修改这个语句,将所有的dede_替换成你自己的表前缀。
- 注意:如果你的表前缀不是
- 执行 SQL:
- 方法一(推荐):登录你的网站数据库管理工具(如 phpMyAdmin)。
- 选择你的 DedeCMS 数据库。
- 点击“SQL”选项卡,将修改好的
CREATE TABLE语句粘贴进去,然后执行。 - 方法二:如果插件提供了
.sql文件,可以直接在 phpMyAdmin 中导入该文件。
步骤 3:修改模板文件
这是让星星评分显示在前端的步骤,你需要修改两个模板文件。
-
修改文章列表页模板 (
list_artlist.htm或类似文件) 在你想显示评分的位置(例如文章标题旁边或摘要下面)加入以下代码:<span class="stars"> [field:id function="GetStarScore(@me)" /] </span>- 这里的
GetStarScore是一个自定义函数,我们需要在下一步创建它。
- 这里的
-
修改文章详情页模板 (
article_article.htm) 在文章内容下方或评论区域,加入用户交互的星星评分代码:
(图片来源网络,侵删)<div class="score_area"> <strong>为这篇文章评分:</strong> <ul class="star_list"> <li><a href="javascript:doscore(1, [field:id/]);" title="1分">1</a></li> <li><a href="javascript:doscore(2, [field:id/]);" title="2分">2</a></li> <li><a href="javascript:doscore(3, [field:id/]);" title="3分">3</a></li> <li><a href="javascript:doscore(4, [field:id/]);" title="4分">4</a></li> <li><a href="javascript:doscore(5, [field:id/]);" title="5分">5</a></li> </ul> <div class="score_result"> 当前平均分:<span id="score_avg">[field:id function="GetStarScore(@me)" /]</span> 分 (共有 <span id="score_count">[field:id function="GetScoreCount(@me)" /]</span> 人评分) </div> </div>- 这里的
doscore是一个 JavaScript 函数,用于调用后台的score.php。
- 这里的
步骤 4:修改 PHP 核心文件
这是实现功能逻辑的最后一步。
-
在
include/helpers/extend.helper.php文件末尾添加自定义函数 这个文件是专门用来存放自定义函数的,在文件最后,添加以下两个函数:// 获取文章的平均星星评分 if ( ! function_exists('GetStarScore')) { function GetStarScore($aid) { global $dsql; $row = $dsql->GetOne("SELECT AVG(score) as avgscore FROM `#@__starscore` WHERE aid='$aid'"); $score = empty($row['avgscore']) ? 0 : number_format($row['avgscore'], 1); // 返回星星的HTML显示 $str = ''; $full_star = floor($score); $half_star = ($score - $full_star) >= 0.5 ? 1 : 0; for($i=1; $i<=5; $i++){ if($i <= $full_star){ $str .= '<img src="/images/star_full.jpg" />'; }elseif($i == $full_star + 1 && $half_star){ $str .= '<img src="/images/star_half.jpg" />'; }else{ $str .= '<img src="/images/star_null.jpg" />'; } } return $score . ' ' . $str; } } // 获取文章的评分人数 if ( ! function_exists('GetScoreCount')) { function GetScoreCount($aid) { global $dsql; $row = $dsql->GetOne("SELECT COUNT(*) as count FROM `#@__starscore` WHERE aid='$aid'"); return $row['count']; } }- 注意:上面的函数代码假设你有
star_full.jpg,star_half.jpg,star_null.jpg三张图片,如果你只有一张star.jpg,可能需要修改函数逻辑,或者使用 CSS 来实现星星的点亮效果,为了简化,很多插件会直接返回数字分数。
- 注意:上面的函数代码假设你有
-
创建
score.php文件 如果插件没有提供,你可以在根目录下手动创建一个score.php文件,内容如下:<?php require_once (dirname(__FILE__) . "/include/common.inc.php"); require_once DEDEINC.'/arc.partview.class.php'; // 验证是否为AJAX请求 if(empty($dopost)) $dopost = ''; if($dopost == 'save') { $aid = isset($aid) ? intval($aid) : 0; $score = isset($score) ? intval($score) : 0; $ip = GetIP(); if($aid > 0 && $score > 0 && $score <= 5) { // 检查是否已经评分(防止重复评分) $row = $dsql->GetOne("SELECT id FROM `#@__starscore` WHERE aid='$aid' AND ip='$ip'"); if(is_array($row)) { echo json_encode(array('success'=>0, 'msg'=>'您已经评过分了!')); exit(); } // 插入评分数据 $inquery = "INSERT INTO `#@__starscore`(aid,ip,score,addtime) VALUES ('$aid','$ip','$score','" . time() . "'); "; if($dsql->ExecuteNoneQuery($inquery)) { // 返回成功和最新的平均分 $row = $dsql->GetOne("SELECT AVG(score) as avgscore FROM `#@__starscore` WHERE aid='$aid'"); $avg_score = number_format($row['avgscore'], 1); echo json_encode(array('success'=>1, 'msg'=>'评分成功!', 'score'=>$avg_score)); exit(); } } echo json_encode(array('success'=>0, 'msg'=>'评分失败!')); exit(); } ?> -
在文章详情页底部引入 JavaScript 在
article_article.htm模板的底部,</body>标签之前,添加以下 JavaScript 代码,用于处理doscore函数和 AJAX 请求:<script type="text/javascript"> function doscore(score, aid) { // 使用 jQuery 的 AJAX 方法,如果页面没有加载 jQuery,需要先引入 jQuery.post("/score.php", {dopost:'save', aid:aid, score:score}, function(data){ var data = jQuery.parseJSON(data); if(data.success == 1) { alert(data.msg); // 更新页面上的平均分显示 jQuery("#score_avg").html(data.score); // 更新评分人数 jQuery("#score_count").html(parseInt(jQuery("#score_count").html()) + 1); } else { alert(data.msg); } }); } </script>
注意事项与常见问题
- 表前缀问题:这是最常见的问题,如果你的数据库表前缀不是默认的
dede_,所有 SQL 语句和 PHP 代码中的表名都必须修改。 - jQuery 依赖:上面的 AJAX 示例使用了 jQuery,如果你的模板没有引入 jQuery 库,请先在页面头部添加:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
- CSS 样式:星星的显示效果通常需要 CSS 来美化,你可以在模板的 CSS 文件中添加样式,让星星横向排列、去掉列表样式等。
- 防刷机制:简单的
ip限制可以防止大部分用户重复评分,但无法防止专业刷分,如果需要更强的防刷机制,可以考虑结合 Cookie 或会员登录状态。 - 插件版本:不同的插件版本,文件结构和代码可能略有不同,请仔细阅读你下载的插件包里的
readme.txt或说明.txt文件,按照其特定步骤进行操作。
更简单的替代方案:使用 DedeCMS 官方“顶踩”功能
如果你的需求仅仅是“顶”和“踩”,而不需要复杂的星级评分,DedeCMS 自带的顶踩功能更简单,无需安装插件。
- 开启功能:在后台“系统” -> “系统基本参数” -> “核心设置”中,找到“是否启用顶踩功能”,选择“是”。
- 修改模板:在需要显示顶踩的地方(如
article_article.htm)加入:{dede:field.goodpost/} / {dede:field.badpost/} - 修改
article_add.php:在发布文章时,系统会自动记录顶踩数。
这个方法虽然简单,但不够美观,且功能单一。
安装 DedeCMS 星星评分插件的核心步骤可以概括为: 上传文件 -> 导入数据库 -> 修改模板(添加标签) -> 修改PHP(添加函数和逻辑)。
虽然步骤较多,但只要细心,按照教程一步步操作,完全可以成功安装,安装成功后,你的网站互动性将得到显著提升。
