dede 自定义表单 查询

99ANYc3cd6
预计阅读时长 23 分钟
位置: 首页 DEDE建站 正文

DedeCMS 的自定义表单功能非常强大,但默认的前台提交和后台管理(在“自定义表单”栏目下)对于数据展示和二次开发来说比较有限,我们需要在网站的前台页面(如列表页、详情页)中查询并展示这些表单数据。

dede 自定义表单 查询
(图片来源网络,侵删)

主要有以下几种查询场景和方法:


在后台直接查看和管理数据(最简单)

这是最基础的方式,适用于管理员直接查看所有提交的记录。

  1. 登录 DedeCMS 后台
  2. 在左侧菜单栏找到 “核心” -> 发布” -> “自定义表单”
  3. 点击进入后,你会看到所有你创建的自定义表单列表。
  4. 找到你想要查询的那个表单,点击后面的 “管理” 按钮。
  5. 你可以看到所有用户提交的数据,默认会按提交时间倒序排列。
    • 筛选:通常顶部会有一个简单的筛选框,可以按 aid(主键ID)或 ip(提交IP)进行快速查找。
    • 排序:点击列表头部的字段名(如 dtime)可以进行升序或降序排序。
    • 搜索:这个自带的搜索功能很弱,只能按ID或IP搜,无法按内容搜,如果需要更强大的后台搜索,通常需要修改程序或使用第三方插件。

优点:无需任何代码,直接可见。 缺点:功能有限,无法在前台展示,不适合大量数据的筛选。


在前台页面以列表形式展示所有数据(最常用)

这是最常见的用法,比如做一个“在线留言”列表页、“人才招聘”申请列表页等。

dede 自定义表单 查询
(图片来源网络,侵删)

实现这个功能需要修改一个模板文件:/templets/default/list_表单id.htm

步骤:

  1. 获取你的表单 id: 登录后台,进入“自定义表单”,鼠标悬停在你需要查询的表单“管理”链接上,浏览器状态栏会显示类似 dede/plus/List.php?aid=1 的链接,这里的 aid=1 中的 1 就是你的表单 id

  2. 创建或修改模板文件: 在你的模板文件夹 /templets/default/ 下,创建一个名为 list_你的表单id.htm 的文件,如果你的表单id是 5,就创建 list_5.htm

  3. 编写模板代码: 在 list_5.htm 文件中,使用 DedeCMS 的 dede:list 标签进行循环查询。dede:list 的底层循环变量和 arclist 类似,但主要针对自定义表单的数据。

    示例代码 (list_5.htm):

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>我的留言列表</title>
    </head>
    <body>
        <h1>用户留言列表</h1>
        {dede:list pagesize='10' titlelen='50'}
            <!-- 
                dede:list 标签用于循环查询自定义表单数据。
                pagesize='10' 表示每页显示10条数据。
                titlelen='50' 表示标题字符截取长度(如果你的表单有标题字段的话)。
            -->
            <div class="msg-item">
                <!-- 
                    循环变量说明:
                    [field:id]           -> 当前记录的ID (aid)
                    [field:title]        -> 当前记录的标题字段 (如果你的表单有名为'title'的字段)
                    [field:uname]        -> 当前记录的姓名字段 (如果你的表单有名为'uname'的字段)
                    [field:email]        -> 当前记录的邮箱字段
                    [field:content]      -> 当前记录的内容字段 (如果你的表单有名为'content'的字段)
                    [field:ip]           -> 提交时的IP地址
                    [field:dtime]        -> 提交时间,格式为 Unix 时间戳,需要用函数处理
                -->
                <h3>姓名:[field:uname/]</h3>
                <p>邮箱:[field:email/]</p>
                <p>留言内容:[field:content/]</p>
                <p>提交时间:[field:function.fmtdate('@me','%Y-%m-%d %H:%M:%S')/]</p>
                <hr>
            </div>
        {/dede:list}
        <!-- 分页标签 -->
        <div class="page">
            {dede:pagelist listsize='5' listitem='info,index,end,pre,next,pageno'}
            </div>
    </body>
    </html>
  4. 访问页面: 访问 你的域名/plus/list.php?aid=你的表单id 即可看到效果。http://www.yoursite.com/plus/list.php?aid=5

要点

  • 底层字段[field:字段名/] 中的“字段名”必须和你后台自定义表单中添加的字段名完全一致(区分大小写)。
  • 时间格式化[field:dtime] 默认输出时间戳,必须用 [field:function.fmtdate('@me','%Y-%m-%d')/] 这样的方式来格式化显示。
  • 分页{dede:pagelist} 标签是实现分页的关键,{dede:list} 会自动处理分页逻辑。

在前台页面查询并展示单条数据详情

比如用户提交留言后,点击查看自己的留言详情;或者在招聘网站点击查看某个职位的详细信息。

这需要使用 dede:sql 标签,通过 GET 传值来获取指定 ID 的数据。

