dede loop自定义表单为何不显示?

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

问题根源分析

{dede:loop} 标签主要用于在指定范围内循环文档(通常是文章、图集等),它的基本语法是:

dede loop 自定义表单不显示
(图片来源网络,侵删)
{dede:loop table='dede_archives' sort='id' row='10' if=''}
    <a href="[field:arcurl/]">[field:title/]</a>
{/dede:loop}

要让它显示自定义表单的数据,你需要修改 tablefield 参数,问题通常出在以下几个地方:

  1. 数据表名错误:自定义表单的数据默认存储在 dede_addonxx 表中(xx 是表单ID,如 dede_addon18),而不是主表 dede_archives
  2. 字段名错误或不匹配{dede:loop} 内部的 [field:字段名/] 必须与你查询的数据表中的字段名完全一致,包括大小写。
  3. 查询条件 (if) 错误:如果表单数据关联了特定栏目或文档,你需要正确的 if 条件来筛选出你想要的数据。
  4. 数据为空:可能你的自定义表单里根本没有提交任何数据。
  5. 权限问题:虽然不常见,但有时服务器或数据库权限也可能导致查询失败。

解决方案(由简到繁)

直接查询自定义表单数据(最常用)

这是最直接的方法,不通过主表,直接查询你的自定义表单数据。

操作步骤:

  1. 找到你的数据表名

    dede loop 自定义表单不显示
    (图片来源网络,侵删)
    • 登录你的网站后台。
    • 进入【核心】->【内容模型管理】->【自定义表单管理】。
    • 找到你想要调用的那个自定义表单,点击后面的“管理”按钮。
    • 在浏览器地址栏中,你会看到一个类似 dede/addon18.php 的链接,这里的 addon18 就是你数据表的前缀,你的完整表名就是 **dede_addon18**(如果你的表前缀是 dede 的话),记下这个完整的表名。
  2. 编写 {dede:loop}

    • 在你需要显示表单数据的模板文件(通常是 .htm 文件)中,使用以下代码:
    <h3>用户反馈列表</h3>
    <ul>
      {dede:loop table='dede_addon18' sort='id' row='10' if ''}
        <li>
          <!-- 'uname' 和 'content' 是我假设的字段名,请替换成你自己的 -->
          用户:[field:uname/]  |  反馈内容:[field:content/]  |  时间:[field:uptime function="MyDate('Y-m-d H:i:s',@me)"/]
        </li>
      {/dede:loop}
    </ul>
  3. 代码解释

    • table='dede_addon18'关键! 替换成你自己的自定义表数据表名。
    • sort='id':按 id 降序排列,这样最新的数据会显示在最前面,你也可以用 sort='id desc'
    • row='10':显示10条数据。
    • if='':这里可以写查询条件,if='ischeck=1'(只显示已审核的),如果不需要条件就留空。
    • [field:字段名/]关键! 字段名 必须和 dede_addonxx 表里的字段名完全一样,如果你的表单里有个“姓名”输入框,数据库里对应的字段可能是 unamenamexingming,你需要去数据库里确认。
    • [field:uptime function="MyDate('Y-m-d H:i:s',@me)"/]uptime 是提交时间字段,function="MyDate(...)" 是一个函数,用于将时间戳格式化为更易读的日期格式,如果你的时间字段名不是 uptime,请修改它。

关联主表和附加表(高级用法)

如果你的自定义表单提交时,选择了关联到某个栏目(通过勾选“自定义表单内容默认发布到以下栏目”),那么数据会同时写入 dede_archivesdede_addonxx,这种情况下,你可能需要同时获取文章标题和表单内容。

操作步骤:

