0

0

DedeCMS评分功能怎么添加?评分显示如何设置?

月夜之吻

月夜之吻

发布时间:2025-09-06 10:51:01

|

905人浏览过

|

来源于php中文网

原创

dedecms评分功能通过修改内容页模板插入评分代码,利用{dede:field.scores /}标签显示平均分,并添加星形打分区域和javascript实现用户交互,数据通过ajax提交至/plus/feedback_js.php处理,结合css美化界面,最终实现评分功能并可通过结构化数据优化seo。

dedecms评分功能怎么添加?评分显示如何设置?

DedeCMS的评分功能,说白了,就是通过对内容页模板进行一番“手术”,插入特定的代码来展示当前评分、提供用户打分入口,并最终通过后端脚本处理数据。显示设置则更多是前端的活儿,通过CSS和JavaScript来美化和交互。核心在于理解DedeCMS的标签体系和它的

plus
目录下的反馈处理机制。

解决方案

要让DedeCMS的内容拥有评分功能,这事儿其实分两步走:一是把评分的“骨架”搭起来,二是给它穿上“衣服”并赋予“灵魂”。

第一步:搭建评分的骨架(添加功能)

这主要涉及修改你内容页的模板文件,比如

article_article.htm
(具体文件名可能因你使用的内容模型而异)。

  1. 找到你的内容模板: 通常在

    /templets/default/article_article.htm
    或你自定义的模板目录下。

  2. 插入评分显示标签: DedeCMS有一个内置的

    {dede:field.scores /}
    标签,它能直接显示当前内容的平均评分。你可以把它放在你觉得合适的位置,比如文章标题下方或者正文结尾。

    <div class="article-rating-display">
        当前文章平均评分:<span id="current-avg-score">{dede:field.scores /}</span> 分
        <!-- 这里可以根据需要添加更多信息,比如总评分人数等 -->
    </div>
  3. 添加用户打分区域: 这才是关键。我们需要一个让用户点击打分的地方。通常我们会用一组星形图标来实现。

    <div class="user-rating-area">
        <p>请为本文打分:</p>
        <div class="rating-stars" id="ratingStars">
            <span class="star" data-score="1">☆</span>
            <span class="star" data-score="2">☆</span>
            <span class="star" data-score="3">☆</span>
            <span class="star" data-score="4">☆</span>
            <span class="star" data-score="5">☆</span>
        </div>
        <button id="submitRatingBtn" class="submit-rating-btn">提交我的评分</button>
        <p id="ratingMessage" style="color: green; display: none;"></p>
    </div>

    这里我们用

    <span>
    标签模拟星星,通过
    data-score
    属性记录分数。

  4. 编写JavaScript处理打分逻辑: 这是让星星动起来,并将用户选择的分数发送到后台的核心。我们需要监听星星的点击事件,并用AJAX将数据提交到DedeCMS的反馈接口。

    <script src="/include/js/jquery.js"></script> <!-- 确保引入了jQuery -->
    <script>
    $(function(){
        let selectedScore = 0;
        const articleId = '{dede:field.id /}'; // 获取当前文章ID
    
        // 星星hover和点击效果
        $('#ratingStars .star').on('mouseenter', function() {
            $(this).prevAll().addBack().text('★').addClass('hovered');
            $(this).nextAll().text('☆').removeClass('hovered active');
        }).on('mouseleave', function() {
            if (selectedScore === 0) { // 如果没有选择分数,鼠标离开时恢复原样
                $('#ratingStars .star').text('☆').removeClass('hovered active');
            } else { // 如果已经选择分数,恢复到选择状态
                $('#ratingStars .star').each(function() {
                    if ($(this).data('score') <= selectedScore) {
                        $(this).text('★').addClass('active');
                    } else {
                        $(this).text('☆').removeClass('active');
                    }
                });
            }
        }).on('click', function() {
            selectedScore = $(this).data('score');
            $('#ratingStars .star').removeClass('active').text('☆');
            $(this).prevAll().addBack().addClass('active').text('★');
            // 可以立即提交,或者等待点击提交按钮
        });
    
        // 提交评分按钮点击事件
        $('#submitRatingBtn').on('click', function() {
            if (selectedScore === 0) {
                $('#ratingMessage').text('请选择一个分数再提交哦!').css('color', 'orange').fadeIn();
                return;
            }
    
            $.ajax({
                type: 'POST',
                url: '/plus/feedback_js.php', // DedeCMS的反馈处理接口
                data: {
                    action: 'send',
                    aid: articleId,
                    scores: selectedScore,
                    // msg: '用户通过评分功能提交', // DedeCMS feedback_js.php需要msg参数,即使是空字符串
                    validate: '' // 如果开启了验证码,这里需要处理
                },
                dataType: 'json',
                success: function(response) {
                    if (response.state) {
                        $('#ratingMessage').text('评分成功!感谢您的参与。').css('color', 'green').fadeIn();
                        // 成功后可以禁用打分区域,或者更新平均分显示
                        $('#ratingStars').off().find('.star').css('cursor', 'not-allowed');
                        $('#submitRatingBtn').prop('disabled', true);
                        // 考虑重新加载当前平均分或者通过AJAX更新
                        // 比如:$('#current-avg-score').text(response.new_avg_score);
                    } else {
                        $('#ratingMessage').text('评分失败:' + response.info).css('color', 'red').fadeIn();
                    }
                    setTimeout(() => $('#ratingMessage').fadeOut(), 3000); // 3秒后消息消失
                },
                error: function() {
                    $('#ratingMessage').text('网络错误,请稍后再试。').css('color', 'red').fadeIn();
                    setTimeout(() => $('#ratingMessage').fadeOut(), 3000);
                }
            });
        });
    });
    </script>