步骤:

  1. 创建模板文件: 创建一个名为 msg_detail.htm 的文件。

  2. 编写模板代码: 使用 dede:sql 标签直接执行 SQL 查询。

    示例代码 (msg_detail.htm):

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>留言详情</title>
    </head>
    <body>
        <h1>留言详情</h1>
        {dede:sql sql="SELECT * FROM `dede_addon5` WHERE id = ~aid~"}
            <!-- 
                dede:sql 标签用于执行自定义SQL语句。
                1. `dede_addon5` 是自定义表单的数据表名,规则是 `dede_addon + 你的表单id`,例如id为5的表单,数据表就是 `dede_addon5`。
                2. `id = ~aid~` 是关键,`aid` 是一个默认的变量,代表通过URL传递过来的 `aid` 值。
                   访问 ?aid=123,这里的 `~aid~` 就会被替换成 123。
                   注意:`~` 是 DedeCMS 对 GET 变量的一种安全封装方式。
                3. 如果查询结果有多条,需要用 {dede:datalist} 循环,但这里我们查询单条,所以直接使用 {dede:sql} 即可。
            -->
            <div class="detail-item">
                <h2>标题:[field:title/]</h2>
                <p>姓名:[field:uname/]</p>
                <p>电话:[field:tel/]</p>
                <p>邮箱:[field:email/]</p>
                <p>详细内容:</p>
                <div class="content">[field:content/]</div>
                <p>提交时间:[field:function.fmtdate('@me','%Y-%m-%d %H:%M:%S')/]</p>
                <p>IP地址:[field:ip/]</p>
            </div>
        {/dede:sql}
        <!-- 如果查询不到数据,可以显示提示 -->
        <div class="not-found">
            抱歉,未找到指定的留言信息!
        </div>
    </body>
    </html>
  3. 访问页面: 访问 你的域名/plus/msg_detail.htm?aid=123 (将 123 替换为你要查看的记录ID)。

要点

  • 数据表名dede_addon表单id 这个规则一定要找对。
  • 变量传递~aid~ 是 DedeCMS 获取 GET 参数的标准方式,比直接用 $aid 更安全。
  • 安全性:直接使用 dede:sql 有一定的 SQL 注入风险。aid 值来自用户输入,最好在程序中做一次强制类型转换(如 intval()),或者确保你的网站有足够的安全防护。

带条件查询的前台列表(高级)

比如做一个留言板,可以根据姓名或留言内容进行搜索。

这需要结合 dede:list 和自定义的 SQL 查询来实现。

方法:修改 list_表单id.htm

  1. 在模板中添加搜索表单: 在 {dede:list} 标签之前,添加一个 HTML 表单,用于接收用户的搜索关键词。

    <form action="/plus/list.php" method="get">
        <input type="hidden" name="aid" value="你的表单id" />
        <input type="text" name="keyword" placeholder="请输入关键词搜索" />
        <button type="submit">搜索</button>
    </form>
  2. 修改 dede:list: dede:list 本身不支持复杂的条件查询,但我们可以利用它的 sql 属性(如果版本支持)或者通过修改 include/arc.listview.class.php 文件来实现,这里我们介绍一种更简单但需要修改一点PHP文件的方法(不推荐新手直接修改文件,这里仅作原理说明)。

    更推荐的做法(通过修改PHP文件): 你需要修改 include/arc.listview.class.php 文件,在 ParseSql() 函数中增加对自定义查询参数的判断,这需要一定的 PHP 开发能力。

    相对简单的替代方案(使用 dede:sql 手动分页): 如果不想修改核心文件,可以完全用 dede:sql + dede:pagelist 自己实现分页逻辑,但这更复杂。

    一个折中的“伪”查询方法(前端过滤): 这种方法不真正在数据库查询,而是把所有数据查出来,然后用 JavaScript 在前端进行过滤。缺点是数据量大时页面会卡顿,不推荐。

鉴于其复杂性,对于带条件查询的需求,最规范的方法还是修改 arc.listview.class.php 文件或在程序中用 PHP 直接查询数据库并赋值给模板。

查询场景 实现方法 核心标签/文件 优点 缺点
后台管理 后台直接操作 后台 -> 自定义表单 无需代码,简单直接 功能弱,无法前台展示
前台列表 创建专用模板 list_x.htm + {dede:list} 简单,标准,支持分页 条件查询能力弱
前台详情 SQL单条查询 详情页.htm + {dede:sql} 灵活,可获取任意单条数据 需要知道数据表名,有安全风险
前台条件查询 修改核心文件或PHP查询 arc.listview.class.php 或自定义PHP 功能强大,灵活 需要开发能力,有修改核心文件的风险

对于大多数用户来说,场景二和场景三已经能满足 90% 的需求,在开始之前,请务必备份你的网站文件和数据库,以防操作失误。

-- 展开阅读全文 --
头像
C语言中continue语句的具体用法有哪些?
« 上一篇 02-12
C语言中true和false如何表示?
下一篇 » 02-12

相关文章

取消
微信二维码
支付宝二维码