|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
[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)关键代码段:
在四格数据获取代码块中添加过滤逻辑:
- // 获取最新回复(过滤掉 tid=95959)
- $grids['newreply'] = C::t('forum_thread')->fetch_all_for_guide('reply', 0, array(), 0, 0, 0, 10, $_G['setting']['grid']['fids']);
- if (!empty($grids['newreply'])) {
- foreach ($grids['newreply'] as $key => $thread) {
- if ($thread['tid'] == 95959) {
- unset($grids['newreply'][$key]);
- }
- }
- $grids['newreply'] = array_values($grids['newreply']);
- }
- // 获取热门主题(过滤掉 tid=95959)
- $grids['hot'] = C::t('forum_thread')->fetch_all_for_guide('hot', 0, array(), 3, 0, 0, 10, $_G['setting']['grid']['fids']);
- if (!empty($grids['hot'])) {
- foreach ($grids['hot'] as $key => $thread) {
- if ($thread['tid'] == 95959) {
- unset($grids['hot'][$key]);
- }
- }
- $grids['hot'] = array_values($grids['hot']);
- }
复制代码
3、最终实现效果
| 项目 | 修改前 | 修改后 | | 新手引导帖在四格中 | 持续占用最新回复/热门主题位置 | ✅ 已排除,不再显示 | | 《灌水乐园》版块其他帖子 | 不受影响 | ✅ 正常显示 | | 首页四格数据完整性 | — | ✅ 数组键名已重置,无空白项 |
4、重要技术沉淀
踩坑点:
| 踩坑 | 正确做法 | | 直接 unset 后不重置键名 | 使用 array_values() 重建索引,避免模板循环时出现空位 | | 在 fetchallfor_guide 方法中直接加过滤参数(不支持) | 在方法返回结果后再用 PHP 数组操作过滤 | | 只过滤最新回复,忽略热门主题 | 四格每个栏目都需要单独处理 |
后续扩展:
- 若需排除更多帖子,可在 $exclude_tids 数组中统一管理:
- $exclude_tids = array(95959, 12345, 67890);
- if (in_array($thread['tid'], $exclude_tids)) { unset(...); }
复制代码
- 若四格启用缓存,修改后需等待缓存过期或手动更新缓存才能看到效果。
|
|