下面我将从 工作原理、常见问题及解决方案、以及自定义修改 三个方面进行详细说明。

(图片来源网络,侵删)
DedeCMS 评论功能的工作原理
要理解问题,首先要知道它是怎么工作的,DedeCMS 的评论系统主要涉及以下几个部分:
-
数据表:
dede_feedback:这是存储所有评论的核心数据表,每条评论都作为一个记录存在,包含评论者ID、昵称、邮箱、内容、评论的文章ID、IP地址、评论时间、审核状态(0=待审核,1=已通过)等字段。
-
模板文件:
templets/default/feedback.htm:这是评论列表和评论表单的默认模板文件,你在这个文件里看到的所有样式和HTML结构,都是用来展示评论和让用户提交评论的。templets/default/plus/feedback_ajax.htm:这个文件通常用于AJAX无刷新提交评论时,服务器返回的HTML片段。
-
程序文件:
(图片来源网络,侵删)/plus/feedback.php:这是处理评论提交的核心PHP脚本,当用户在前台点击“发表评论”时,表单数据会通过POST方式提交到这个文件。- 这个文件会做几件事:
a. 验证用户输入(是否为空、是否包含敏感词等)。
b. 将评论数据插入到
dede_feedback数据表中,arcticle字段(审核状态)默认为0(待审核)。 c. 根据是否开启AJAX,返回相应的结果(成功/失败信息)。
-
标签调用:
- 页模板文件(通常是
templets/default/article_article.htm)中,需要使用特定的DedeCMS标签来调用评论功能。 {dede:feedback}:这个标签是用来显示评论列表的,它会从dede_feedback表中查询出指定文章ID的所有已审核评论,并按照dede/feedback.htm模板的格式进行渲染。- 评论表单(
<form>)通常直接写在article_article.htm或通过include引入feedback.htm。
- 页模板文件(通常是
简单流程总结:页填写评论 -> 提交到 plus/feedback.php -> PHP处理并存入数据库(状态为待审) -> 如果AJAX提交,返回结果;如果是普通提交,页面刷新 -> {dede:feedback} 标签从数据库读取已审核评论并显示。
常见问题及解决方案
这是大家最关心的部分,评论功能出问题,90%的情况都集中在下面几点。
问题1:评论不显示,或者显示“该文章不允许评论”
原因分析: 这通常不是评论系统本身的问题,而是文章模型或的设置导致的。
解决方案:
-
检查文章模型设置:
- 进入后台“核心” -> “内容模型管理” -> “普通文章”。
- 点击“字段管理”,确保有一个名为 “文章属性” 的字段(通常是系统自带的)。
- 编辑这个字段,在“后台字段参数”中,确保 “是否允许评论” 这个选项是 “是”。
- 保存后,去前台刷新一下,可能需要清空浏览器缓存。
-
检查单篇文章设置:
- 在后台编辑某篇文章时,在右侧的“常规选项”或“自定义字段”区域,找到“文章属性”。
- 确保 “允许评论” 这个选项被勾选了,后台模型改了,但单篇文章的属性没改过来。
问题2:评论提交后,页面没有反应,或者显示“评论失败”
原因分析:
这通常是 feedback.php 文件在执行时遇到了错误,比如权限问题、数据库连接问题、或代码逻辑错误。
解决方案:
-
检查目录权限:
- 确保
/plus/目录及其下的feedback.php文件有可执行和可写权限,通常设置为 755 即可。
- 确保
-
检查
feedback.php文件:- 用FTP或文件管理器打开
/plus/feedback.php文件。 - 找到这一行:
$needCheck = isset($needCheck) ? $needCheck : 1; - 将其修改为:
$needCheck = 0; - 解释:
$needCheck这个变量控制着是否进行敏感词验证,如果因为敏感词词典文件损坏或路径错误导致验证失败,评论就会提交失败,临时设为0可以绕过这一步,用于判断问题根源,如果修改后可以提交,说明就是敏感词模块的问题,需要检查相关词典文件。
- 用FTP或文件管理器打开
-
检查PHP错误日志:
- 如果上述方法无效,说明代码有更深层的问题,请联系你的服务器空间商,查看一下网站的PHP错误日志,里面会有具体的错误信息,
Fatal error: ...,根据错误信息去修复。
- 如果上述方法无效,说明代码有更深层的问题,请联系你的服务器空间商,查看一下网站的PHP错误日志,里面会有具体的错误信息,
问题3:评论提交后,内容为空或显示乱码
原因分析: 通常是字符编码问题,或者开启了内容过滤但过滤规则有问题。
解决方案:
-
检查网站字符编码:
- 确保你的网站数据库、页面文件、PHP文件都使用 UTF-8 编码,不统一是乱码的万恶之源。
- 在后台“系统” -> “系统基本参数” -> “核心设置”中,检查“GBK编码”是否为“否”,确保是UTF-8模式。
-
过滤:
- 后台“系统” -> “系统基本参数” -> “其他选项” -> “过滤所有HTML标签”设置为“否”。
- 后台“系统” -> “系统基本参数” -> “安全设置” -> “启用关键字替换”可以暂时关闭,看是否是关键字替换规则导致的。
问题4:评论审核机制不工作
原因分析: 评论提交后直接显示,或者后台看不到待审核评论。
解决方案:
-
检查
feedback.php中的审核逻辑:- 打开
/plus/feedback.php,找到插入数据库的SQL语句附近。 - 应该有一句类似
if($arctid>0 && $typeid>0 && $msg!=''){...}的代码块。 - 在执行
INSERT INTO ...语句之前,确保$feedback数组中的arcticle字段被设置为0。$feedback['arcticle'] = 0;。 - 如果代码直接写死了
arcticle=1,那评论就永远不需要审核了。
- 打开
-
检查后台审核流程:
- 评论提交后,应该会出现在后台“评论”管理模块中。
- 进入后台“内容” -> “评论管理”,查看是否有待审核的评论。
- 如果没有,说明评论根本没有存入
dede_feedback表,请参考问题2。 - 如果有,点击“审核通过”即可在前台显示。
自定义评论样式和功能
如果你想修改评论的样式,或者增加一些功能,可以按照以下步骤操作:
修改评论显示样式
这是最常见的需求,比如改变评论框的样式、调整评论列表的布局。
-
操作步骤:
- 用FTP连接你的服务器。
- 进入
/templets/default/目录。 - 找到并下载
feedback.htm文件。 - 用Dreamweaver、VS Code等编辑器打开它,像修改普通HTML文件一样修改它的样式和结构。
- 保存后,上传回服务器,覆盖原文件即可。
-
小技巧:
- 为了防止模板升级后被覆盖,你可以在
/templets/下新建一个以你的网站命名的文件夹(/templets/yourname/),然后把feedback.htm放在里面,然后在后台“系统” -> “系统基本参数” -> “默认模板风格”中,将默认风格修改为yourname。
- 为了防止模板升级后被覆盖,你可以在
增加评论验证码(防止垃圾评论)
默认情况下,DedeCMS 的评论功能在登录状态下可以免验证码,未登录则需要验证码,如果你想让所有人都需要验证码,可以修改:
- 操作步骤:
- 打开
/plus/feedback.php文件。 - 找到验证码验证的逻辑段,通常在文件中下部。
- 找到类似这样的代码:
if($safequestion!='') { $safeanswer = strtolower(trim($safeanswer)); $safecode = strtolower(trim($safecode)); if($safeanswer != $safecode) { ShowMsg('验证码错误!', '-1'); exit(); } } - 将其修改为强制验证:
// 强制开启验证码 $safequestion = 1; // 模拟验证码问题存在 $safeanswer = strtolower(trim($safeanswer)); $safecode = strtolower(trim($safecode)); if($safeanswer != $safecode) { ShowMsg('验证码错误!', '-1'); exit(); } - 确保你的
feedback.htm模板里有验证码的输入框:<input type="text" name="safeanswer" size="20" /> <img src="{dede:global.cfg_cmspath/}/plus/vcode.php" id="vcodeimg" style="cursor:pointer" onclick="this.src='{dede:global.cfg_cmspath/}/plus/vcode.php?'+Math.random()" title="点击刷新验证码" />
- 打开
希望这份详细的指南能帮助你解决 DedeCMS 内容页评论的各种问题!如果遇到更具体的报错信息,可以提供出来,以便更精准地定位问题。
