皮肤
一个皮肤就是一个目录 skins/<slug>/,里面必须有 skin.json:
{
"name": "Nomen 2026",
"version": "1.0.0",
"description": "默认皮肤",
"license": "GPL-3.0-only",
"author": ["Yunyun"]
}
目录名就是 slug,写进 config/skins.php 的 default(或环境变量 DEFAULT_SKIN)就是站点默认皮肤。用户可以在设置页换自己的,登录后写进 users.skin。
目录
| 路径 | 作用 |
|---|---|
layouts/ | 页面外壳(default / app / admin / open),提供哪个就覆盖哪个 |
templates/ | 页面模板覆盖,和核心 templates/ 同名就顶掉 |
partials/ | 皮肤自己的片段,布局里按相对路径 require |
css/、js/ | 皮肤自己的静态资源(放 public/assets/skins/<slug>/ 也行) |
模板覆盖
Response::view('landing') 的查找顺序:
当前皮肤的
templates/landing.php默认皮肤的
templates/landing.php核心的
templates/landing.php
想改首页、登录页、注册页,直接把同名文件放进皮肤目录,不用动核心。
品牌变量
页面上能看到的东西都从 config/brand.php 取,别在布局里写死:
| 键 | 说明 |
|---|---|
name | 站点名,标题、左上角、页脚都用它 |
logo | 站点图标,左上角、favicon 都用它 |
base_url | 绝对地址,canonical 和示例代码用它 |
copyright | 页脚版权行,留空就不显示 |
footer_links | 页脚链接数组,每项 ['label' => ..., 'url' => ...] |
powered_by | 页脚那句 Powered by,false 关掉 |
注意
布局和模板都是直接
require的 PHP,皮肤代码等于站点代码权限,只装信得过的。应用的路由、POST 逻辑、CSRF 在控制器里,皮肤只决定长什么样。
改完不用清缓存,下一页就生效;改了 CSS 记得换
?v=。