使用官方提供的 {dede:guestbook} 标签(最常用、最推荐)
这是织梦官方内置的、专门用于调用留言板的标签,功能强大且易于使用,它可以在任何需要显示留言列表的模板页面(如首页、列表页、内容页等)直接使用。

(图片来源网络,侵删)
基础语法
{dede:guestbook row='10' titlelen='30'}
<li>
<span class="title">[field:title/]</span>
<span class="username">来自 [field:uname/] 的留言</span>
<span class="time">[field:time function="MyDate('Y-m-d H:i',@me)"/]</span>
<p class="content">[field:msg/]</p>
</li>
{/dede:guestbook}
标签参数详解
| 参数 | 说明 | 示例 |
|---|---|---|
row |
调用条数,显示多少条留言。 | row='5' (显示5条) |
infolen |
内容长度最多显示多少个字符。 | infolen='50' (内容最多50个字) |
sort |
排序方式,默认为按 dtime (发布时间) 降序。 |
sort='dtime' (按时间降序) |
type |
留言类型。all为所有留言,replay为已回复的留言。 |
type='replay' (只显示已回复的) |
imgwidth |
缩略图宽度,如果留言有图片附件,设置缩略图宽度。 | imgwidth='100' |
imgheight |
缩略图高度,如果留言有图片附件,设置缩略图高度。 | imgheight='100' |
字段变量(在标签内使用 [field:xxx/] 调用)
| 变量 | 说明 |
|---|---|
[field:id/] |
留言ID |
[field:uname/] |
留言人昵称 |
[field:msg/] |
|
[field:reply/] |
管理员回复内容 |
[field:time/] |
留言时间(原始时间戳) |
[field:ischeck/] |
是否审核(1为已审核,0为未审核) |
[field:ip/] |
留言人IP地址 |
[field:email/] |
留言人邮箱 |
[field:homepage/] |
留言人主页 |
注意:对于时间字段,通常需要使用 function 进行格式化,如 [field:time function="MyDate('Y-m-d H:i',@me)"/]。
完整示例(在首页显示最新5条留言)
假设你的首页模板文件是 index.htm,你希望在某个侧边栏区域显示留言。
- 打开
index.htm文件。 - 找到你想要插入留言列表的位置。
- 插入以下代码:
<div class="guestbook-box">
<h3>最新留言</h3>
<ul class="guestbook-list">
{dede:guestbook row='5' infolen='50' type='replay'}
<li>
<div class="guest-info">
<span class="user">[field:uname/]</span>
<span class="time">[field:time function="MyDate('m-d H:i',@me)"/]</span>
</div>
<div class="msg-content">
[field:msg/]
</div>
{if field:reply/}
<div class="admin-reply">
<span class="label">管理员回复:</span>
[field:reply/]
</div>
{/if}
</li>
{/dede:guestbook}
</ul>
<div class="more-link">
<a href="{dede:global.cfg_cmspath/}/plus/guestbook.php">查看更多留言</a>
</div>
</div>
代码解释:
row='5':显示5条留言。infolen='50':每条留言内容最多显示50个字符。type='replay':只显示管理员已回复的留言,这样能保证显示的都是有效沟通。{if field:reply/} ... {/if}:这是一个条件判断,只有当这条留言有管理员回复时,才会显示“管理员回复”部分。{dede:global.cfg_cmspath/}/plus/guestbook.php:这是织梦留言板页面的固定地址,用于“查看更多”的链接。
使用SQL查询调用(高度自定义)
当官方的 {dede:guestbook} 标签无法满足你的复杂需求时(需要关联查询其他表、进行更复杂的排序等),你可以使用织梦的 {dede:sql} 标签直接执行SQL语句。

