配置文件
主题配置文件的说明
Halo 的主题模块使用 yaml 来对主题进行配置,
theme.yaml里面主要描述主题的名称,开发者的信息,开源地址等等。settings.yaml包含了主题所有的配置选项,需要注意的是,这些选项仅仅是用于构建配置表单,并不起到对主题的配置作用。
theme.yaml
id: 主题id,唯一,不能与其他主题一样。我们建议设置为 `作者名_主题名称`name: 主题名称author:name: 作者名称website: 作者网址description: 主题描述logo: 主题 Logo 地址website: 主题地址,可填写为 git 仓库地址repo: 主题 git 仓库地址,如有填写,后台可在线更新version: 版本号require: 最低支持的 Halo 版本,如:1.3.0,那么如果用户的版本为 1.3.0 以下,则无法安装postMetaField: 文章自定义 meta 变量- meta_keysheetMetaField:- meta_key 页面自定义 meta 变量
示例:
id: caicai_anatolename: Anatoleauthor:name: Caicaiwebsite: https://www.caicai.medescription: A other Halo themelogo: https://avatars1.githubusercontent.com/u/1811819?s=460&v=4website: https://github.com/halo-dev/halo-theme-anatolerepo: https://github.com/halo-dev/halo-theme-anatoleversion: 1.0.0require: 1.3.0postMetaField:- music_url # 假设在文章页面需要播放背景音乐,用户可以自己填写音乐地址。- download_url # 假设在文章页有一个下载按钮,那么用户也可以自己填写加载地址。sheetMetaField:- music_url- download_url
自定义 meta
这个为 1.2.0 引入的功能,用户可以在文章设置中设置自定义 meta,我们在 theme.yaml 中填写的 postMetaField 和 sheetMetaField 为预设项,当用户激活当前主题之后,在文章设置中即可看到预先设置好的项,然后填写对应的值即可。
关于这个 meta 变量如何调用的问题,会在后面的模板变量中阐述。
settings.yaml
# Tab 节点group1:label: 第一个 Tab 名称# 表单项items:# 省略group2:label: 第二个 Tab 名称# 表单项items:# 省略
settings.yaml#items
settings.yaml 的 items 下即为所有表单元素,所支持的表单元素如下
items:# 普通文本框item1:name: item1 // 设置项的 name 值,在页面可通过 ${settings.item1!} 获取值。label: item1 // 表单项的 labeltype: text // 表单项类型:普通文本框placeholder: '' // 表单项的 placeholder,一般给用户提示default: '' // 表单项的默认值description: '' // 描述,一般用于说明该设置的具体用途# 颜色选择框item1:name: item1 // 设置项的 name 值,在页面可通过 ${settings.item1!} 获取值。label: item1 // 表单项的 labeltype: color // 表单项类型:颜色选择框placeholder: '' // 表单项的 placeholder,一般给用户提示default: '' // 表单项的默认值description: '' // 描述,一般用于说明该设置的具体用途# 附件选择框item1:name: item1 // 设置项的 name 值,在页面可通过 ${settings.item1!} 获取值。label: item1 // 表单项的 labeltype: attachment // 表单项类型:颜色选择框placeholder: '' // 表单项的 placeholder,一般给用户提示default: '' // 表单项的默认值description: '' // 描述,一般用于说明该设置的具体用途# 多行文本框item2: // 设置项的 name 值,在页面可通过 ${settings.item2!} 获取值。name: item2label: item2 // 同上type: textarea // 表单项类型:多行文本框placeholder: '' // 同上default: '' // 同上description: '' // 描述,一般用于说明该设置的具体用途# 单选框item3:name: item3 // 同上label: item3_label // 同上type: radio // 表单项类型:单选框data-type: bool // 数据类型:bool,string,long,doubledefault: value1 // 同上description: '' // 描述,一般用于说明该设置的具体用途options: // 选项- value: value1 // 值label: label1 // 说明- value: value2label: label2# 下拉框item4:name: item4 // 同上label: item4 // 同上type: select // 表单项类型:下拉框data-type: bool // 数据类型:bool,string,long,doubledefault: value1 // 同上description: '' // 描述,一般用于说明该设置的具体用途options: // 选项- value: value1 // 值label: label1 // 说明- value: value2label: label2
一个例子
假设我们的配置文件如下:
general:label: 基础设置items:index_title:name: index_titlelabel: 首页标题type: textdescription: '注意:将覆盖博客标题'background_cover:name: background_coverlabel: 首页背景图type: attachmentdefault: '/casper/assets/images/blog-cover.jpg'description: '设置首页的背景图,你可以点击右边的选择按钮选择图片。'background_color:name: background_colorlabel: 首页背景颜色type: colordefault: '#fff'music_enabled:name: music_enabledlabel: 背景音乐type: radiodata-type: booldefault: falsedescription: '是否开启背景音乐,默认为 false'options:- value: truelabel: 开启- value: falselabel: 关闭code_pretty:name: code_prettylabel: 文章代码高亮主题type: selectdefault: Defaultoptions:- value: Defaultlabel: Default- value: Coylabel: Coy- value: Darklabel: Dark- value: Okaidialabel: Okaidia- value: Solarized Lightlabel: Solarized Light- value: Tomorrow Nightlabel: Tomorrow Night- value: Twilightlabel: Twilight
页面取值:
// 获取首页标题<#if settings.index_title?? && settings.index_title != ''><h1>${settings.index_title!}</h1></#if>
// 获取背景图片<#if settings.background_cover?? && settings.background_cover != ''><img src="${settings.background_cover!}"></#if>
// 获取背景颜色<style>body{<#if settings.background_color?? && settings.background_color != ''>background-color: ${settings.background_color!}<#else>background-color: #fff</#if>}</style>或者<style>body{background-color: ${settings.background_color!'#fff'}}</style>
// 判断是否开启背景音乐<#if settings.music_enabled!false>do something...</#if>
// 获取代码高亮主题<link rel="stylesheet" type="text/css" href="${theme_base!}/assets/prism/css/prism-${settings.code_pretty!'Default'}.css" /><script type="text/javascript" src="${theme_base!}/assets/prism/js/prism.js"></script>
更多实例可参考:https://github.com/halo-dev/halo-theme-material/blob/master/settings.yaml。
