本文由 FlintHub 开发文档归档发布。原始文档日期见标题前缀,来源:20260806备份/modern模板单体系改造方案.md。
SoSite — 只保留 Modern 单模板体系改造方案
拟定日期:2026-08-06
状态:待确认,未执行(等你指令后再动手)
目标:将
assets/themes/modern/templates/固化到app/Views/,删除默认模板体系及其配套样式/多配色,只保留并长期打磨一套 Modern 模板
目录
1. 背景与目标
SoSite 目前有"默认模板 + Modern 主题"两套视图体系,Modern 通过
TemplateCompiler 的"主题优先、默认兜底"机制覆盖前台视图,但默认模板仍承担
后台 admin、4 个插件视图和兜底职责。长期维护两套成本高。
本次目标:
- 把
assets/themes/modern/templates/复制到app/Views/,覆盖同名默认视图 - 删除
app/Views/下默认模板视图(仅保留后台admin/及必要的插件视图) - 删除配套默认模板的样式与多配色
- 收口主题切换机制,使全站固定使用 Modern 一套
2. 现状调查结论(改造依据)
2.1 视图文件差异(已逐文件比对)
| 目录 | `app/Views/`(默认) | `assets/themes/modern/templates/`(modern) |
|---|---|---|
| 前台视图(auth/blog/emails/forum/home/invite/layouts/message/post/profile/search/tags/theme/thread) | ✅ | ✅ 全覆盖(同名) |
后台 admin/(~24 个页面 + _sidebar) | ✅ 唯一来源 | ❌ 无 |
| 插件视图 | ✅ 12 个插件 | ⚠️ 仅 8 个 |
_components/(左右侧边栏) | ❌ | ✅ modern 独有 |
| 其他 | — | ⚠️ 误生成 plugins/qa/question/error.log(应清理) |
modern 缺失的 4 个插件视图(默认独有,不可删):
plugins/dice/index.phpplugins/icon_generator/generator.phpplugins/quiz_duel/create.php、detail.php、index.php、my.phpplugins/user_profile/front.php
2.2 CSS 依赖关系(关键!)
Modern 布局(assets/themes/modern/templates/layouts/main.php)实际加载:
前台:css/style.css + layout.css + forum.css + pages.css + components.css
+ blog.css + home.css + modern.css + themes/modern/default.css + fontawesome.css
后台:上述 + admin.css(后台专用)
编辑器:editor.css(needsEditor 时)
配色变体:css/themes/modern-*.css(当主题为 modern-xxx 时)⚠️ 重要结论:style/layout/forum/pages/components/blog/home 这 6-7 个 CSS
不是"默认模板专属",而是 Modern 布局的基础底座(Modern 也在用),
不能删。可删的是"经典配色"(见 5.2)。
2.3 主题机制(4 个入口 + 数据存储)
| 入口/存储 | 位置 |
|---|---|
| 模板解析 | TemplateCompiler::detectTheme()(preview → users.theme → cookie → settings) |
| 主题列表 | app/Helpers/Theme.php::getAvailable()/getCurrent()/set() |
| 前台切换 | app/Controllers/ThemeController.php + app/Views/theme/settings.php |
| 后台管理 | app/Controllers/Admin/ThemeController.php + app/Views/admin/themes.php |
| 数据 | users.theme、cookie site_theme、settings.default_theme、DEFAULT_THEME(未定义,回退 '') |
| preview | ?preview_theme=xxx(布局、侧边栏组件均有引用) |
3. 方案总览
① 备份(app/Views、TemplateCompiler、Theme、布局、CSS)
② 复制 modern/templates → app/Views(覆盖同名)
③ 保留 admin/ + 4 个插件视图,删除 app/Views 下其余默认视图
④ 清理误生成文件 + 经典配色 CSS
⑤ 收口主题机制(固定 modern,移除切换入口)
⑥ 清理模板缓存 + 全站验证核心思路:"覆盖层固化进底层" —— 复制前后前台渲染结果逐字节一致,
是无损固化而非重构;后台保持"Modern 布局 + admin 视图 + admin.css"现状不变。
4. 详细执行步骤
第 1 步:备份(改前必做)
# 备份到 _backup_20260806/ 下新增目录
_backup_20260806/template_unify/
├── app/Views/(整个目录)
├── assets/themes/modern/(整个目录)
├── app/Core/TemplateCompiler.php
├── app/Helpers/Theme.php
├── app/Controllers/ThemeController.php
├── app/Controllers/Admin/ThemeController.php
├── app/Views/theme/settings.php
├── app/Views/admin/themes.php
└── assets/css/themes/(经典配色,删除前备份)第 2 步:复制 Modern 模板到 app/Views(覆盖同名)
assets/themes/modern/templates/* → app/Views/*
(含 _components/、emails/;同名文件直接覆盖)复制后立即验证(此时 themePath 仍在,行为应完全不变):
- 清
protected/cache/templates/ - 前台首页 / 论坛 / 帖子 / 博客 / 个人中心 各刷一遍,确认与改造前一致
第 3 步:删除默认视图(保留清单见第 5 章)
删除 app/Views/ 下除以下目录外的所有内容:
- ✅ 保留
admin/(后台视图 + admin.css + _sidebar.php) - ✅ 保留 4 个插件视图:
plugins/dice/、plugins/icon_generator/、plugins/quiz_duel/、plugins/user_profile/ - ✅ 保留
emails/(复制过来的 modern 版,属模板必需)
其余(auth/blog/forum/home/invite/layouts/message/post/profile/search/tags/theme/thread
及 plugins 下其余插件目录)已由 modern 复制覆盖,可删除默认版本(即:删除后目录里
只有 admin/ + 4 插件 + modern 复制来的内容)。
第 4 步:清理误生成文件与经典配色
| 项 | 动作 |
|---|---|
assets/themes/modern/templates/plugins/qa/question/error.log | 删除(误生成的日志) |
assets/css/themes/ 下经典配色(baby_blue、Christmas_Joy、forum_legacy、golden_celebration、light_green、slate_pro、sunset_warmth、common.css) | 删除前先全局 grep 确认无引用,再删 |
assets/css/themes/modern-*.css(azure/jade/crimson/night/purple) | 保留(属 Modern 配色变体,除非你决定砍掉) |
第 5 步:收口主题机制(固定 Modern)
TemplateCompiler::detectTheme():简化为直接返回'modern'
(删除 preview/user/cookie 分支;settings 分支保留作为 fallback 或一并固定)
TemplateCompiler::__construct():themePath逻辑保留(指向 modern/templates),
或删除——取决于第 6 步是否删 assets/themes/modern/templates/
Theme.php::getAvailable():只返回modern(+ 保留的 modern-* 变体,若你决定保留)Theme.php::set():禁止切换(或强制写modern)- 前台切换:
ThemeController直接redirect('/')或改为"仅展示当前主题";
app/Views/theme/settings.php 移除表单
- 后台管理:
Admin\ThemeController隐藏/简化;admin/themes.php只显示 Modern - 数据收口(SQL,一次性):
```sql
UPDATE users SET theme = 'modern' WHERE theme <> 'modern' AND theme <> '';
UPDATE settings SET value = 'modern' WHERE k = 'default_theme';
```
(settings 表列名需按实际确认:key / k / setting_key)
- preview 清理:布局与
_components/中preview_theme判断可保留(无害)或清理
第 6 步:删除 Modern 模板源目录(可选,二选一)
| 选项 | 说明 |
|---|---|
| A(推荐) | 复制完成并验证后,删除 assets/themes/modern/templates/,模板只存在 app/Views/ 一份;assets/themes/modern/ 下的 default.css、style.css 保留(布局引用 default.css) |
| B | 保留 assets/themes/modern/templates/ 作为"主题包"存档,主题机制仍支持 modern-* 变体 |
第 7 步:清理模板缓存 + 全站验证
清空 protected/cache/templates/,按第 7 章清单逐项验证。
5. 保留清单 vs 删除清单(重点!)
5.1 视图文件
| 保留 | 原因 |
|---|---|
app/Views/admin/** | 后台唯一来源,无 modern 版 |
app/Views/plugins/dice/、icon_generator/、quiz_duel/、user_profile/ | modern 无这 4 个插件视图,删了插件前台 404 |
app/Views/emails/ | 邮件模板(复制后的 modern 版) |
| 删除 | 说明 |
|---|---|
| `app/Views/auth | blog |
app/Views/plugins/ 下除 4 个保留外的插件目录默认视图 | 已被 modern 覆盖 |
assets/themes/modern/templates/plugins/qa/question/error.log | 误生成垃圾文件 |
5.2 CSS 文件
| 保留(Modern 实际依赖) | 说明 |
|---|---|
assets/css/style.css、layout.css、forum.css、pages.css、components.css、blog.css、home.css | Modern 布局的基础底座,不是默认模板专属 |
assets/css/modern.css | Modern 核心样式 |
assets/css/admin.css | 后台专用 |
assets/css/fontawesome.css、editor.css、theme_settings.css | 公共/编辑器/设置 |
assets/themes/modern/default.css(+ style.css 若被引用) | Modern 主题样式(布局引用 default.css) |
assets/css/themes/modern-*.css | Modern 配色变体(是否保留待你定) |
| 删除(默认模板配套) | 说明 |
|---|---|
assets/css/themes/baby_blue.css、Christmas_Joy.css、forum_legacy.css、golden_celebration.css、light_green.css、slate_pro.css、sunset_warmth.css、common.css | 经典配色/默认模板配套,删前 grep 确认无引用 |
assets/css/themes/ 下 modern-* 之外的历史主题残留 | 同上 |
5.3 代码收口清单
| 文件 | 改动 |
|---|---|
app/Core/TemplateCompiler.php | detectTheme 固定 modern;resolveTemplate 保留主题优先或改为直查 app/Views |
app/Helpers/Theme.php | getAvailable 只返回 modern;set 禁用/强制 |
app/Controllers/ThemeController.php | 前台切换收口 |
app/Controllers/Admin/ThemeController.php | 后台管理收口 |
app/Views/theme/settings.php、app/Views/admin/themes.php | 移除切换 UI |
index.php 或 config.php | (可选)定义 DEFAULT_THEME = 'modern' |
6. 风险与注意事项
- 后台是最大验证面:admin 视图用默认类名(
.admin-*/.btn/.table),
依赖 admin.css + 基础 CSS——布局换成 modern 后样式机制不变(基础 CSS 仍加载),
但每个后台页需实测
- 4 个插件视图不能删:删了 dice / icon_generator / quiz_duel / user_profile 前台直接 404
- 模板缓存:删除视图后必须清
protected/cache/templates/,否则编译缓存指向旧路径 - CSS 别删错:
style/layout/forum/...是 Modern 底座,删了全站崩;
删配色前先 grep -r "themes/baby_blue" assets app 确认无引用
- settings 表列名:执行 SQL 前先
DESCRIBE settings;确认key列名 _components/必须复制:Modern 布局 include 左右侧边栏,漏了会空白- 回滚:全量备份在
_backup_20260806/template_unify/,覆盖式回滚即可
7. 验证清单
- [ ] 前台:首页 / 论坛 / 版块 / 帖子 / 博客 / 个人中心 / 消息 / 搜索 / 标签 / 邀请 / 主题设置
- [ ] 插件:骰子 / 猜题 / 签到 / 收藏 / 红包 / QA / 公告 / 友链 / 内容审核 / 用户主页 / seo / icon_generator
- [ ] 后台:Dashboard + 全部管理页(表格/表单/弹窗/confirm)
- [ ] 邮件模板:注册验证 / 找回密码(若可触发)
- [ ] 移动端视图抽查(Modern 响应式)
- [ ] 控制台无 404(CSS/JS/视图)、error.log 无新错误
8. 待你拍板的决策点
- Modern 源目录去留:验证后删
assets/themes/modern/templates/(A),还是保留存档(B)? - **modern-* 配色变体**(azure/jade/crimson/night/purple):保留还是也砍掉只剩
modern? - 后台是否顺带打磨成 Modern 风格:本轮只"保能跑",还是另排期美化后台?
DEFAULT_THEME:是否在 config 中显式定义'modern'以替代数据库依赖?
方案结束 — 等你确认后按步骤执行