第二步:美化与交互(评分显示设置)

这部分主要是CSS的工作,让那些“☆”变成漂亮的星星,并有hover效果。

  1. 添加CSS样式: 在你的模板文件

    head
    部分或者外部CSS文件中添加。

    <style>
    .rating-stars {
        display: inline-block;
        font-size: 24px; /* 星星大小 */
        cursor: pointer;
        user-select: none; /* 防止文字被选中 */
    }
    .rating-stars .star {
        color: #ccc; /* 默认灰色 */
        transition: color 0.2s ease;
    }
    .rating-stars .star.hovered,
    .rating-stars .star.active {
        color: #FFD700; /* 选中或hover时的金色 */
    }
    .submit-rating-btn {
        padding: 8px 15px;
        background-color: #007bff;
        color: white;
        border: none;
        border-radius: 4px;
        cursor: pointer;
        margin-left: 10px;
    }
    .submit-rating-btn:hover {
        background-color: #0056b3;
    }
    .submit-rating-btn:disabled {
        background-color: #cccccc;
        cursor: not-allowed;
    }
    </style>

    通过这些步骤,一个基本的DedeCMS评分功能就搭建起来了。当然,这只是一个起点,你可能还需要根据实际需求进行更多的定制和优化。

如何确保评分数据的准确性和防刷机制?

在我的实际操作中,评分功能上线后,最让人头疼的往往不是技术实现本身,而是如何保证那些分数是真实、有效的,而不是被恶意刷上去的。这就像盖房子,结构搭好了,还得防贼。

I-Shop购物系统
I-Shop购物系统

部分功能简介:商品收藏夹功能热门商品最新商品分级价格功能自选风格打印结算页面内部短信箱商品评论增加上一商品,下一商品功能增强商家提示功能友情链接用户在线统计用户来访统计用户来访信息用户积分功能广告设置用户组分类邮件系统后台实现更新用户数据系统图片设置模板管理CSS风格管理申诉内容过滤功能用户注册过滤特征字符IP库管理及来访限制及管理压缩,恢复,备份数据库功能上传文件管理商品类别管理商品添加/修改/

下载

确保数据准确性:

  1. 平均分计算逻辑: DedeCMS内置的
    {dede:field.scores /}
    标签会从
    dede_feedback
    表中获取所有与该文章相关的评分并计算平均值。你需要确保这个计算过程是正确的,通常DedeCMS在这方面做得还不错。如果需要更复杂的加权平均,那可能需要自己写SQL查询或者PHP代码来处理。
  2. 数据清洗: 定期检查评分数据,如果发现某个IP或者用户在短时间内给大量文章打高分或低分,或者分数分布极其不自然(比如全是5分或全是1分),就需要警惕。

