Dedecall调用DZ3.1精华帖,为何主页不显示?

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

问题核心分析:为什么主页不显示?

在动手之前,我们先理解一下原因,这样能更快定位问题:

dede调用dz3.1的精华帖 主页不显示
(图片来源网络,侵删)
  1. 权限问题 (最常见):Discuz! 的精华帖数据表 (pre_forum_thread) 中,有一个字段 displayorderdisplayorder = 0 是普通帖子,displayorder > 0 是精华帖,但Discuz! 还有一个 isgroup 字段,如果你的论坛有“小组”功能,小组内的精华帖 isgroup 可能不为0,DedeCMS默认调用时,可能没有正确处理这些分组或权限,导致查询结果为空。
  2. 数据范围问题:你可能在调用时,无意中加上了某些限制条件,比如只调用某个特定版块的精华帖,而主页所在的栏目下没有符合条件的帖子。
  3. 缓存问题:DedeCMS有强大的缓存机制,有时候你修改了代码,但页面没有更新,导致还是显示旧的结果(空白)。
  4. PHP版本/环境问题:如果你的PHP版本较低,可能不支持 JOIN 等较为复杂的SQL查询语法。

解决方案

使用DedeCMS自带的“数据调用”标签(推荐新手)

这是最简单、最安全的方法,不需要写复杂的SQL语句。

  1. 进入后台:登录你的DedeCMS后台。

  2. 找到数据调用:在左侧菜单栏找到 核心 -> 数据调用

  3. 新建调用

    dede调用dz3.1的精华帖 主页不显示
    (图片来源网络,侵删)
    • 名称:随便起一个,调用DZ精华帖”。
    • 按SQL语句查询:选择这个选项。
    • SQL语句:这是关键,复制并粘贴下面的代码:
    SELECT tid, subject, fid, author, postdatetime
    FROM dede_forum_thread
    WHERE displayorder > 0
    ORDER BY dateline DESC
    LIMIT 0, 10
    • 字段说明
      • tid: 帖子ID。
      • subject: 帖子标题。
      • fid: 版块ID,如果你想指定版块,可以加上 AND fid = '你的版块ID'
      • author: 作者。
      • postdatetime: 发布时间。
      • displayorder > 0: 精华帖的核心筛选条件,表示只调用精华帖。
      • ORDER BY dateline DESC: 按发布时间倒序排列,最新的在前。
      • LIMIT 0, 10: 从第0条开始,获取10条,你可以修改数字来调整显示数量。
    • 模板:填写调用后显示的HTML代码。
    [field:subject/]
    • 缓存:可以设置一个缓存时间,3600 (1小时)。
  4. 保存:点击“新增”或“保存”按钮。

  5. 在前台使用:现在你可以在任何DedeCMS的模板文件(如 index.htm)中使用这个标签:

    {dede:loop table='dede_forum_thread' sort='dateline' row='10' if='displayorder>0'}
        <a href="/bbs/viewthread.php?tid=[field:tid/]">[field:subject/]</a>
    {/dede:loop}

    注意:这里的 {dede:loop} 标签是直接使用你刚才在后台设置的SQL,你也可以直接在模板里写完整的SQL,但后台管理更方便。


手动编写SQL(更灵活)

如果你对SQL比较熟悉,可以直接在模板文件里写。

  1. 打开模板文件:用FTP或后台编辑器打开你想要显示精华帖的模板文件,index.htm

  2. 插入代码:在合适的位置插入以下代码:

    <h3>论坛精华帖</h3>
    <ul>
        {dede:sql sql="SELECT tid, subject, fid, author FROM dede_forum_thread WHERE displayorder > 0 ORDER BY dateline DESC LIMIT 0,10"}
            <li>
                <a href="/bbs/viewthread.php?tid=[field:tid/]" target="_blank">[field:subject/]</a>
                <span class="author">- [field:author/]</span>
            </li>
        {/dede:sql}
    </ul>
  3. 代码解释

    • {dede:sql ...}:DedeCMS执行自定义SQL的标签。
    • sql="...":里面是完整的SQL查询语句。
    • [field:tid/], [field:subject/]:循环输出查询结果的每个字段。
    • /bbs/viewthread.php?tid=请务必修改成你的Discuz!论坛的帖子链接地址,默认是 /bbs/,如果你的不是,请相应修改。
  4. 保存并更新:保存文件,然后到DedeCMS后台的“主页” -> “更新主页”,生成新的HTML页面。