(图片来源网络,侵删)
基础语法
{dede:sql sql='SELECT id, uname, msg, time, reply FROM dede_guestbook WHERE ischeck=1 ORDER BY dtime DESC LIMIT 0, 10'}
<li>
[field:uname/] 说:[field:msg function="cn_substr(@me, 50)"/]
<small>时间:[field:time function="MyDate('Y-m-d',@me)"/]</small>
</li>
{/dede:sql}
代码解析
sql='...':这里是你要执行的SQL查询语句。dede_guestbook是织梦留言板的数据表名,请确保你的表名没有修改过。WHERE ischeck=1:只查询已审核的留言,这是非常重要的,避免显示垃圾或未审核内容。ORDER BY dtime DESC:按发布时间降序排列,最新的在前面。LIMIT 0, 10:从第0条开始,取10条数据。
[field:xxx/]:在{dede:sql}标签中,[field:xxx/]用于获取SQL查询结果集的字段值。
调用指定会员的留言
如果你想调用某个特定会员的留言,可以在 {dede:guestbook} 标签中使用 userid 属性,或者在 {dede:sql} 中使用 WHERE userid = '...' 条件。
使用 {dede:guestbook}
{dede:guestbook row='10' userid='1' type='replay'}
<!-- 显示用户ID为1的会员的留言 -->
{/dede:guestbook}
userid 属性的值就是该会员在 dede_member 表中的ID。
使用 {dede:sql}
{dede:sql sql='SELECT uname, msg, time FROM dede_guestbook WHERE userid=1 AND ischeck=1 ORDER BY dtime DESC'}
<!-- 显示用户ID为1的会员的留言 -->
{/dede:sql}
常见问题与注意事项
-
留言未显示出来?
- 检查审核状态:最常见的原因是留言未通过审核,请确保你的SQL语句或标签参数中包含了
ischeck=1 的条件,或者在后台审核了该留言。
- 检查调用位置:确保你将代码放在了正确的模板文件中,并且该模板文件在后台被设置为“使用”(首页模板在“主页管理”中)。
- 检查缓存:修改模板后,请到后台“生成” -> “更新HTML”或“更新缓存”,前台才能看到效果。
-
样式问题?
{dede:guestbook} 标签本身只负责输出数据,不负责样式,你需要自己编写CSS代码来美化留言列表的显示效果,如上面示例中的 .guestbook-box, .guest-info 等。
-
安全性问题?
- 使用
{dede:sql} 标签时,务必注意SQL注入风险,不要直接从前端获取变量然后拼接到SQL语句中,如果必须使用,请对变量进行严格的过滤和转义。
方法
优点
缺点
适用场景
{dede:guestbook}
官方推荐,简单易用,参数丰富
灵活性相对较低
绝大多数常规留言列表调用需求,如首页侧边栏、文章页底部等。
{dede:sql}
高度灵活,可执行任何复杂查询
需要懂SQL,有安全风险,性能稍差
需要关联查询、特殊排序或官方标签无法实现的复杂业务逻辑。
对于99%的前台调用留言板的需求,强烈推荐使用第一种方法 {dede:guestbook},它足够强大且安全,是织梦CMS设计的最佳实践。
{dede:guestbook row='10' userid='1' type='replay'}
<!-- 显示用户ID为1的会员的留言 -->
{/dede:guestbook}
userid 属性的值就是该会员在 dede_member 表中的ID。
使用 {dede:sql}
{dede:sql sql='SELECT uname, msg, time FROM dede_guestbook WHERE userid=1 AND ischeck=1 ORDER BY dtime DESC'}
<!-- 显示用户ID为1的会员的留言 -->
{/dede:sql}
常见问题与注意事项
-
留言未显示出来?
- 检查审核状态:最常见的原因是留言未通过审核,请确保你的SQL语句或标签参数中包含了
ischeck=1 的条件,或者在后台审核了该留言。
- 检查调用位置:确保你将代码放在了正确的模板文件中,并且该模板文件在后台被设置为“使用”(首页模板在“主页管理”中)。
- 检查缓存:修改模板后,请到后台“生成” -> “更新HTML”或“更新缓存”,前台才能看到效果。
-
样式问题?
{dede:guestbook} 标签本身只负责输出数据,不负责样式,你需要自己编写CSS代码来美化留言列表的显示效果,如上面示例中的 .guestbook-box, .guest-info 等。
-
安全性问题?
- 使用
{dede:sql} 标签时,务必注意SQL注入风险,不要直接从前端获取变量然后拼接到SQL语句中,如果必须使用,请对变量进行严格的过滤和转义。
方法
优点
缺点
适用场景
{dede:guestbook}
官方推荐,简单易用,参数丰富
灵活性相对较低
绝大多数常规留言列表调用需求,如首页侧边栏、文章页底部等。
{dede:sql}
高度灵活,可执行任何复杂查询
需要懂SQL,有安全风险,性能稍差
需要关联查询、特殊排序或官方标签无法实现的复杂业务逻辑。
对于99%的前台调用留言板的需求,强烈推荐使用第一种方法 {dede:guestbook},它足够强大且安全,是织梦CMS设计的最佳实践。
{dede:sql sql='SELECT uname, msg, time FROM dede_guestbook WHERE userid=1 AND ischeck=1 ORDER BY dtime DESC'}
<!-- 显示用户ID为1的会员的留言 -->
{/dede:sql}
常见问题与注意事项
-
留言未显示出来?
- 检查审核状态:最常见的原因是留言未通过审核,请确保你的SQL语句或标签参数中包含了
ischeck=1的条件,或者在后台审核了该留言。 - 检查调用位置:确保你将代码放在了正确的模板文件中,并且该模板文件在后台被设置为“使用”(首页模板在“主页管理”中)。
- 检查缓存:修改模板后,请到后台“生成” -> “更新HTML”或“更新缓存”,前台才能看到效果。
- 检查审核状态:最常见的原因是留言未通过审核,请确保你的SQL语句或标签参数中包含了
-
样式问题?
{dede:guestbook}标签本身只负责输出数据,不负责样式,你需要自己编写CSS代码来美化留言列表的显示效果,如上面示例中的.guestbook-box,.guest-info等。
-
安全性问题?
- 使用
{dede:sql}标签时,务必注意SQL注入风险,不要直接从前端获取变量然后拼接到SQL语句中,如果必须使用,请对变量进行严格的过滤和转义。
- 使用
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
{dede:guestbook} |
官方推荐,简单易用,参数丰富 | 灵活性相对较低 | 绝大多数常规留言列表调用需求,如首页侧边栏、文章页底部等。 |
{dede:sql} |
高度灵活,可执行任何复杂查询 | 需要懂SQL,有安全风险,性能稍差 | 需要关联查询、特殊排序或官方标签无法实现的复杂业务逻辑。 |
对于99%的前台调用留言板的需求,强烈推荐使用第一种方法 {dede:guestbook},它足够强大且安全,是织梦CMS设计的最佳实践。
