方案 1.0 完整版 - 实施总结
实施完成时间
2026-02-28
一、实施内容清单
1.1 代码文件修改
| 文件 |
状态 |
修改内容 |
template/xmyc_doc/php/directory_tree.php |
✓ 已完成 |
添加分类信息排序支持 |
template/xmyc_touch_doc/touch/php/directory_tree.php |
✓ 已完成 |
添加分类信息排序支持 |
1.2 新增文件
| 文件 |
类型 |
用途 |
tools/migrate_classification_data.php |
工具脚本 |
批量迁移现有帖子数据 |
docs/分类信息排序方案实施计划.md |
文档 |
完整实施方案计划 |
docs/分类信息排序系统版主操作指引.md |
文档 |
版主操作手册 |
docs/方案 1.0 实施总结.md |
文档 |
本文档 |
二、核心功能实现
2.1 新增辅助函数
两个 directory_tree.php 文件均添加了以下函数:
| 函数名 |
用途 |
get_typeoption_values() |
批量获取帖子分类信息值 |
get_thread_tags() |
获取帖子标签 |
get_directory_threads_optimized() |
优化版帖子获取函数(支持分类信息) |
2.2 分类信息配置
需要在 Discuz 后台创建以下配置:
分类信息:文档管理 (sortid=5)
选项 1:
- optionid=21
- 名称:排序权重 (sort_order)
- 类型:字串 (text)
- 说明:数字越小越靠前
选项 2:
- optionid=22
- 名称:是否为配置帖 (is_config)
- 类型:单选 (radio)
- 选项值:普通文档\n 配置文档
选项 3:
- optionid=23
- 名称:是否展示在目录树 (show_in_tree)
- 类型:单选 (radio)
- 选项值:不展示\n 展示在目录
2.3 帖子类型判断逻辑
// 0 级目录判断逻辑
$is_config_bool = ($is_config == '1' || $is_config == '配置文档');
$show_in_tree_bool = ($show_in_tree == '1' || $show_in_tree == '展示在目录');
if($thread['displayorder'] > 0 && $is_config_bool) {
// 配置帖:根据 show_in_tree 决定是否展示
if($show_in_tree_bool) {
$result['config'][$tid] = $thread; // 展示在 0 级目录
}
// else: 不展示
} elseif($thread['displayorder'] > 0 && !$is_config_bool) {
// 置顶说明帖:自动展示在 0 级目录
$result['top_sticky'][$tid] = $thread;
} else {
// 普通帖子:按 sort_order 排序归入目录
$result['normal'][$tid] = $thread;
}
三、待完成事项
3.1 数据库配置(需手动)
执行人:数据库管理员
步骤:
- 登录 Discuz 后台
- 进入"分类信息" → "添加分类信息"
- 创建分类信息:
- 名称:文档管理
- 类型标识:document
- 显示顺序:5
- 创建三个选项项目(见 2.2)
3.2 数据迁移
执行人:技术人员
步骤:
- 备份数据库
- 访问
http://您的域名/tools/migrate_classification_data.php
- 等待脚本执行完成
- 验证迁移结果
- 删除迁移脚本(重要)
3.3 权限设置
执行人:超级管理员
建议配置:
show_in_tree 选项设置为"仅管理员可设置"
is_config 选项设置为"仅管理员可设置"
sort_order 允许版主和普通用户设置
四、测试验证
4.1 测试场景
| 测试项 |
操作步骤 |
预期结果 |
| 置顶说明帖 |
发布 is_config=0 的置顶帖 |
展示在 0 级目录 |
| 配置帖展示 |
发布 is_config=1, show_in_tree=1 的置顶帖 |
展示在 0 级目录 |
| 配置帖隐藏 |
发布 is_config=1, show_in_tree=0 的置顶帖 |
不展示在 0 级目录 |
| 普通帖子排序 |
设置不同 sort_order 值 |
按数字从小到大排序 |
| 目录树匹配 |
普通帖子添加 #目录_xxx 标签 |
正确归入对应目录 |
4.2 验证步骤
- 验证配置:后台检查 sortid=5 和三个 optionid 是否正确
- 验证数据:抽查帖子表,确认分类信息值已正确写入
- 验证展示:访问版块页面,检查目录树 0 级目录展示
- 验证排序:检查目录树和列表页排序是否一致
五、回滚方案
5.1 回滚步骤
如需回滚到旧版本:
-
恢复代码:
# 如果有 git 备份
git checkout HEAD -- template/xmyc_doc/php/directory_tree.php
git checkout HEAD -- template/xmyc_touch_doc/touch/php/directory_tree.php
-
数据保留:分类信息数据保留在数据库中,不影响现有功能
-
问题排查:在测试环境复现并修复问题
5.2 备份文件
建议在修改前备份原文件:
template/xmyc_doc/php/directory_tree.php.bak
template/xmyc_touch_doc/touch/php/directory_tree.php.bak
六、性能优化建议
6.1 数据库索引
建议为分类信息表添加索引:
-- 为 pre_forum_typeoptionvar 添加组合索引
ALTER TABLE `pre_forum_typeoptionvar`
ADD INDEX `idx_tid_optionid` (`tid`, `optionid`);
ALTER TABLE `pre_forum_typeoptionvar`
ADD INDEX `idx_sortid_optionid` (`sortid`, `optionid`);
6.2 缓存策略
- 目录树结果可考虑缓存 5-10 分钟
- 配置帖内容可缓存,减少数据库查询
七、技术要点总结
7.1 核心改进
- 统一排序:目录树和版块列表页使用相同的 sort_order 值
- 简化配置:无需在配置帖中查 tid 配置 [posts] 段落
- 灵活控制:show_in_tree 选项控制配置帖展示
- 自动识别:0 级目录自动展示所有置顶说明帖
7.2 兼容性
- 保留旧格式配置支持(文字路径格式)
- 保留标签系统功能
- 分类信息作为可选项,不影响现有功能