织梦自定义表单收集到的留言、报名、反馈数据,除了在后台查看,更多场景是要展示到网站前台,例如做成留言板、客户评价墙、报名公示页。围绕"织梦如何调用自定义表单数据"这一问题,本文梳理 loop 标签、sql 标签、独立 PHP 调用三种主流方式,并给出字段格式化、分页、权限控制的实战写法。
一、调用前的准备工作
调用自定义表单数据前,必须先确认两个关键信息:
- 表单对应的数据表名,通常为
dede_diyform1、dede_diyform2,可在"自定义表单 - 修改"页面查看 - 表单的字段标识,例如
name、tel、message、createtime、ifcheck,前台调用时按字段名输出
同时建议在"系统基本参数 - 性能选项"中关闭模板缓存或设置较短缓存时间,避免新提交数据延迟展示。
二、使用 loop 标签调用
loop 是织梦内置的通用数据调用标签,适合结构简单、不需要复杂 SQL 的场景。在模板文件中加入:
{dede:loop table='dede_diyform1' sort='id' row='10' if='ifcheck=1'}
<li class="msg-item">
<span class="u">[field:name/]</span>
<span class="t">[field:tel/]</span>
<p>[field:message function="cn_substr(@me,80)"/]</p>
<em>[field:createtime function="MyDate('Y-m-d H:i',@me)"/]</em>
</li>
{/dede:loop}
关键参数说明:
table:表单数据表名,不要写错前缀row:调用条数if:过滤条件,ifcheck=1表示只调已审核数据function:对字段做格式化,MyDate转时间格式,cn_substr截取长度
三、使用 sql 标签调用
当调用逻辑较复杂,例如多条件筛选、联表查询时,sql 标签更灵活:
{dede:sql sql="SELECT name,tel,message,createtime FROM dede_diyform1 WHERE ifcheck=1 AND name<>'' ORDER BY createtime DESC LIMIT 10"}
<div class="item">
<h4>[field:name function="htmlspecialchars(@me)"/]</h4>
<p>[field:message function="Text2Html(@me)"/]</p>
<span>[field:createtime function="GetDateTimeMK(@me)"/]</span>
</div>
{/dede:sql}
前台展示用户提交内容时,务必使用
htmlspecialchars 或 Text2Html 转义,防止 XSS 注入。四、分页调用大量数据
留言数据较多时,建议用独立的 PHP 页面配合织梦分页类实现分页。新建 msglist.php 放到网站根目录:
require_once(dirname(__FILE__).'/include/common.inc.php');
require_once(DEDEINC.'/datalistcp.class.php');
$dlist=new DataListCP();
$dlist->pageSize=15;
$dlist->SetParameter('typeid', $typeid);
$dlist->SetSource('SELECT * FROM dede_diyform1 WHERE ifcheck=1 ORDER BY id DESC');
$dlist->Display('templets/msglist.htm');
模板 msglist.htm 中用 {dede:datalist} 输出记录,{dede:pagelist/} 输出分页导航。
五、注意事项
调用前先确认数据库前缀,迁移站点后需同步修改表名。
展示用户内容时务必过滤敏感字段,例如不要把手机号完整显示,可用
substr_replace 中间打码。分页页面前台访问建议开启伪静态,避免动态参数过多影响收录。
六、后续优化方向
掌握织梦如何调用自定义表单数据后,可以把表单数据接入到首页推荐位、栏目侧栏、专题页等更多入口,让用户产生的优质内容流动起来。对于留言板类页面,建议结合点赞、回复功能做成轻量社区,提升访客停留时长。同时把已审核数据同步推送到企业微信或飞书群,让运营第一时间感知用户反馈,把静态展示升级为实时互动,让自定义表单真正服务于业务增长。