- 创建自定义表单:在后台创建一个表单,并设置好字段。
- 在前台页面展示表单:让用户可以填写并提交这个表单。
- 调用并展示已提交的数据:在需要的地方(如列表页、详情页)调用数据库中已存储的表单数据。
第一步:创建自定义表单
这是所有操作的基础,你需要先在 DedeCMS 后台定义好你的表单结构。

-
登录 DedeCMS 后台。
-
进入“核心” -> “频道模型” -> “自定义表单”。
-
点击 “增加自定义表单”。
-
填写表单信息:
(图片来源网络,侵删)- 表单名称:给你的表单起一个名字,在线报名”、“留言反馈”等,这个名字会生成对应的数据库表
dede_addonxx(xx是数字)。 - 表单提示:在表单上方给用户的说明文字。
- 默认表单模板:可以留空,我们通常直接在前台页面写 HTML。
- 列表模板:用于展示已提交数据的列表页模板。
- 发布模板:用于展示单条已提交数据的详情页模板(这个用得相对较少)。
- 返回页网址:用户提交成功后跳转的页面,可以留空,则会显示默认的成功提示。
- 表单名称:给你的表单起一个名字,在线报名”、“留言反馈”等,这个名字会生成对应的数据库表
-
点击“保存”,此时你已经创建了一个空的表单。
-
添加表单字段:
- 保存后,你会进入字段管理界面,点击 “增加字段”。
- 字段名:这是数据库中的字段名,只能用英文、数字和下划线,
name,tel,content。 - 字段提示:在前台表单中显示给用户的标签,您的姓名”、“联系电话”、“留言内容”。
- 字段类型:根据你的需求选择,常用的有:
text:单行文本textarea:多行文本select:下拉选择radio:单选按钮checkbox:复选框datetime:时间
- 字段参数:对于
select,radio,checkbox类型,在这里填写选项,用 "" 分隔,选项一|选项二|选项三。 - 是否显示:通常选择“是”,让这个字段在前台和后台都能看到。
- 其他选项:根据需要设置,如是否为必填项等。
- 点击“保存”。
重复此步骤,添加所有你需要的字段(如姓名、电话、邮箱、留言内容等)。
示例:我们创建一个名为“在线报名”的表单,包含 name (姓名), tel (电话), course (意向课程), qq (QQ号) 四个字段。

