直接使用系统自带的留言板标签(最简单)
这是最直接、最简单的方法,适用于在文章页、首页等任何地方调用一个完整的留言板列表。

前提条件
确保你已经:
- 在后台
核心->内容模型管理->普通文章(或其他你需要的模型) 中,勾选了 “使用留言板” 选项。 - 在后台
核心->频道模型->内容模型管理->普通文章->字段管理中,确保有一个名为guestbook的字段,并且其“显示在发布页”是勾选的。 - 在后台
互动->留言簿管理中,已经创建并启用了至少一个留言簿(默认名称为 "guestbook")。
调用代码
将以下代码放到你需要显示留言列表的模板文件中(index.htm, article_article.htm 等)。
{dede:guestbook row='10' titlelen='30'}
<li>
<strong>[field:username function="(@me=='guest' ? '游客' : @me)"/]</strong> 说:
<p>[field:msg /]</p>
<small>发表于:[field:posttime function="MyDate('Y-m-d H:i',@me)"/]</small>
</li>
{/dede:guestbook}
标签参数说明
row='10':调用留言的数量,这里调用10条,len='30'`:留言标题的长度,虽然默认留言板没有标题字段,但保留此参数以防未来扩展。type='...':指定留言簿的类型,如果网站有多个留言簿(针对不同产品或栏目),可以通过此参数来指定,默认为guestbook。infolen='100'的显示长度。orderby='posttime':排序方式,默认按发布时间排序,也可以是id等。
样式美化
上面的代码只是基础结构,你可以通过 CSS 来美化它,让它看起来更美观。
/* 在你的 CSS 文件中添加 */
.guestbook-list {
list-style: none;
padding: 0;
}
.guestbook-list li {
border-bottom: 1px solid #eee;
padding: 15px 0;
}
.guestbook-list strong {
color: #333;
}
.guestbook-list p {
color: #666;
margin: 5px 0;
}
.guestbook-list small {
color: #999;
font-size: 12px;
}
使用自定义SQL标签(最灵活)
当你需要更复杂的查询,比如只调用某个特定栏目或特定会员的留言时,自定义SQL标签是最佳选择。

场景示例
假设我们想在某个产品页面,只显示该产品相关的留言,我们需要一个额外的字段来关联产品ID。
操作步骤
第一步:修改留言表结构
- 进入你的网站数据库管理工具(如 phpMyAdmin)。
- 找到 DedeCMS 的默认留言表
dede_guestbook。 - 为该表添加一个新字段,
aid(文章ID),类型为int(11)。
第二步:在发布表单中添加该字段
- 在后台
核心->频道模型->内容模型管理->普通文章->增加一个新字段。 - 字段名填
aid,字段类型选数字,勾选“显示在发布页”。 - 这样,在后台发布文章时,你就可以为这篇文章关联一个ID(虽然这个ID和文章本身的ID是重复的,这里仅为演示)。
第三步:在模板中使用SQL标签
在需要显示留言的模板文件中( 代码解释: 对于网站的“联系我们”或“在线留言”页面,最好的方式是创建一个独立的页面,这样结构清晰,也便于管理。 完成后,你就可以通过访问 对于绝大多数情况,方法一和方法三已经足够使用,方法二是为有特殊需求的开发者准备的进阶技巧,希望这些详细的说明能帮助你成功地在 DedeCMS 中调用在线留言!article_article.htm),使用 {dede:sql}
<h3>相关留言</h3>
<ul class="guestbook-list">
{dede:sql sql="SELECT * FROM `dede_guestbook` WHERE aid=~aid~ ORDER BY id DESC LIMIT 10"}
<li>
<strong>[field:username function="(@me=='guest' ? '游客' : @me)"/]</strong>:
<p>[field:msg /]</p>
<small>[field:posttime function="MyDate('Y-m-d H:i',@me)"/]</small>
</li>
{/dede:sql}
</ul>

sql="SELECT * FROMdede_guestbookWHERE aid=~aid~ ORDER BY id DESC LIMIT 10":这是标准的 SQL 查询语句。
~aid~ 是一个特殊占位符,DedeCMS 会自动将其替换为当前页面的文章 ID,这是实现动态关联的关键。ORDER BY id DESC:按留言ID降序排列,即最新的留言在前。LIMIT 10:限制只查询10条记录。{dede:sql} 标签内部可以使用 [field:字段名] 来循环输出查询结果的每一行。
创建一个独立的留言页面(最规范)
创建留言页面模板
/templets/default/)下,新建一个文件,命名为 guestbook_page.htm。guestbook_page.htm 示例代码:<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">在线留言 - {dede:global.cfg_webname/}</title>
<link rel="stylesheet" href="/templets/default/style.css">
</head>
<body>
{dede:include filename="head.htm"/}
<div class="main-content">
<h1>在线留言</h1>
<!-- 留言列表 -->
<div class="guestbook-list-container">
<h2>留言列表</h2>
{dede:guestbook row='20' titlelen='30' orderby='posttime'}
<div class="guestbook-item">
<div class="gb-header">
<span class="gb-user">[field:username function="(@me=='guest' ? '游客' : @me)"/]</span>
<span class="gb-time">[field:posttime function="MyDate('Y-m-d H:i',@me)"/]</span>
</div>
<div class="gb-content">[field:msg /]</div>
<!-- 如果需要显示管理员回复 -->
<!-- [field:reply/] -->
</div>
{/dede:guestbook}
</div>
<!-- 留言表单 -->
<div class="guestbook-form-container">
<h2>发表留言</h2>
<form action="/plus/guestbook.php" method="post" name="myform" onsubmit="return checkSubmit();">
<input type="hidden" name="action" value="save" />
<input type="hidden" name="dede_fields" value="username,text;email,text;msg,text;validate,text" />
<input type="hidden" name="dede_fieldshash" value="这里需要动态生成" />
<p>
<label for="username">昵称:</label>
<input type="text" id="username" name="username" class="intxt" required />
</p>
<p>
<label for="email">邮箱:</label>
<input type="email" id="email" name="email" class="intxt" required />
</p>
<p>
<label for="msg">留言内容:</label>
<textarea id="msg" name="msg" rows="8" class="intxt" required></textarea>
</p>
<p>
<!-- 验证码部分,根据你的后台设置 -->
<label>验证码:</label>
{dede:validatecode/}
<input type="text" name="validate" class="intxt" style="width:50px;" required />
</p>
<p>
<button type="submit" class="btn">提交留言</button>
</p>
</form>
</div>
</div>
{dede:include filename="footer.htm"/}
<script>
function checkSubmit() {
// 这里可以添加一些前端验证逻辑
if (document.myform.msg.value == '') {
alert('留言内容不能为空!');
return false;
}
return true;
}
</script>
</body>
</html>
创建自定义页面
核心 -> 创建HTML。页面名称 中填写你的页面标题,“在线留言”。页面文件名 中填写你的模板文件名,guestbook。选择模板 中,选择你刚刚创建的 guestbook_page.htm。/guestbook.html 来查看你的独立留言页面了。
总结与建议
方法
优点
缺点
适用场景
自带标签
简单、快捷、无需修改任何东西
灵活性差,无法进行复杂查询
在文章页、首页等位置简单展示几条最新留言。
自定义SQL
非常灵活,可以实现各种复杂关联查询
需要修改数据库,有一定技术门槛
需要将留言与特定内容(如产品、文章)关联起来的高级应用。
独立页面
结构最规范,功能完整,便于SEO和用户查找
需要创建单独的模板和页面
网站的“联系我们”、“在线留言”等标准功能页面。
