找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 116|回复: 0

[维护日志] [2026-07-03] [运维] [首页四格排除特定主题] - 从首页四格中移除新手引导帖

[复制链接]
  • 打卡等级:本地老炮

9336

威望

6834

金钱

1万

贡献

管理员

自由的灵魂

积分
106767
主题
5593
回帖
26603
注册时间
2003-4-10
最后登录
2026-8-8
发表于 2026-7-3 17:08:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
[2026-07-03] [运维] [首页四格排除特定主题] - 从首页四格中移除新手引导帖

标签:首页四格 帖子排除 代码修改 论坛优化

1、问题缘起

论坛将 tid=95959 的帖子作为新手任务引导帖,持续置顶在《灌水乐园》版块。该帖子长期存在于首页四格(最新回复、热门主题)中,占据宝贵的展示位置,影响其他正常讨论帖的曝光。若直接在后台屏蔽整个《灌水乐园》版块,会影响其他正常帖子,不可行。

需要在不屏蔽整个版块的前提下,单独将 tid=95959 从首页四格中排除。

2、解决方案

(1)简要技术分析

Discuz! X3.5 的首页四格数据由 source/module/forum/forumindex.php 中的 fetchallforguide 方法获取。在其结果返回后,通过 foreach 遍历数组,将目标 tid 的条目 unset 掉,再用 array_values() 重置数组键名,实现精准过滤。

(2)修改文件列表

操作文件路径
修改/www/wwwroot/www.dianbo.org/source/module/forum/forum_index.php


(3)关键代码段

在四格数据获取代码块中添加过滤逻辑:

  1. // 获取最新回复(过滤掉 tid=95959)
  2. $grids['newreply'] = C::t('forum_thread')->fetch_all_for_guide('reply', 0, array(), 0, 0, 0, 10, $_G['setting']['grid']['fids']);
  3. if (!empty($grids['newreply'])) {
  4. foreach ($grids['newreply'] as $key => $thread) {
  5. if ($thread['tid'] == 95959) {
  6. unset($grids['newreply'][$key]);
  7. }
  8. }
  9. $grids['newreply'] = array_values($grids['newreply']);
  10. }

  11. // 获取热门主题(过滤掉 tid=95959)
  12. $grids['hot'] = C::t('forum_thread')->fetch_all_for_guide('hot', 0, array(), 3, 0, 0, 10, $_G['setting']['grid']['fids']);
  13. if (!empty($grids['hot'])) {
  14. foreach ($grids['hot'] as $key => $thread) {
  15. if ($thread['tid'] == 95959) {
  16. unset($grids['hot'][$key]);
  17. }
  18. }
  19. $grids['hot'] = array_values($grids['hot']);
  20. }
复制代码


3、最终实现效果

项目修改前修改后
新手引导帖在四格中持续占用最新回复/热门主题位置✅ 已排除,不再显示
《灌水乐园》版块其他帖子不受影响✅ 正常显示
首页四格数据完整性✅ 数组键名已重置,无空白项


4、重要技术沉淀

踩坑点

踩坑正确做法
直接 unset 后不重置键名使用 array_values() 重建索引,避免模板循环时出现空位
fetchallfor_guide 方法中直接加过滤参数(不支持)在方法返回结果后再用 PHP 数组操作过滤
只过滤最新回复,忽略热门主题四格每个栏目都需要单独处理


后续扩展
  • 若需排除更多帖子,可在 $exclude_tids 数组中统一管理:
    1.   $exclude_tids = array(95959, 12345, 67890);
    2. if (in_array($thread['tid'], $exclude_tids)) { unset(...); }
    复制代码

  • 若四格启用缓存,修改后需等待缓存过期或手动更新缓存才能看到效果。



不懂就搜!点此搜点拨论坛。如果本坛没有,请尝试点此问AI,或跟帖提问。
发帖前注意看置顶帖
不定期借助AI对点拨论坛陈年老帖进行挖坟回复,打扰勿怪!
你的问题有多精彩,我的答复就有多精彩!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|点拨论坛 |网站地图|网站地图

GMT+8, 2026-8-8 03:19 , Processed in 0.028519 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表