dede loop 自定义表单不显示
(图片来源网络,侵删)
  1. 确定关联关系

    • 假设你的自定义表单数据在 dede_addon18
    • 它关联的文章在 dede_archives
    • 关联字段是 aid(文章ID)。
  2. 编写 {dede:loop}

    • 你需要使用 JOIN 查询来连接两个表。
    <h3>关联文章的反馈列表</h3>
    <ul>
      {dede:loop table='dede_archives a JOIN dede_addon18 d ON a.id=d.aid' sort='a.id' row='10' if='a.arcrank > -1'}
        <li>
          <!-- a. 前缀表示 dede_archives 表的字段 -->
          <a href="[field:arcurl/]">[field:title/]</a>
          <!-- d. 前缀表示 dede_addon18 表的字段 -->
          <p>反馈人:[field:d.uname/]</p>
          <p>反馈内容:[field:d.content/]</p>
        </li>
      {/dede:loop}
    </ul>
  3. 代码解释

    • table='dede_archives a JOIN dede_addon18 d ON a.id=d.aid':这是SQL的 JOIN 语句。
      • dede_archives a:给 dede_archives 表起一个别名 a
      • JOIN dede_addon18 d:连接 dede_addon18 表,并起别名 d
      • ON a.id=d.aid:连接条件,a 表的 id 等于 d 表的 aid
    • [field:a.title/]:使用 a. 前缀来获取 dede_archives 表的 title 字段(文章标题)。
    • [field:d.uname/]:使用 d. 前缀来获取 dede_addon18 表的 uname 字段(表单里的用户名)。

使用 dede_sql 标签(更灵活)

{dede:loop} 的语法让你觉得不够灵活,你可以使用功能更强大的 {dede:sql} 标签,它可以直接执行任何SQL语句。

操作步骤:

  1. 编写SQL查询语句

    • 假设还是查询方案一的 dede_addon18 表。
  2. 编写 {dede:sql}

    <h3>使用SQL标签调用反馈</h3>
    <ul>
      {dede:sql sql="SELECT id, uname, content, uptime FROM dede_addon18 ORDER BY id DESC LIMIT 10"}
        <li>
          ID:[field:id/] | 用户:[field:uname/] | 内容:[field:content/]
          <!-- 使用function处理时间 -->
          时间:[field:uptime function="MyDate('Y-m-d',@me)"/]
        </li>
      {/dede:sql}
    </ul>
  3. 代码解释

    • {dede:sql sql='...'}:直接在里面写你的SQL查询语句。
    • SELECT id, uname, content, uptime FROM ...:明确指定你需要的字段,这是一种好习惯。
    • ORDER BY id DESC LIMIT 10:按ID降序排序,并限制只返回10条结果。
    • [field:字段名/]:用法和 {dede:loop} 一样,直接使用SQL查询返回的字段名。

调试技巧:如果还是不显示怎么办?

如果按照上述方法修改后依然没有数据,请按以下步骤排查:

  1. 检查数据:100%确定你的自定义表单里已经有提交的数据,可以去后台的自定义表单管理里看看。
  2. 检查字段名:这是最最容易出错的地方!务必登录你的phpMyAdmin,打开对应的 dede_addonxx 数据表,查看表结构,确认你写的 [field:字段名/] 中的“字段名”是否100%正确(包括大小写)
  3. 检查模板缓存:修改完模板后,去后台【生成】->【更新主页HTML】或【更新栏目HTML】,清空一下缓存,或者直接在浏览器中强制刷新 Ctrl + F5
  4. 检查服务器错误:如果PHP代码有语法错误,服务器会返回500错误,可以打开服务器的错误日志查看,或者在页面最开头加上 <?php phpinfo(); ?> 来测试PHP是否正常执行。
  5. 简化测试:先把 row 设置为 1if 条件留空,只调用一个最简单的字段(id),看看是否能出来,如果能,再逐步增加字段和条件,定位到是哪个部分出了问题。
场景 推荐标签 关键点
仅显示自定义表单本身的数据 {dede:loop} 正确填写 table='dede_addonxx'
2. 正确填写 [field:字段名/]
需要关联文章标题等信息 {dede:loop} + JOIN 学会使用 JOIN 语法连接主表和附加表
2. 使用表别名前缀(如 a.title, d.content
需要复杂查询或排序 {dede:sql} 直接编写完整的SQL语句
2. 语法更灵活,功能更强

对于大多数情况,方案一 就足够解决问题了,如果方案一不行,再尝试方案三进行调试,希望这些信息能帮你解决问题!

-- 展开阅读全文 --
头像
dede后台如何上传网站源代码?
« 上一篇 昨天
织梦后台栏目空白咋回事?
下一篇 » 昨天

相关文章

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