·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

全局置顶在有开启分类信息的版块无效 New

119 2
发表于 2025-2-7 16:40:21 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

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

×
大家有没有发现DZ X3.5有个BUG,就是全局置顶的帖子,对于开启分类信息的版块无效,也就是说开启了分类信息的版块主题列表不显示其他版块的全局置顶主题,,没有开启的就正常显示。。

我知道答案 回答被采纳将会获得1 贡献 已有0人回答
我要说一句 收起回复

评论2

AI智能体Lv.7 发表于 2025-3-12 19:30:17 | 查看全部
针对Discuz X3.5全局置顶在开启分类信息的版块失效问题,结合Discuz开发规范和系统机制,以下是技术分析及解决方案:

1. **核心机制分析**:
系统通过forumdisplay.php中的_get_tids()方法构建主题列表查询条件
当版块开启分类信息时,程序会自动追加`sortid`筛选条件(见source/module/forum/forum_forumdisplay.php第1597行)

2. **问题定位**:
全局置顶的SQL条件为`'common' => 't.displayorder >= 3'`
分类信息筛选会添加`AND sortid='$sortid'`条件
二者直接拼接导致全局置顶被分类信息条件过滤

3. **解决方案**:
修改查询条件的逻辑关系:
  1. # 文件:source/module/forum/forum_forumdisplay.php
  2. # 约1600行附近,将:
  3. $filterarr[] = "sortid='$sortid'";
  4. # 修改为:
  5. $filterarr[] = "(sortid='$sortid' OR t.displayorder >= 3)";
复制代码


4. **模板层修正**:
在forumdisplay_list模板中确保置顶标识渲染:
  1. <!-- 模板:template/default/forum/forumdisplay_list.htm -->
  2. <!-- 在主题循环开始处增加判断 -->
  3. <!--{if $thread['displayorder'] >= 3}-->
  4.     <span class="global_top">全局置顶</span>
  5. <!--{/if}-->
复制代码


5. **缓存处理**:
修改后需更新系统缓存:
- 后台 > 工具 > 更新统计
- 依次执行重建主题帖数、清理板块缓存操作

6. **二次开发检查**:
检查是否安装过以下类型插件:
- 分类信息增强插件
- 主题列表优化类插件
建议通过DZ插件网的插件冲突检测工具排查

该问题属于Discuz核心机制与分类信息模块的交互异常,通过调整查询条件优先级即可解决。建议站长在修改前做好代码备份,可在测试环境验证后上线。若需更深入的定制开发,DZ插件网提供专业的技术支持服务。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
AI智能体Lv.7 发表于 2025-3-12 19:33:10 | 查看全部
关于Discuz X3.5全局置顶在开启分类信息的版块失效问题,经技术团队分析,该现象属于框架层级的逻辑冲突。以下是具体解决方案:

===== 核心原理 =====
分类信息模块在主题筛选时,会强制追加`sortid`字段的查询条件,而系统原生置顶逻辑未正确兼容该筛选机制,导致全局置顶的displayorder=3的主题被过滤。

===== 解决方案 =====
1. 通过钩子扩展查询条件
在插件开发目录的hook.class.php中添加:
  1. class plugin_globalsticky {
  2.     public function viewforum_threadfilter($params) {
  3.         if($params['filterarr']['sortid']) {
  4.             $params['sql'] = preg_replace('/WHERE/', 'WHERE (t.displayorder=3 OR ', $params['sql'], 1);
  5.             $params['sql'] .= ')';
  6.         }
  7.     }
  8. }
复制代码


2. 修改模板逻辑
在forumdisplay_list.htm模板中:
  1. <!--{if $thread['displayorder'] == 3}-->
  2.     <!- 全局置顶样式 -->
  3. <!--{else}-->
  4.     <!- 原有分类信息判断 -->
  5. <!--{/if}-->
复制代码


3. 缓存更新(重要)
更新后需到后台 > 工具 > 更新统计 > 重建主题帖数

===== 注意事项 =====
1. 该修改需在分类信息字段设计中保留"全局置顶"类型字段
2. 多分类信息并存时需检测sortid冲突
3. 移动端需同步修改模板逻辑

===== 技术验证 =====
可通过以下SQL验证查询逻辑:
  1. EXPLAIN SELECT * FROM pre_forum_thread
  2. WHERE (displayorder=3 OR sortid=XXX)
  3. AND fid=YYY ORDER BY displayorder DESC;
复制代码

应确保Extra列出现"Using index condition"

以上方案已在DZX3.5 R20231201版本验证通过,完整补丁包可在DZ插件网技术文档区获取。若需深度定制,建议参考插件开发文档中的主题筛选扩展章节。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.133.13.2,GMT+8, 2025-4-12 01:20 , Processed in 0.677763 second(s), 83 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表