防刷机制:

这部分是重中之重,没有防刷,评分功能很可能变成摆设甚至负面影响。

  1. IP限制: 最常见也最直接的方法。限制一个IP地址在一定时间内(比如24小时)只能对同一篇文章评分一次。DedeCMS的
    dede_feedback
    表里有
    ip
    字段,可以利用它。
    • 实现思路:
      feedback_js.php
      处理评分提交时,查询
      dede_feedback
      表,检查当前IP和文章ID是否存在已有的评分记录。
  2. 用户ID限制: 对于注册用户,可以限制一个用户ID只能对同一篇文章评分一次。这比IP限制更可靠,因为IP可以更换。
    • 实现思路: 同样在
      feedback_js.php
      中,结合
      userid
      字段进行判断。如果用户未登录,则只进行IP限制;如果已登录,则优先进行用户ID限制。
  3. 时间间隔限制: 即使是不同文章,同一个IP或用户在极短时间内连续提交评分也应被视为异常。
  4. 验证码: 如果你对评分的真实性要求极高,可以在提交评分时加入图片验证码或滑动验证。虽然DedeCMS的
    feedback_js.php
    默认没有针对评分的验证码机制,但可以自行修改该文件,或者在前端JS提交前增加验证码校验。
  5. 前端JS混淆和后端验证: 别指望只靠前端JS就能防住刷分。所有的前端验证(比如分数范围、提交频率)都必须在后端
    feedback_js.php
    中再次验证。恶意用户完全可以绕过你的前端JS直接发送POST请求。
  6. 人工审核/举报机制: 作为最后一道防线,提供一个举报功能,让其他用户可以举报可疑评分。后台管理员可以定期查看和删除异常评分。

我个人觉得,IP和用户ID的组合限制是DedeCMS这类系统最实用且成本最低的防刷方案。再高级一点,可能就需要结合行为分析了,但那通常超出了一般网站的需求。

DedeCMS评分功能与SEO有什么关联,如何优化?

评分功能和SEO的关系,其实比很多人想象的要深远,它不仅仅是网站内部的一个互动元素,更是搜索引擎理解你内容质量的一个重要信号。

  1. 提升用户体验和停留时间: 有评分功能的页面,用户通常会更愿意停留,去看看别人怎么评的,自己也参与一下。这无形中增加了页面的停留时间(Time on Site)和互动性,这些都是搜索引擎判断内容质量和用户满意度的间接指标。高互动性往往意味着高质量内容。

  2. 提供丰富的结果片段(Rich Snippets): 这是最直接的SEO关联。通过在页面中嵌入结构化数据(Schema Markup),你可以告诉搜索引擎这篇文章的平均评分是多少、有多少人参与评分。当你的页面在搜索结果中显示星级评分时,会显得格外醒目,大大提高点击率(CTR)。

    • 如何优化: 核心是使用
      Schema.org
      AggregateRating
      类型。你需要在内容页的HTML中添加JSON-LD或Microdata格式的结构化数据。
    <!-- 示例:在模板的 <head> 或 <body> 标签内添加 -->
    <script type="application/ld+json">
    {
      "@context": "https://schema.org/",
      "@type": "Article", // 或者 BlogPosting, WebPage等
      "name": "{dede:field.title /}",
      "description": "{dede:field.description function='html2text(@me)' /}",
      "image": "{dede:field.litpic /}",
      "author": {
        "@type": "Person",
        "name": "{dede:field.writer /}"
      },
      "datePublished": "{dede:field.pubdate function='MyDate(\'Y-m-d\',@me)' /}",
      "aggregateRating": {
        "@type": "AggregateRating",
        "ratingValue": "{dede:field.scores /}", // 当前平均评分
        "ratingCount": "{dede:sql query='SELECT COUNT(*) FROM dede_feedback WHERE aid = ~id~ AND scores > 0'}{/dede:sql}" // 参与评分的总人数
      }
    }
    </script>

    注意:

    ratingCount
    需要一个SQL查询来获取实际的评分人数,
    ~id~
    会被当前文章ID替换。这个SQL可能需要你自己调整,确保能正确获取到。

  3. 关键词相关性与长尾词: 如果用户在评论中提到了文章相关的关键词,也能间接增强文章的关键词相关性。虽然评分本身不直接产生大量文本,但评分功能往往伴随着评论,而评论是产生UGC(用户生成内容)的重要来源。

