子主题:只改你要改的那几页
为什么改了官方主题迟早出事,以及子主题是怎么把这件事解决掉的。
先说问题
直接改官方主题的模板文件(比如 templates/default/index.html)会发生什么?
- 系统在线更新会按白名单覆盖官方主题目录 —— 你的改动被冲掉,而且不会提前告诉你;
- 改坏了一个标签,整个首页变样,回滚只能靠备份。
子主题解决的就是这件事:你的改动放在自己的目录里,官方目录一个字节都不碰。
子主题长什么样
templates/mytheme/
├── theme.json ← 只有这一个字段是关键:"parent": "default"
└── index.html ← 你改过的首页,其余模板从父主题继承
{
"name": "mytheme",
"title": "我的主题",
"version": "1.0.0",
"parent": "default"
}
查找规则
浏览器要 detail.html
↓ templates/mytheme/detail.html 没有
↓ templates/default/detail.html 有 → 用它
浏览器要 index.html
↓ templates/mytheme/index.html 有 → 用它(不再往下找)
所以:改哪一页就把哪一页复制过来改,其余完全不用管。 父主题升级时,只有你没动过的文件会更新 —— 官方的 bug 修复照收,你的改动还在。
三个常见坑
- parent 写错名字:
"parent": "defualt"拼错 → 找不到的文件全都"模板缺失", 页面一片空白。写完在主题管理页看一眼有没有红色提示。 - 以为 header.html 也要复制:不用。父主题有就先继承着,等你真要改顶栏时再复制过来。
- 把主题放到
themes/目录:那里不是主题根,主题系统看不见它。 主题一律放templates/<名字>/;你的目录不在在线更新的白名单里,升级不会碰它。
整站模板包(仿站)里的主题就是子主题
用「整站模板」导出的包,如果勾了"带上主题文件",导入到别的站时会装成一个 继承源主题的子主题,并且不会自动切换 —— 切不切由站长决定。
子主题只适合"改版式"。如果你要做的是完全不同的视觉体系(全新的 CSS 与 DOM 结构),
直接做独立主题更清爽:
"parent" 留空,模板全自己写。