这个过程主要涉及三个部分:

(图片来源网络,侵删)
- 评论表单:让访客输入评论内容并提交。
- 评论列表:循环显示该文章下的所有评论。
- 必要的JS文件:实现评论提交的AJAX无刷新效果。
下面是详细的步骤和代码示例。
第一步:确保开启评论功能
在后台管理系统中,必须确保目标栏目或系统全局开启了评论功能。
- 登录织梦后台。
- 进入 [系统] -> [系统基本参数] -> [核心设置]。
- 找到 “是否启用评论功能”,将其设置为 “是”。
- (可选但推荐)找到 “评论是否需要审核”,根据你的需求设置。
- 进入 [栏目管理],选择你要开启评论的栏目,在“高级选项”中确保 “允许在本栏目发布文档” 和 (评论)允许在本栏目评论 都是“是”。
- 进入 管理] -> [所有文档],编辑你想要评论的文章,确保 “是否允许评论” 选项是“是”。
第二步:在文章内容页模板中添加评论代码
打开你当前使用的文章内容页模板文件,通常是 /templets/default/article_article.htm,将以下代码插入到你希望显示评论区域的位置。
评论表单
这部分代码用于显示评论输入框和提交按钮。

(图片来源网络,侵删)
<div class="post-comment">
<h3>发表评论</h3>
<form class="dede_comment-form" action="{dede:field name='phpurl'/}/feedback.php" method="post">
<input type="hidden" name="dopost" value="send">
<input type="hidden" name="aid" value="{dede:field.id/}">
<input type="hidden" name="fid" value='0'>
<div class="form-group">
<label for="username">用户名:</label>
<!-- 如果未登录,显示用户名输入框;如果已登录,显示登录用户名 -->
{dede:if get='islogin==0'}
<input type="text" name="username" id="username" class="input" size="35" required>
{else /}
<input type="text" name="username" value="{dede:global.cfg_ml_username/}" class="input" size="35" readonly>
{/dede:if}
</div>
<div class="form-group">
<label for="msg">评论内容:</label>
<textarea name="msg" id="msg" rows="5" cols="80" required></textarea>
</div>
<div class="form-group">
<!-- 验证码 -->
<label for="validate">验证码:</label>
<input type="text" name="validate" id="validate" class="input" size="10" required>
<img src="{dede:field name='phpurl'/}/vdimgck.php" id="validateimg" style="cursor:pointer" onclick="this.src='{dede:field name='phpurl'/}/vdimgck.php?'+Math.random();" title="看不清?点击换一张" />
</div>
<button type="submit" name="submit" class="btn btn-primary">发表评论</button>
</form>
</div>
代码解释:
action="{dede:field name='phpurl'/}/feedback.php":指定评论提交处理的脚本。name="dopost" value="send":固定值,表示是发送评论。name="aid" value="{dede:field.id/}":当前文章的ID,至关重要,用于将评论关联到对应文章。name="fid" value='0':固定值,表示是顶级评论(对文章的直接评论)。{dede:if get='islogin==0'}...{/dede:if}:判断用户是否登录,未登录则显示用户名输入框,已登录则显示其用户名。vdimgck.php:织梦自带的验证码图片。
评论列表
这部分代码用于循环显示当前文章的所有评论。
<div class="comment-list">
<h3>评论列表 (共 <span class="comment-count">{dede:field.id function="GetTotalVote(@me)"/}</span> 条)</h3>
{dede:feedback row='10' titlelen='24' type='good'}
<div class="comment-item">
<div class="comment-user">
<strong class="user-name">[field:username/]</strong>
<span class="comment-time">[field:pubdate function="MyDate('Y-m-d H:i',@me)"/]</span>
</div>
<div class="comment-content">
[field:msg/]
</div>
</div>
{/dede:feedback}
<!-- 如果没有评论,显示提示信息 -->
<div class="no-comment">
暂无评论,快来抢沙发吧!
</div>
</div>
代码解释:
{dede:feedback}:这是织梦调用评论的核心标签。row='10':显示评论的数量。titlelen='24'的长度(通常评论没有标题,此参数作用不大)。type='good':评论类型,good表示好评(默认),bad表示差评,一般用good即可。
[field:username/]:评论者用户名。[field:pubdate function="MyDate('Y-m-d H:i',@me)"/]:评论发表的时间,使用MyDate函数进行格式化。[field:msg/]。{dede:field.id function="GetTotalVote(@me)"/}:获取当前文章的总评论数。注意:这个函数在织梦V5.7及更高版本中可能不准确,有时会返回点赞数,如果评论数不准,可以尝试直接调用{dede:feedback row='1000'/}来获取,或者查找更准确的函数。no-comment:一个备用提示,当{dede:feedback}没有查询到结果时会显示。
第三步:引入必要的JS文件(实现AJAX无刷新)
为了让评论提交后不用刷新整个页面,织梦自带的评论功能需要引入一个JS文件,在文章内容页模板的<head>标签内或<body>标签结束前加入以下代码:

(图片来源网络,侵删)
<script type="text/javascript" src="{dede:field name='templeturl'/}/js/web_common.js"></script>
或者,更推荐的方式是直接调用织梦核心JS:
<script type="text/javascript" src="{dede:global.cfg_cmsurl/}/include/dedeajax2.js"></script>
<script type="text/javascript">
// 验证码刷新
function changeValidateCode() {
var num = new Date().getTime();
var rand = Math.random();
var validateCode = document.getElementById('validateimg');
validateCode.src = "{dede:field name='phpurl'/}/vdimgck.php?"+num+"="+rand;
}
// 如果你的模板里没有集成织梦的AJAX核心,需要手动引入
// 如果使用了DedeCMS 5.7之后的版本,通常这个JS已经包含在其他地方了
</script>
重要提示:
- 织梦的AJAX评论功能依赖于
dedeajax2.js这个文件。 - 确保你的模板目录下有
js/web_common.js,或者在/include/目录下有dedeajax2.js。 - 如果评论提交后页面会刷新,而不是无刷新更新,99%的原因是缺少了这个JS文件或者JS路径错误。
完整示例
将以上三部分整合到article_article.htm中的典型布局:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">{dede:field.title/}_{dede:global.cfg_webname/}</title>
<!-- 引入CSS样式文件 -->
<link rel="stylesheet" href="/templets/default/style/css.css">
<!-- 引入织梦AJAX核心JS -->
<script type="text/javascript" src="{dede:global.cfg_cmsurl/}/include/dedeajax2.js"></script>
</head>
<body>
<div id="main">
<!-- 文章标题和内容 -->
<h1>{dede:field.title/}</h1>
<div class="article-content">
{dede:field.body/}
</div>
<!-- ============= 评论区域开始 ============= -->
<div class="article-comment">
<!-- 1. 评论表单 -->
<div class="post-comment">
<h3>发表评论</h3>
<form class="dede_comment-form" action="{dede:field name='phpurl'/}/feedback.php" method="post" onsubmit="return false;">
<input type="hidden" name="dopost" value="send">
<input type="hidden" name="aid" value="{dede:field.id/}">
<input type="hidden" name="fid" value='0'>
<div class="form-group">
<label>用户名:</label>
{dede:if get='islogin==0'}
<input type="text" name="username" id="username" class="input" size="35" required>
{else /}
<input type="text" name="username" value="{dede:global.cfg_ml_username/}" class="input" size="35" readonly>
{/dede:if}
</div>
<div class="form-group">
<label>评论内容:</label>
<textarea name="msg" id="msg" rows="5" cols="80" required></textarea>
</div>
<div class="form-group">
<label>验证码:</label>
<input type="text" name="validate" id="validate" class="input" size="10" required>
<img src="{dede:field name='phpurl'/}/vdimgck.php" id="validateimg" style="cursor:pointer" onclick="this.src='{dede:field name='phpurl'/}/vdimgck.php?'+Math.random();" title="看不清?点击换一张" />
</div>
<button type="submit" name="submit" class="btn btn-primary">发表评论</button>
</form>
</div>
<!-- 2. 评论列表 -->
<div class="comment-list">
<h3>评论列表 (共 <span class="comment-count">{dede:field.id function="GetTotalVote(@me)"/}</span> 条)</h3>
{dede:feedback row='10' titlelen='24' type='good'}
<div class="comment-item">
<div class="comment-user">
<strong class="user-name">[field:username/]</strong>
<span class="comment-time">[field:pubdate function="MyDate('Y-m-d H:i',@me)"/]</span>
</div>
<div class="comment-content">
[field:msg/]
</div>
</div>
{/dede:feedback}
<div class="no-comment" style="display:none;">
暂无评论,快来抢沙发吧!
</div>
</div>
</div>
<!-- ============= 评论区域结束 ============= -->
</div>
<script type="text/javascript">
// 验证码刷新函数
function changeValidateCode(obj) {
var num = new Date().getTime();
var rand = Math.random();
var validateCode = document.getElementById('validateimg');
validateCode.src = "{dede:field name='phpurl'/}/vdimgck.php?"+num+"="+rand;
}
</script>
</body>
</html>
常见问题排查
-
评论提交后页面刷新,无效果
- 原因:缺少
dedeajax2.js文件或路径错误。 - 解决:检查
<head>中是否正确引入了/include/dedeajax2.js,如果找不到,从织梦默认模板中复制一份到你的/include/目录。
- 原因:缺少
-
评论列表不显示
- 原因1:文章或栏目未开启评论功能。
- 原因2:评论被管理员删除或设置为“待审核”。
- 原因3:
{dede:feedback}标签参数错误或模板缓存问题,尝试清空后台的“更新缓存”。 - 解决:逐一排查上述原因。
-
验证码不显示或点击无效
- 原因:目录权限问题,
/data/目录没有写入权限,导致验证码图片无法生成。 - 解决:确保你的网站
/data/目录有可写权限(通常是755或777,视服务器环境而定)。
- 原因:目录权限问题,
按照以上步骤操作,你就可以在织梦文章页成功调用评论功能了。