使用“runphp”进行更复杂的逻辑处理(高级)

如果你的需求更复杂,比如需要同时获取版块名称,或者进行权限判断,可以使用runphp

<h3>论坛精华帖</h3>
<ul>
    {dede:sql sql="SELECT t.tid, t.subject, t.author, t.dateline, f.name as forumname FROM dede_forum_thread t LEFT JOIN dede_forum_forum f ON t.fid = f.fid WHERE t.displayorder > 0 ORDER BY t.dateline DESC LIMIT 0,10"}
        <li>
            <a href="/bbs/viewthread.php?tid=[field:tid/]" target="_blank">[field:subject/]</a>
            <span class="info">
                ([field:forumname/]) - [field:author/] 于 [field:function="MyDate('Y-m-d', @me)"/]
            </span>
        </li>
    {/dede:sql}
</ul>

这个例子增加了 LEFT JOIN 来关联版块表,并使用 field:function="MyDate(...)" 来格式化时间。


故障排查:如果还是不显示,怎么办?

如果按照上面的方法做了,但页面依然是空白的,请按以下步骤检查:

  1. 检查表前缀

    • 登录你的Discuz!后台,在“数据库” -> “数据库恢复”页面,可以看到你的表前缀,很可能是 pre_
    • 在你的SQL语句中,表名必须使用这个前缀,pre_forum_thread,如果你不确定,就去DedeCMS后台的“系统” -> “数据库备份/恢复”里查看你的数据库表名。
  2. 检查权限

    • 确保你的DedeCMS连接数据库的账号,有权限读取 pre_forum_thread 这张表,99%的情况下是没问题的,但可以确认一下。
  3. 清除缓存

    进入DedeCMS后台,点击“系统” -> “一键更新网站” -> “更新缓存”,有时候旧的缓存会干扰新数据的显示。

  4. 简化查询

    • 把你的SQL语句简化到极致,先确保能查出数据。
    • 测试SQL:你可以直接在phpMyAdmin(你的数据库管理工具)里运行这个最简单的SQL:
      SELECT tid, subject FROM pre_forum_thread LIMIT 10;

      如果能查出数据,说明表和连接没问题,如果查不出,说明表名或前缀错了。

    • 再加条件
      SELECT tid, subject FROM pre_forum_thread WHERE displayorder > 0 LIMIT 10;

      如果这个查询结果为空,说明你的论坛里目前确实没有精华帖(displayorder都为0),可以去你的Discuz!后台手动加几个精华帖再测试。

  5. 检查PHP错误

    • 如果你的SQL语法有问题(比如用了不支持的JOIN),PHP可能会报错,但DedeCMS默认不显示错误,你可以临时开启PHP错误显示来排查。
    • 在你的模板文件最开头加上:
      <?php
      ini_set('display_errors', 1);
      error_reporting(E_ALL);
      ?>

      这样如果有PHP错误,页面就会直接显示出来,方便你定位问题。

对于大多数用户,方案一(后台数据调用) 是最简单有效的,如果不行,再尝试方案二(直接在模板写SQL),并重点检查 表前缀 和 **SQL查询本身

-- 展开阅读全文 --
头像
dede likearticleyuanli
« 上一篇 11-27
dede5.7仿图片素材下载模板网源码哪里有?
下一篇 » 11-27

相关文章

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

目录[+]