dede调用留言的代码方法是什么?

99ANYc3cd6
预计阅读时长 22 分钟
位置: 首页 DEDE建站 正文

下面我将从基础调用高级调用,为你详细讲解各种方法,并提供完整的代码示例。


使用官方提供的 {dede:feedback} 标签(最常用、最推荐)

这是DedeCMS内置的、专门用于调用留言的标签,功能强大且易于使用,它可以在任何需要显示留言内容的地方使用,比如首页、列表页、内容页等。

基础语法

{dede:feedback row='10' titlelen='30'}
    <li>
        <span class="title">[field:title/]</span>
        <span class="user">[field:uname/]</span>
        <span class="time">[field:time function="MyDate('Y-m-d H:i',@me)"/]</span>
        <p class="msg">[field:msg/]</p>
    </li>
{/dede:feedback}

标签属性详解

  • row='10'必填,表示要调用的留言条数,len='30' 可选,留言标题的显示长度,汉字按个算,超过部分用...` 代替。
  • msglen='100': 可选,留言内容的显示长度。
  • infolen='100': 可选,留言者信息的显示长度。
  • typeid='0': 可选,指定调用某个特定栏目(ID)下的留言。0 表示调用所有栏目的留言。
  • channelid='-1': 可选,指定调用特定模型(频道)的留言。-1 表示所有模型。
  • ischeck='1'非常重要,指定是否只调用已审核通过的留言。1 是(默认),0 是否(包括待审核的),通常情况下,你都需要设置为 1
  • sort='desc': 可选,留言排序方式。desc 按时间倒序(最新的在前),asc 按时间正序(最旧的在前)。

字段变量详解

  • [field:id/]: 留言的唯一ID。
  • [field:aid/]: 留言所对应的文章ID(如果是针对某篇文章的留言)。
  • [field:tid/]: 留言所对应的栏目ID。
  • [field:fid/]: 留言的父ID(用于回复功能)。
  • [field:username/]注意:这是留言者在前台显示的用户名,与 [field:uname/] 不同。uname 是系统用户名,username 是前台显示名,通常使用 [field:username/]
  • [field:uname/]: 留言者的系统用户名。
  • [field:arctitle/]: 如果留言是针对某篇文章的,这里显示该文章的标题。
  • [field:msg/]核心,留言的正文内容。
  • [field:time/]: 留言的时间戳(Unix时间戳)。
  • [field:ip/]: 留言者的IP地址。

完整示例(调用最新的10条已审核留言)

这是一个在首页或侧边栏显示最新留言的常见样式。

<div class="latest-feedback">
    <h3>最新留言</h3>
    <ul>
        {dede:feedback row='10' ischeck='1' sort='desc'}
            <li>
                <div class="feedback-info">
                    <span class="user">[field:username/]</span>
                    <span class="time">[field:time function="MyDate('m-d H:i',@me)"/]</span>
                </div>
                <p class="feedback-content">[field:msg/]</p>
            </li>
        {/dede:feedback}
    </ul>
</div>

CSS样式(可选):

.latest-feedback { border: 1px solid #eee; padding: 10px; margin-bottom: 20px; }
.latest-feedback h3 { border-bottom: 2px solid #ccc; padding-bottom: 5px; margin-bottom: 10px; }
.latest-feedback ul { list-style: none; padding: 0; }
.latest-feedback li { border-bottom: 1px dashed #f0f0f0; padding: 8px 0; }
.latest-feedback .feedback-info { color: #666; font-size: 12px; margin-bottom: 5px; }
.latest-feedback .user { font-weight: bold; }
.latest-feedback .time { float: right; }
.latest-feedback .feedback-content { color: #333; line-height: 1.5; }

调用指定文章的留言

如果你想在某篇文章的详情页下方,显示该文章的所有留言,可以使用 typeidaid 属性进行筛选。

示例:在文章内容页下方调用该文章的留言

将以下代码放在文章详情页模板(如 article_article.htm)的 {dede:field.body/} 之后。

<div class="article-feedback">
    <h4>本文留言 ([field:total/])</h4>
    <ul>
        {dede:feedback row='20' ischeck='1' aid='~id~'}
            <li>
                <div class="feedback-header">
                    <span class="username">[field:username/]</span> 说道:
                    <span class="time">[field:time function="MyDate('Y-m-d H:i',@me)"/]</span>
                </div>
                <div class="feedback-message">[field:msg/]</div>
            </li>
        {/dede:feedback}
    </ul>
</div>

关键点:

  • aid='~id~':这里的 ~id~ 是DedeCMS的一个特殊变量,它会自动解析为当前文章的ID,这样就能确保只调用当前文章的留言,如果你是手动指定,就写成 aid='123'(123是文章ID)。

使用SQL直接查询(高级用法)

当官方标签无法满足复杂的需求时(需要联表查询、进行更复杂的排序或筛选),你可以直接使用SQL语句在模板中查询。

⚠️ 警告: 直接操作SQL有安全风险,请务必做好过滤和防注入措施,DedeCMS提供了 GetOne()Execute() 等安全函数。

示例:使用SQL调用最新留言

在模板中,你需要使用 {dede:php} 标签来执行PHP代码。

{dede:php}
    // 1. 引入数据库配置文件
    // 通常在全局已经加载,但为了安全,可以显式引入
    // require_once(DEDEROOT.'/include/dedesql.class.php');
    // 2. 编写SQL查询语句
    // 从 dede_feedback 表中查询
    // 按时间倒序排列,只取10条,且状态为已审核
    $sql = "SELECT id, msg, username, time FROM dede_feedback WHERE ischeck=1 ORDER BY id DESC LIMIT 0, 10";
    // 3. 执行查询
    $dsql = new DedeSql(false);
    $dsql->SetQuery($sql);
    $dsql->Execute('fb');
    // 4. 循环输出结果
    $echoText = '<ul class="sql-feedback-list">';
    while($row = $dsql->GetArray('fb')) {
        $msg = htmlspecialchars($row['msg']); // 对输出内容进行HTML转义,防止XSS攻击
        $username = htmlspecialchars($row['username']);
        $time = MyDate('Y-m-d H:i', $row['time']); // 使用DedeCMS的日期格式化函数
        $echoText .= "
            <li>
                <span class='user'>{$username}</span>
                <span class='time'>{$time}</span>
                <p class='msg'>{$msg}</p>
            </li>
        ";
    }
    $echoText .= '</ul>';
    echo $echoText;
    // 5. 释放资源
    $dsql->Close();
{/dede:php}

这种方法的优势:

  • 灵活性极高,可以实现任何复杂的查询逻辑。
  • 可以与其他表进行联表查询。

劣势:

  • 代码复杂,容易出错。
  • 对PHP和SQL知识有一定要求。
  • 存在安全风险,必须谨慎处理。

调用留言板页面本身

如果你不是想“调用”留言内容到其他地方,而是想创建一个独立的“留言板”页面,这非常简单。

  1. 创建栏目

    • 进入后台 [核心] -> [栏目管理] -> [添加栏目]
    • 栏目名称:填写“留言板”或你想要的名称。
    • 栏目类型:选择“外部链接”。
    • 外部链接地址:填写 guestbook.php
    • 其他选项根据需要填写,然后保存。
  2. 生成页面

    • 保存栏目后,去 [生成] -> [一键更新栏目][更新HTML] 中,确保这个链接可以被正确访问。
  3. 访问

    • 访问你网站的这个新栏目链接(如 http://你的域名/plus/guestbook.php),就会跳转到DedeCMS默认的留言板页面。

总结与建议

方法 适用场景 优点 缺点
{dede:feedback} 绝大多数场景,如首页、侧边栏、文章页调用留言。 简单、安全、官方推荐,功能足够强大。 灵活性相对较低,无法实现非常复杂的逻辑。
指定文章留言 文章详情页下方显示相关留言。 目标明确,与上下文结合紧密。 需要配合 ~id~ 变量使用。
SQL直接查询 需要复杂查询、联表、自定义排序等高级功能。 灵活性最高,功能最强大。 复杂且有风险,需要开发者具备较高技能。
调用留言板页面 创建一个独立的留言板页面。 最简单,无需编写任何代码。 只是跳转,不是内容内嵌。

给新手的建议:

优先使用 方法一 ({dede:feedback},它能解决你90%的需求,如果需要调用某篇文章的留言,使用 方法二,只有在官方标签完全无法满足时,才考虑使用 方法三,并且一定要做好安全防护,创建独立留言板页面则使用 方法四

-- 展开阅读全文 --
头像
织梦采集器为何无法采集?
« 上一篇 04-23
dede栏目分页调取如何实现?
下一篇 » 04-23
取消
微信二维码
支付宝二维码