- 创建自定义表单:在前台通过表单让用户提交数据,并将数据保存到数据库中。
- 调用并显示数据:在后台模板文件(通常是列表页和内容页)中,通过SQL语句查询并显示数据库中保存的数据。
下面我将详细讲解这两个步骤,并提供完整的代码示例。

(图片来源网络,侵删)
第一步:创建自定义表单并提交数据
在调用数据之前,你必须先有一个可以提交数据的表单。
在后台创建自定义表单
-
登录你的DedeCMS后台。
-
在左侧菜单栏找到 “核心” -> “自定义表单”。
-
点击 “增加自定义表单”。
(图片来源网络,侵删) -
填写表单信息:
- 表单名称:给你的表单起一个名字,在线报名”、“留言反馈”等,这个名字会生成数据表的前缀,如
dede_addonexample。 - 数据表:系统会自动根据表单名称生成,如
dede_addon18(数字是随机的),一般无需修改。 - 列表模板:设置用于展示所有提交记录的页面模板。
- 发布模板:设置用户提交成功后跳转到的页面模板。
- 默认排序:设置后台数据列表的默认排序方式,通常是按
id降序。
- 表单名称:给你的表单起一个名字,在线报名”、“留言反馈”等,这个名字会生成数据表的前缀,如
-
添加表单字段:
- 点击下方的 “添加字段”。
- 字段名:数据库中的字段名,只能使用英文、数字和下划线,
name,tel,content。 - 字段提示:在前台表单中显示给用户的提示文字,您的姓名”、“联系电话”、“留言内容”。
- 字段类型:根据需要选择,如
文本框(text)、多行文本(textarea)、单选(radio)、多选(checkbox)、下拉(select)等。 - 字段值:对于单选、多选、下拉等类型,在这里填写选项,用逗号分隔,
男,女。 - 是否必填:设置该字段是否为必填项。
- 后台列表显示:勾选此项,该字段将显示在后台的数据管理列表中。
- 其他选项:如默认值、最大长度等,根据需要设置。
-
完成所有字段添加后,点击 “保存” 或 “保存并生成表单页面”,系统会自动创建数据表。
生成前台表单页面
创建表单后,DedeCMS可以自动生成一个包含表单代码的HTML页面。
- 在“自定义表单”管理页面,找到你刚刚创建的表单。
- 在操作栏点击 “选择” -> “生成表单页面”。
- 选择一个模板(可以使用默认的),点击“生成”。
- 生成后,你可以在网站的前台访问这个页面,就能看到一个可以提交数据的表单了。
生成的表单代码示例:
<form name='myform' action='/plus/diy.php' enctype='multipart/form-data' method='post'>
<input type='hidden' name='action' value='post' />
<input type='hidden' name='diyid' value='1' /> <!-- 1 是你的自定义表单ID -->
<input type='hidden' name='do' value='2' />
<p>您的姓名:<input type='text' name='name' id='name' class='int' /></p>
<p>联系电话:<input type='text' name='tel' id='tel' class='int' /></p>
<p>留言内容:<textarea name='content' id='content' rows='5' cols='50'></textarea></p>
<p><input type='submit' name='submit' value='提交' class='btn' /></p>
<input type='hidden' name='dede_fields' value='name,text;tel,text;content,textarea' />
<input type='hidden' name='dede_fieldshash' value='b6e4a4e2e8a3f0c9a3e1a3f0c9a3e1a3' /> <!-- 这个hash值会变,不要手动改 -->
</form>
第二步:调用自定义表单的数据
数据提交后,都保存在 dede_addonX (X是数字) 这张表里,我们需要在模板中使用 {dede:sql} 标签来查询和显示这些数据。
核心标签:{dede:sql}
{dede:sql} 是DedeCMS执行原生SQL查询的标签。
基本语法:
{dede:sql sql='查询语句'}
// 循环输出内容
[field:字段名/]
{/dede:sql}
在列表页(如首页、列表页)调用数据
假设我们要在首页展示最新的5条报名信息。
-
找到你的数据表名:
- 进入后台“自定义表单”,点击你创建的表单进入管理。
- 在顶部可以看到数据表名,
数据表:dede_addon18。
-
编写SQL查询语句:
- 我们需要查询
dede_addon18这张表。 - 为了安全,最好加上
arcrank > -1的条件,这可以过滤掉被管理员删除或审核未通过的数据(虽然自定义表单默认没有这个字段,但加上是好习惯)。 - 按主键
id降序排列,并限制只查询5条。
- 我们需要查询
-
在模板中插入代码: 打开你想要显示数据的模板文件(
index.htm),在合适的位置插入以下代码:
<h3>最新报名信息</h3>
<ul>
{dede:sql sql='SELECT * FROM `dede_addon18` WHERE arcrank > -1 ORDER BY id DESC LIMIT 0,5'}
<li>
姓名:[field:name/] |
电话:[field:tel/] |
时间:[field:posttime function="MyDate('Y-m-d H:i:s',@me)"/]
</li>
{/dede:sql}
</ul>
代码解析:
sql='...':里面是完整的SQL查询语句。FROM dede_addon18:替换成你自己的数据表名。LIMIT 0,5:从第0条开始,查询5条。LIMIT 5也可以。[field:name/]:循环输出name字段的内容。[field:posttime function="MyDate('Y-m-d H:i:s',@me)"/]:posttime是DedeCMS默认添加的时间字段,使用function对其进行格式化,显示为年-月-日 时:分:秒的格式。
分页调用自定义表单数据
如果数据量很大,需要分页显示,可以使用 {dede:sql} 的 pagesize 属性。
-
编写带分页的SQL语句: 我们需要用
COUNT(*)来获取总记录数,用于分页。 -
在模板中插入代码: 通常我们会创建一个专门的列表页模板,
list_bm.htm。
<h3>所有报名信息</h3>
<!-- 循环输出列表数据 -->
<ul>
{dede:sql sql='SELECT * FROM `dede_addon18` WHERE arcrank > -1 ORDER BY id DESC' pagesize='10'}
<li>
姓名:[field:name/] |
电话:[field:tel/] |
时间:[field:posttime function="MyDate('Y-m-d H:i:s',@me)"/]
</li>
{/dede:sql}
</ul>
<!-- 分页链接 -->
<div class="dede_pages">
<ul>
<li><span class="pageinfo">共 <strong>{dede:sql sql='SELECT COUNT(*) as c FROM `dede_addon18` WHERE arcrank > -1'}[field:c/]{/dede:sql}</strong> 条记录</span></li>
{dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'}
</ul>
</div>
代码解析:
{dede:sql ... pagesize='10'}:pagesize属性指定每页显示10条记录。{dede:pagelist ...}:这是DedeCMS的分页标签,它会自动处理上一页、下一页、页码等逻辑,它依赖于{dede:sql}中的pagesize属性。- 注意:分页的总数查询
{dede:sql sql='SELECT COUNT(*) as c FROM ...'}是必须的,它为分页系统提供总数据量。
重要注意事项
- 数据表名:
dede_addonX中的X是随机生成的,每次创建新表都可能不同,务必进入后台“自定义表单”管理页面确认你的准确表名。 - 字段名:SQL查询中使用的字段名必须和你在后台添加字段时填写的“字段名”完全一致,区分大小写。
- 安全性:直接使用
{dede:sql}执行SQL有一定风险,如果SQL语句被恶意篡改可能导致数据泄露,请确保你的网站没有SQL注入漏洞,并且只从可信的地方获取SQL语句,不要在前台让用户可以任意提交SQL。 arcrank字段:虽然自定义表单默认没有arcrank字段,但DedeCMS的很多底层查询都会带上WHERE arcrank > -1这个条件,加上它可以避免一些潜在的意外问题,如果你的数据表里确实没有这个字段,数据库会忽略它,所以加上也无妨。- 调试:如果数据显示不出来,最有效的调试方法是用
var_dump或print_r输出查询结果。{dede:sql sql='SELECT * FROM `dede_addon18` LIMIT 1'} <pre> <?php $arr = $GLOBALS['dsql']->GetArray(); print_r($arr); ?> </pre> {/dede:sql}这会打印出第一条记录的所有字段和值,帮助你确认表名、字段名和数据是否正确。
通过以上步骤,你就可以灵活地在DedeCMS的任何地方调用和展示自定义表单的数据了。
