织梦文章发表评论如何调用?

99ANYc3cd6
预计阅读时长 40 分钟
位置: 首页 织梦建站 正文

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

织梦文章发表评论调用
(图片来源网络,侵删)
  1. 评论表单:让访客输入评论内容并提交。
  2. 评论列表:循环显示该文章下的所有评论。
  3. 必要的JS文件:实现评论提交的AJAX无刷新效果。

下面是详细的步骤和代码示例。


第一步:确保开启评论功能

在后台管理系统中,必须确保目标栏目或系统全局开启了评论功能。

  1. 登录织梦后台
  2. 进入 [系统] -> [系统基本参数] -> [核心设置]
  3. 找到 “是否启用评论功能”,将其设置为 “是”
  4. (可选但推荐)找到 “评论是否需要审核”,根据你的需求设置。
  5. 进入 [栏目管理],选择你要开启评论的栏目,在“高级选项”中确保 “允许在本栏目发布文档”(评论)允许在本栏目评论 都是“是”。
  6. 进入 管理] -> [所有文档],编辑你想要评论的文章,确保 “是否允许评论” 选项是“是”。

第二步:在文章内容页模板中添加评论代码

打开你当前使用的文章内容页模板文件,通常是 /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>

常见问题排查

  1. 评论提交后页面刷新,无效果

    • 原因:缺少dedeajax2.js文件或路径错误。
    • 解决:检查<head>中是否正确引入了/include/dedeajax2.js,如果找不到,从织梦默认模板中复制一份到你的/include/目录。
  2. 评论列表不显示

    • 原因1:文章或栏目未开启评论功能。
    • 原因2:评论被管理员删除或设置为“待审核”。
    • 原因3{dede:feedback}标签参数错误或模板缓存问题,尝试清空后台的“更新缓存”。
    • 解决:逐一排查上述原因。
  3. 验证码不显示或点击无效

    • 原因:目录权限问题,/data/目录没有写入权限,导致验证码图片无法生成。
    • 解决:确保你的网站/data/目录有可写权限(通常是755或777,视服务器环境而定)。

按照以上步骤操作,你就可以在织梦文章页成功调用评论功能了。

-- 展开阅读全文 --
头像
织梦生成的主页究竟藏在哪里?
« 上一篇 前天
C语言程序设计题库答案哪里找?
下一篇 » 前天

相关文章

取消
微信二维码
支付宝二维码

目录[+]