我的建议是,在DedeCMS中实现评分功能时,务必把结构化数据这块做好。很多时候,星级评分在搜索结果中带来的点击率提升是立竿见影的。但也要注意,如果你的内容评分普遍很低,那显示星级反而会适得其反,所以内容质量是根本。

遇到评分功能不显示或提交失败怎么办?常见问题排查。

这玩意儿在实际部署中,总会遇到这样那样的小毛病。我个人经验是,大部分问题都出在前端脚本、模板标签或者后端接口的某个环节上。别慌,一步步来排查。

  1. 评分区域完全不显示?

    • 模板文件是否正确? 确认你修改的是当前内容模型使用的模板文件。DedeCMS有很多内容模型,每个模型可能有自己的模板。
    • HTML代码是否完整? 检查你插入的HTML代码(
      div.rating-stars
      等)是否被浏览器正确解析,有没有漏掉标签或者拼写错误。
    • CSS是否加载? 检查你的CSS文件是否正确引入,或者内联样式是否被其他样式覆盖。用浏览器开发者工具(F12)检查元素样式。
  2. 星星显示了,但点击没反应或者效果不对?

    • JavaScript是否加载? 检查你的JS代码是否在页面中被正确引入,有没有JS报错(F12打开控制台看
      Console
      )。常见的比如jQuery没加载或者版本冲突。
    • JS代码逻辑问题? 检查你的
      selectedScore
      变量是否正确更新,事件监听器是否绑定成功。
    • jQuery冲突? DedeCMS自带的jQuery版本可能较老,或者你引入了其他JS库导致
      $
      符号冲突。可以尝试使用
      jQuery.noConflict()
      来解决。
  3. 点击提交按钮后,提示“评分失败”或没有任何反应?

    • 检查AJAX请求: 这是最关键的一步。打开浏览器开发者工具(F12),切换到
      Network
      (网络)选项卡。
      • 查看请求是否发出: 点击提交后,有没有向
        /plus/feedback_js.php
        发出POST请求?
      • 查看请求参数:
        aid
        scores
        action=send
        这些参数是否正确传递?
      • 查看服务器响应: 服务器返回了什么?是200 OK,还是404、500错误?如果返回的是JSON,
        response.state
        true
        还是
        false
        response.info
        里有什么错误信息?这些信息是排查后端问题的关键。
    • feedback_js.php
      文件问题:
      • 文件是否存在? 确保
        /plus/feedback_js.php
        文件存在且可访问。
      • 文件权限? 确保服务器对
        feedback_js.php
        有执行权限。
      • DedeCMS核心代码修改? 如果你或其他人修改过DedeCMS的核心文件,可能影响了
        feedback_js.php
        的正常运行。
      • 数据库连接问题? 检查
        data/common.inc.php
        中的数据库配置是否正确,数据库是否正常运行。
    • 服务器日志: 如果AJAX请求返回500错误,通常意味着PHP代码执行出错。查看服务器的错误日志(比如Apache的error.log或Nginx的error.log),能找到具体的PHP报错信息。
    • 防刷机制误判: 检查你自定义的防刷逻辑(IP限制、用户ID限制等)是否过于严格,导致正常用户也无法提交。可以暂时关闭防刷功能进行测试。
  4. 评分显示不正确(比如一直是0分)?

    • {dede:field.scores /}
      标签是否有效?
      确保你使用的DedeCMS版本支持此标签,并且它能正确获取到数据。
    • dede_feedback
      表数据?
      检查数据库中
      dede_feedback

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1133

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

381

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2109

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

380

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1642

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

585

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

439

2024.04.29

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

24

2026.03.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

CSS教程
CSS教程

共754课时 | 41.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号