[开发]SoSite — 只保留 Modern 单模板体系改造方案

👑Lv.11 元老 🌞 骨干会员
2026-10-26 00:42:37

本文由 FlintHub 开发文档归档发布。原始文档日期见标题前缀,来源:20260806备份/modern模板单体系改造方案.md。

SoSite — 只保留 Modern 单模板体系改造方案

拟定日期:2026-08-06

状态:待确认,未执行(等你指令后再动手)

目标:将 assets/themes/modern/templates/ 固化到 app/Views/,删除默认模板体系及其配套样式/多配色,只保留并长期打磨一套 Modern 模板


目录

  1. 背景与目标
  2. 现状调查结论(改造依据)
  3. 方案总览
  4. 详细执行步骤
  5. 保留清单 vs 删除清单(重点!)
  6. 风险与注意事项
  7. 验证清单
  8. 待你拍板的决策点

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.php
  • plugins/icon_generator/generator.php
  • plugins/quiz_duel/create.php、detail.php、index.php、my.php
  • plugins/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)

  1. TemplateCompiler::detectTheme():简化为直接返回 'modern'

(删除 preview/user/cookie 分支;settings 分支保留作为 fallback 或一并固定)

  1. TemplateCompiler::__construct():themePath 逻辑保留(指向 modern/templates),

或删除——取决于第 6 步是否删 assets/themes/modern/templates/

  1. Theme.php::getAvailable():只返回 modern(+ 保留的 modern-* 变体,若你决定保留)
  2. Theme.php::set():禁止切换(或强制写 modern)
  3. 前台切换:ThemeController 直接 redirect('/') 或改为"仅展示当前主题";

app/Views/theme/settings.php 移除表单

  1. 后台管理:Admin\ThemeController 隐藏/简化;admin/themes.php 只显示 Modern
  2. 数据收口(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)

  1. 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/authblog
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.cssModern 布局的基础底座,不是默认模板专属
assets/css/modern.cssModern 核心样式
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-*.cssModern 配色变体(是否保留待你定)

删除(默认模板配套)说明
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.phpdetectTheme 固定 modern;resolveTemplate 保留主题优先或改为直查 app/Views
app/Helpers/Theme.phpgetAvailable 只返回 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. 风险与注意事项

  1. 后台是最大验证面:admin 视图用默认类名(.admin-*/.btn/.table),

依赖 admin.css + 基础 CSS——布局换成 modern 后样式机制不变(基础 CSS 仍加载),

但每个后台页需实测

  1. 4 个插件视图不能删:删了 dice / icon_generator / quiz_duel / user_profile 前台直接 404
  2. 模板缓存:删除视图后必须清 protected/cache/templates/,否则编译缓存指向旧路径
  3. CSS 别删错:style/layout/forum/... 是 Modern 底座,删了全站崩;

删配色前先 grep -r "themes/baby_blue" assets app 确认无引用

  1. settings 表列名:执行 SQL 前先 DESCRIBE settings; 确认 key 列名
  2. _components/ 必须复制:Modern 布局 include 左右侧边栏,漏了会空白
  3. 回滚:全量备份在 _backup_20260806/template_unify/,覆盖式回滚即可

7. 验证清单

  • [ ] 前台:首页 / 论坛 / 版块 / 帖子 / 博客 / 个人中心 / 消息 / 搜索 / 标签 / 邀请 / 主题设置
  • [ ] 插件:骰子 / 猜题 / 签到 / 收藏 / 红包 / QA / 公告 / 友链 / 内容审核 / 用户主页 / seo / icon_generator
  • [ ] 后台:Dashboard + 全部管理页(表格/表单/弹窗/confirm)
  • [ ] 邮件模板:注册验证 / 找回密码(若可触发)
  • [ ] 移动端视图抽查(Modern 响应式)
  • [ ] 控制台无 404(CSS/JS/视图)、error.log 无新错误

8. 待你拍板的决策点

  1. Modern 源目录去留:验证后删 assets/themes/modern/templates/(A),还是保留存档(B)?
  2. **modern-* 配色变体**(azure/jade/crimson/night/purple):保留还是也砍掉只剩 modern?
  3. 后台是否顺带打磨成 Modern 风格:本轮只"保能跑",还是另排期美化后台?
  4. DEFAULT_THEME:是否在 config 中显式定义 'modern' 以替代数据库依赖?

方案结束 — 等你确认后按步骤执行

轻量级、高性能、零 MySQL 依赖的PHP社区系统。
| 浏览 2 次 | 回复 0 次

全部回复 (0)

暂无回复

请 登录