设置选项
本文讲解如何在主题中关联、读取和更新设置项。Setting Schema 的字段、默认值和输入组件统一参考 表单定义与组件速查,本页只说明主题特有的配置边界和使用方式。
区分系统设置与主题设置
主题设置只应描述主题自身的外观、布局和组件行为。Halo 已经提供的站点级能力应继续使用系统设置,避免同一项配置出现多个入口或产生冲突。
theme.yaml 中的 spec.logo 是 Console 中用于展示主题自身的图标,不是站点前台 Logo。前台默认应使用 site.logo:
如果主题确实需要深色专用 Logo,可以只提供可选覆盖项,并回退到系统 Logo:
不要在主题设置中再次提供通用的 head、body 或页脚代码注入。主题自己的 CSS、布局模式等仍可以作为主题设置,但不应取代系统级站点配置。
定义表单
在主题中使用设置项时,需要在主题根目录提供包含 Setting 的 YAML 文件,并在 theme.yaml 中配置 spec.settingName 和 spec.configMapName。安装或重载主题时,Halo 会识别对应 Setting,并在 Console 的主题设置中生成表单。
示例
settingName 必须和 Setting 的 metadata.name 一致。configMapName 应使用主题专属的稳定名称,并在后续版本中保持不变。
settingName 指向设置表单定义,configMapName 指向设置数据的存储位置。Halo 在缺少 configMapName 时会自动生成名称并回写当前 Theme,但重新安装主题时会生成新的名称,之前 ConfigMap 中的设置值不会自动与新 Theme 关联。因此,发布主题时应显式配置 configMapName,不要依赖自动生成。
Setting 资源的 metadata.name 必须和 theme.yaml 中的 spec.settingName 一致。
在主题模板中使用
在主题模板中,需要以 theme.config.[group].[name] 的形式进行调用。
其中:
group: 即spec.forms[].group,如上面示例中的style和layout。name: 即spec.forms[].formSchema[].name,如上面示例中的color_scheme和nav。
示例:
更新配置
与 theme.yaml 一样,settings.yaml 也是持久化存储在数据库中的,不会在修改之后主动更新。同样在主题详情页面点击 重载主题配置 即可。

从 1.x 迁移
为了方便主题开发者从 1.x 迁移,我们提供了工具用于迁移设置表单配置文件。
工具仓库地址:https://github.com/halo-sigs/convert-theme-config-to-next
执行完成之后即可看到主题目录下生成了 settings.2.0.yaml 文件,重命名为 settings.yaml 即可。
转换完成之后需要修改 metadata.name 字段。