第二步:在前台页面展示表单并提交
创建好表单后,你需要在前台页面放置一个表单,让用户可以填写并提交数据。
- 进入“模板” -> “默认模板管理”。
- 找到你想要放置表单的模板文件(
index.htm,about.htm等),点击“修改”。 - 在模板的适当位置,插入以下 HTML 代码,DedeCMS 提供了便捷的标签
{dede:form}来生成表单。
<h2>在线报名</h2>
{dede:form name='myform' method='post'}
<input type="hidden" name="dopost" value="send" />
<input type="hidden" name="aid" value="0" />
<input type="hidden" name="mid" value="1" />
<p>
<label for="name">姓名:</label>
<input type="text" name="name" id="name" class="intext" />
</p>
<p>
<label for="tel">电话:</label>
<input type="text" name="tel" id="tel" class="intext" />
</p>
<p>
<label for="course">意向课程:</label>
<select name="course" id="course">
<option value="">请选择</option>
<option value="PHP开发">PHP开发</option>
<option value="网页前端">网页前端</option>
<option value="UI设计">UI设计</option>
</select>
</p>
<p>
<label for="qq">QQ号:</label>
<input type="text" name="qq" id="qq" class="intext" />
</p>
<p>
<label for="msg">留言内容:</label>
<textarea name="msg" id="msg" rows="5" cols="50"></textarea>
</p>
<p>
<input type="submit" name="submit" value="提交报名" class="btn" />
</p>
{/dede:form}
代码解析:
{dede:form name='myform' ...}:name属性对应你第一步创建的自定义表单名称。name="dopost" value="send":固定写法,表示执行“发送”操作。name="aid" value="0":aid是附加表ID,新创建的表单通常是0,如果不确定,可以在后台“自定义表单”列表中查看你的表单对应的aid。name="mid" value="1":mid是会员模型ID,1代表游客,如果需要会员登录后才能提交,可以修改此处。name="name",name="tel"等:这里的name属性必须和你第一步在后台设置的“字段名”完全一致。- 提交后,数据会自动保存到
dede_addonxx表中(xx是你的自定义表单ID)。
第三步:调用并展示已提交的数据
这是核心问题,调用数据主要有两种方式:列表页调用和详情页调用。
列表页调用(调用多条数据)
通常我们会创建一个专门的页面来展示所有报名信息,baoming.htm。
- 创建模板文件:在
/templets/default/目录下新建一个文件,list_baoming.htm。 - 编写模板代码:在这个文件中使用
{dede:arclist}或{dede:list}标签来调用数据。
注意:自定义表单的数据存储在附加表中,所以调用时需要指定附加表。
{dede:list pagesize='10' addfields='name,tel,course,qq,msg' channelid='1'}
<li>
<strong>姓名:</strong>[field:name /]
<strong>电话:</strong>[field:tel /]
<strong>课程:</strong>[field:course /]
<strong>QQ:</strong>[field:qq /]
<p>留言:[field:msg /]</p>
<p class="info">报名时间:[field:pubdate function="MyDate('Y-m-d H:i:s',@me)"/]</p>
</li>
{/dede:list}
<div class="dede_pages">
<ul>
{dede:pagelist listsize='4' iteminfo='共{total}条记录' listitem='info,index,end,pre,next,pageno'}
</ul>
</div>
代码解析:
{dede:list ...}:用于调用列表数据。pagesize='10':每页显示10条。addfields='name,tel,course,qq,msg':这是最关键的一步! 这里列出你想要从附加表中调出的所有字段名(用逗号分隔),这些字段必须在第一步中已经定义。channelid='1':这也是关键!channelid指定了要调用的频道模型ID,自定义表单的channelid通常是 1,你可以在后台“频道模型” -> “自定义表单”列表中查看你创建的表单对应的channelid。
[field:name /]:调用addfields中指定的字段内容。[field:pubdate ...]:调用发布时间,pubdate是系统自带的字段,所有附加表都有。{dede:pagelist ...}:分页标签,用于生成分页链接。
- 生成页面:
- 在后台“生成” -> “更新HTML” -> “更新自定义文档列表页”。
- 在页面中选择你刚刚创建的模板
list_baoming.htm,并设置好对应的自定义表单,然后点击“更新”即可生成静态页面。
详情页调用(调用单条数据)
如果你想在某个页面显示某一条报名记录的详细信息,可以使用 {dede:arclist} 或 {dede:field} 等标签。
场景:点击列表页中的某条记录,进入一个详情页查看。
-
列表页链接:在
list_baoming.htm中,给每条记录加上链接,并传递一个ID。{dede:list addfields='name,tel,course,qq,msg' channelid='1'} <li> <a href="detail_baoming.php?aid=[field:id/]">查看 [field:name] 的详细信息</a> </li> {/dede:list}[field:id/]:获取当前记录的ID。
-
创建详情页模板:在
/templets/default/目录下新建一个文件,detail_baoming.htm。 -
编写详情页代码:使用
{dede:arclist}或{dede:field}标签来根据URL传递的aid参数获取单条数据。方法A (推荐 - 使用arclist)
{dede:arclist addfields='name,tel,course,qq,msg' channelid='1' idlist='~aid~'} <h2>报名详情</h2> <p><strong>姓名:</strong> [field:name /]</p> <p><strong>电话:</strong> [field:tel /]</p> <p><strong>意向课程:</strong> [field:course /]</p> <p><strong>QQ:</strong> [field:qq /]</p> <p><strong>留言内容:</strong></p> <div>[field:msg /]</div> <p class="info">报名时间:[field:pubdate function="MyDate('Y-m-d H:i:s',@me)"/]</p> {/dede:arclist}idlist='~aid~':~aid~是一个特殊变量,DedeCMS会自动将其替换为URL中aid=后面的值,这样就实现了动态获取单条数据。
方法B (使用field标签)
{dede:field name='body'/} <!-- 这个通常用不到,除非你在后台设置了发布模板 --> <!-- 更常用的方式是直接通过SQL查询,但需要一定的PHP知识 --> <!-- 在模板中直接写PHP不推荐,可以通过自定义标签实现 --> -
生成页面:由于详情页是动态的(根据
aid参数变化),通常不需要手动生成静态页面,当用户访问detail_baoming.php?aid=123时,DedeCMS会动态解析并显示ID为123的记录。
总结与注意事项
- 字段名一致:前台表单的
name属性、后台的“字段名”、模板中调用的[field:xxx]必须完全一致。 channelid是关键:调用自定义表单数据时,channelid通常为1,请务必在后台确认你的表单对应的channelid。addfields是关键:在{dede:list}或{dede:arclist}中,必须用addfields指定要从附加表中调出的字段。- 数据安全:直接在前台展示用户提交的数据(如QQ、电话)有潜在的安全风险,请确保你的网站有良好的访问控制,或者对展示内容进行过滤。
- 后台管理:所有提交的数据都可以在后台“核心” -> “内容发布” -> “自定义表单管理”中查看、删除。
通过以上步骤,你就可以灵活地在 DedeCMS 中创建表单并调用展示其内容了。
