下面我将从基础调用到高级调用,为你详细讲解各种方法,并提供完整的代码示例。
使用官方提供的 {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; }
调用指定文章的留言
如果你想在某篇文章的详情页下方,显示该文章的所有留言,可以使用 typeid 或 aid 属性进行筛选。
示例:在文章内容页下方调用该文章的留言
将以下代码放在文章详情页模板(如 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知识有一定要求。
- 存在安全风险,必须谨慎处理。
调用留言板页面本身
如果你不是想“调用”留言内容到其他地方,而是想创建一个独立的“留言板”页面,这非常简单。
-
创建栏目:
- 进入后台
[核心]->[栏目管理]->[添加栏目]。 - 栏目名称:填写“留言板”或你想要的名称。
- 栏目类型:选择“外部链接”。
- 外部链接地址:填写
guestbook.php。 - 其他选项根据需要填写,然后保存。
- 进入后台
-
生成页面:
- 保存栏目后,去
[生成]->[一键更新栏目]或[更新HTML]中,确保这个链接可以被正确访问。
- 保存栏目后,去
-
访问:
- 访问你网站的这个新栏目链接(如
http://你的域名/plus/guestbook.php),就会跳转到DedeCMS默认的留言板页面。
- 访问你网站的这个新栏目链接(如
总结与建议
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
{dede:feedback} |
绝大多数场景,如首页、侧边栏、文章页调用留言。 | 简单、安全、官方推荐,功能足够强大。 | 灵活性相对较低,无法实现非常复杂的逻辑。 |
| 指定文章留言 | 文章详情页下方显示相关留言。 | 目标明确,与上下文结合紧密。 | 需要配合 ~id~ 变量使用。 |
| SQL直接查询 | 需要复杂查询、联表、自定义排序等高级功能。 | 灵活性最高,功能最强大。 | 复杂且有风险,需要开发者具备较高技能。 |
| 调用留言板页面 | 创建一个独立的留言板页面。 | 最简单,无需编写任何代码。 | 只是跳转,不是内容内嵌。 |
给新手的建议:
优先使用 方法一 (
{dede:feedback},它能解决你90%的需求,如果需要调用某篇文章的留言,使用 方法二,只有在官方标签完全无法满足时,才考虑使用 方法三,并且一定要做好安全防护,创建独立留言板页面则使用 方法四。
