数据转换开发
详情介绍
一、插件简介
数据转换插件面向站长「旧站迁新站」场景:上传 XIUNO BBS 或 Discuz!X 3.x 导出的 SQL / 压缩包,自动识别源站类型与表前缀,按模块迁移到本站业务表(用户、社区版块/主题/回复/标签等)。支持保留原站密码、随机头像、附件/网盘/音频/隐藏内容/付费阅读等扩展字段;过程导入表不改名,迁移成功后自动清理,最终只保留本系统表。
| 入口 | 路径 |
|---|---|
| 后台管理 | /admin/dataconvert |
| 配置 | 应用中心 → 数据转换 → 配置 |
| 登录桥接 | POST /dataconvert/auth/login(保留原站密码时由社区登录桥接) |
无前台页面:普通用户无独立入口;仅后台完成上传、检测与迁移。
二、核心能力
| 能力 | 说明 |
|---|---|
| 源站识别 | 自动识别 XIUNO(bbs_*)与 Discuz!X(如 pre_common_member),也可手动指定 |
| 备份上传 | 支持 .sql / .zip / .gz,大小上限可配 |
| 分模块迁移 | 版块、用户、主题、回复、标签、附件、音频、隐藏内容、网盘 |
| 不改表名 | 检测时按源站原表名临时导入,不写成站点前缀或 dcN_ 临时名 |
| 过程表清理 | 迁移成功立即删除源站过程表;也可手动清理;可按时长自动清理 |
| 保留原站密码 | 旧 hash+salt 存插件表;登录成功后自动升级为 bcrypt(不改核心 User) |
| 随机头像 | 可选对接「内置头像」插件为迁移用户分配头像 |
| 版块重写 | 可选清空本站社区分类后按源站重建 |
| 付费与隐藏 | 主题付费字段、附件/网盘价格、[hide] 块随对应模块迁移 |
| 音频外链 | 识别 XIUNO data-xn-local-music 播放器外链写入 topic_audio |
| ID 映射 | dataconvert_map 记录旧 ID → 新 ID,支持分次补迁 |
迁移模块一览
| 模块 | 写入目标 | 可选依赖插件 |
|---|---|---|
| 版块/分类 | community_category | community |
| 用户 | user + 可选旧密码表 | community / 登录体系 |
| 主题帖 | community_topic(含付费阅读字段) | community;建议 paidread |
| 回复 | community_reply | community |
| 标签 | 社区标签体系 | community |
| 附件 | topic_attachment 等 | attachment |
| 音频媒体 | topic_audio | audio |
| 隐藏内容 | hide_block | hide |
| 网盘资源 | netdisk_file 等 | netdisk |
三、依赖与安装
- 硬依赖:建议先安装并启用 community(社区),否则用户/主题等模块无意义。
- 可选依赖(勾选对应模块前请先安装):
attachment:附件上传netdisk:网盘资源audio:帖内音频播放hide:正文[hide]隐藏块paidread:付费阅读展示(字段仍可写入主题表)avatars:迁移用户随机头像
- 将插件置于
plugins/dataconvert/,应用中心安装「数据转换」。 - 安装执行
install.sql,创建会话/映射/旧密码表,复制静态资源,注册后台菜单与权限。 - 生产环境迁移前请先用 backup 插件完整备份。
四、应用中心基础配置
字段来自 DataconvertPlugin::configSchema():
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
启用数据转换 enabled | 开关 | 开 | 关闭后后台入口仍可见,但无法上传与迁移 |
保留原站密码 preserve_password | 开关 | 开 | 迁移旧站 hash+salt;社区登录按旧算法校验,成功后升级 bcrypt |
迁移用户使用随机头像 random_avatar | 开关 | 开 | 需安装「内置头像」;开启后为迁移用户随机分配头像 |
上传大小上限(MB) max_upload_mb | 数字 | 200 | SQL / 压缩包大小限制 |
临时表保留(小时) keep_temp_hours | 数字 | 24 | 检测导入的源站过程表超时清理;0=不按时长清理(迁移成功仍会立即清理) |
迁移用户默认密码 migrate_password | 文本 | ChangeMe@2026 | 仅关闭「保留原站密码」或源站 hash 无效时使用 |
五、后台重点配置
后台 数据转换(/admin/dataconvert)分三步:
1. 上传备份
| 操作 | 说明 |
|---|---|
| 源程序类型 | 自动识别 / XIUNO BBS / Discuz!X 3.x |
| 选择文件并上传 | 创建 dataconvert_session,保存备份到会话目录 |
2. 检测数据表
| 操作 | 路径 | 说明 |
|---|---|---|
| 开始检测 | POST /admin/dataconvert/detect | 按原表名导入 SQL,扫描表与模块预估行数 |
检测结果展示源表前缀、过程表数量、各表行数与模块归属;依赖插件未安装时对应模块会提示不可选。
3. 选择模块并迁移
| 操作 | 路径 | 说明 |
|---|---|---|
| 开始迁移 | POST /admin/dataconvert/migrate | 按勾选模块写入本站业务表 |
| 清理导入源表 | POST /admin/dataconvert/cleanup | 删除过程表与会话临时文件 |
可选:清空并重写本站版块(须同时勾选「版块/分类」)。
后台接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /admin/dataconvert | 管理页 |
| POST | /admin/dataconvert/upload | 上传备份 |
| POST | /admin/dataconvert/detect | 检测并导入过程表 |
| POST | /admin/dataconvert/migrate | 执行迁移 |
| POST | /admin/dataconvert/cleanup | 清理过程表 |
六、前台用户流程
普通用户无独立「数据转换」页面。
若开启「保留原站密码」:
- 迁移用户使用原用户名登录社区。
- 插件登录桥接按旧站算法校验(XIUNO / Discuz)。
- 校验成功后写入 bcrypt,标记旧密码已升级,后续走本站标准登录。
七、后台审核与运维
| 场景 | 建议 |
|---|---|
| 迁移前 | 完整备份本站;在测试库先跑一遍 |
| 模块顺序 | 建议:版块 → 用户 → 主题 → 回复 → 标签 → 附件/音频/隐藏/网盘 |
| 分次补迁 | 同一会话用 dataconvert_map 跳过已映射 ID;音频外链可在源表已清理后从主题正文回扫 |
| 过程表 | 迁移成功会自动删除 bbs_* 等源表及历史误导入的 {前缀}bbs_*;勿把业务表当过程表 |
| 大文件 | 调高 PHP upload_max_filesize / post_max_size / max_execution_time,与插件上传上限一致 |
| 版块重写 | 会删除全部社区分类;未重迁主题可能导致分类 ID 悬空 |
八、特殊说明
数据表
| 表 | 说明 |
|---|---|
dataconvert_session | 上传/检测/迁移会话与结果 JSON |
dataconvert_map | 旧 ID → 新 ID 映射(user/topic/audio 等) |
dataconvert_legacy_password | 迁移用户旧站密码,登录升级后标记 upgraded |
服务类(节选)
UploadService/DetectService/MigrateService:上传、检测、迁移编排SqlImportService:SQL 拆分导入(不改表名)SessionService:会话、映射、过程表安全删除XiunoAdapter/DiscuzAdapter:源站适配ContentAnalyzer:网盘、[hide]、音频外链等解析LegacyPasswordService+LoginBridge:旧密码校验与升级
安全
- 过程表删除带白名单保护,不会误删
user、community_*、dataconvert_*等本站表。 - 迁移仅管理员后台操作;请限制后台账号权限。
- 「清空并重写版块」不可逆,务必确认勾选意图。
九、推荐上线清单
- 安装 community,并按需安装 attachment / netdisk / audio / hide / paidread / avatars
- 安装 dataconvert,开启「启用数据转换」
- 确认「保留原站密码」策略与默认密码
- 用 backup 完整备份本站
- 上传旧站 SQL,检测通过后先迁版块+用户小批量验证
- 再迁主题/回复/标签及扩展模块
- 抽查:登录(旧密码)、付费帖、附件价、网盘提取码、音频播放、
[hide] - 确认过程源表已清理,本站仅剩业务表
- 迁移完成后可关闭插件开关,避免误操作
十、常见问题
Q:检测后库里多了很多 `bbs_*` 表? 这是过程导入表,不改名以便读取。迁移成功会自动删除;也可点「清理导入源表」。
Q:为什么不要改成 `zsens_bbs_*`? 避免与本站前缀混淆、残留脏表;正式数据只写入 Db::name(...) 对应的本站表。
Q:迁移用户无法登录? 确认「保留原站密码」开启且 dataconvert_legacy_password 有记录;关闭时使用配置的默认密码。首次成功登录后会升级为 bcrypt。
Q:帖子有音频外链但迁完不能播? 需安装 audio 并勾选「音频媒体」。XIUNO 播放器在 data-xn-local-music 的 href 中,新版本会解析该外链;可对已迁主题再次勾选音频模块补迁。
Q:附件/网盘变成免费? 确认勾选了附件、网盘模块,且源数据含价格字段或 #KH 标记;可对同会话再次迁移以补丁价格。
Q:`[hide]` 没有效果? 需安装 hide 插件并勾选「隐藏内容」模块。
Q:清空版块后主题分类不对? 重写版块会删光分类;请同时(或随后)迁移主题,使分类映射重建。
Q:源表已删还能补迁音频吗? 可以。若主题正文仍保留播放器标记,音频模块会从本站 community_topic.content 回扫外链。
更新记录 (1)
-
v1.0.0
2026-08-24
首次发布