配置文件

主题配置文件的说明

Halo 的主题模块使用 yaml 来对主题进行配置,theme.yaml 里面主要描述主题的名称,开发者的信息,开源地址等等。settings.yaml 包含了主题所有的配置选项,需要注意的是,这些选项仅仅是用于构建配置表单,并不起到对主题的配置作用。

theme.yaml

  1. id: 主题id,唯一,不能与其他主题一样。我们建议设置为 `作者名_主题名称`
  2. name: 主题名称
  3. author:
  4. name: 作者名称
  5. website: 作者网址
  6. description: 主题描述
  7. logo: 主题 Logo 地址
  8. website: 主题地址,可填写为 git 仓库地址
  9. repo: 主题 git 仓库地址,如有填写,后台可在线更新
  10. version: 版本号
  11. require: 最低支持的 Halo 版本,如:1.3.0,那么如果用户的版本为 1.3.0 以下,则无法安装
  12. postMetaField: 文章自定义 meta 变量
  13. - meta_key
  14. sheetMetaField:
  15. - meta_key 页面自定义 meta 变量

示例:

  1. id: caicai_anatole
  2. name: Anatole
  3. author:
  4. name: Caicai
  5. website: https://www.caicai.me
  6. description: A other Halo theme
  7. logo: https://avatars1.githubusercontent.com/u/1811819?s=460&v=4
  8. website: https://github.com/halo-dev/halo-theme-anatole
  9. repo: https://github.com/halo-dev/halo-theme-anatole
  10. version: 1.0.0
  11. require: 1.3.0
  12. postMetaField:
  13. - music_url # 假设在文章页面需要播放背景音乐,用户可以自己填写音乐地址。
  14. - download_url # 假设在文章页有一个下载按钮,那么用户也可以自己填写加载地址。
  15. sheetMetaField:
  16. - music_url
  17. - download_url

自定义 meta

这个为 1.2.0 引入的功能,用户可以在文章设置中设置自定义 meta,我们在 theme.yaml 中填写的 postMetaFieldsheetMetaField 为预设项,当用户激活当前主题之后,在文章设置中即可看到预先设置好的项,然后填写对应的值即可。

关于这个 meta 变量如何调用的问题,会在后面的模板变量中阐述。

settings.yaml

  1. # Tab 节点
  2. group1:
  3. label: 第一个 Tab 名称
  4. # 表单项
  5. items:
  6. # 省略
  7. group2:
  8. label: 第二个 Tab 名称
  9. # 表单项
  10. items:
  11. # 省略

settings.yaml#items

settings.yaml 的 items 下即为所有表单元素,所支持的表单元素如下

  1. items:
  2. # 普通文本框
  3. item1:
  4. name: item1 // 设置项的 name 值,在页面可通过 ${settings.item1!} 获取值。
  5. label: item1 // 表单项的 label
  6. type: text // 表单项类型:普通文本框
  7. placeholder: '' // 表单项的 placeholder,一般给用户提示
  8. default: '' // 表单项的默认值
  9. description: '' // 描述,一般用于说明该设置的具体用途
  10. # 颜色选择框
  11. item1:
  12. name: item1 // 设置项的 name 值,在页面可通过 ${settings.item1!} 获取值。
  13. label: item1 // 表单项的 label
  14. type: color // 表单项类型:颜色选择框
  15. placeholder: '' // 表单项的 placeholder,一般给用户提示
  16. default: '' // 表单项的默认值
  17. description: '' // 描述,一般用于说明该设置的具体用途
  18. # 附件选择框
  19. item1:
  20. name: item1 // 设置项的 name 值,在页面可通过 ${settings.item1!} 获取值。
  21. label: item1 // 表单项的 label
  22. type: attachment // 表单项类型:颜色选择框
  23. placeholder: '' // 表单项的 placeholder,一般给用户提示
  24. default: '' // 表单项的默认值
  25. description: '' // 描述,一般用于说明该设置的具体用途
  26. # 多行文本框
  27. item2: // 设置项的 name 值,在页面可通过 ${settings.item2!} 获取值。
  28. name: item2
  29. label: item2 // 同上
  30. type: textarea // 表单项类型:多行文本框
  31. placeholder: '' // 同上
  32. default: '' // 同上
  33. description: '' // 描述,一般用于说明该设置的具体用途
  34. # 单选框
  35. item3:
  36. name: item3 // 同上
  37. label: item3_label // 同上
  38. type: radio // 表单项类型:单选框
  39. data-type: bool // 数据类型:bool,string,long,double
  40. default: value1 // 同上
  41. description: '' // 描述,一般用于说明该设置的具体用途
  42. options: // 选项
  43. - value: value1 // 值
  44. label: label1 // 说明
  45. - value: value2
  46. label: label2
  47. # 下拉框
  48. item4:
  49. name: item4 // 同上
  50. label: item4 // 同上
  51. type: select // 表单项类型:下拉框
  52. data-type: bool // 数据类型:bool,string,long,double
  53. default: value1 // 同上
  54. description: '' // 描述,一般用于说明该设置的具体用途
  55. options: // 选项
  56. - value: value1 // 值
  57. label: label1 // 说明
  58. - value: value2
  59. label: label2

一个例子

假设我们的配置文件如下:

  1. general:
  2. label: 基础设置
  3. items:
  4. index_title:
  5. name: index_title
  6. label: 首页标题
  7. type: text
  8. description: '注意:将覆盖博客标题'
  9. background_cover:
  10. name: background_cover
  11. label: 首页背景图
  12. type: attachment
  13. default: '/casper/assets/images/blog-cover.jpg'
  14. description: '设置首页的背景图,你可以点击右边的选择按钮选择图片。'
  15. background_color:
  16. name: background_color
  17. label: 首页背景颜色
  18. type: color
  19. default: '#fff'
  20. music_enabled:
  21. name: music_enabled
  22. label: 背景音乐
  23. type: radio
  24. data-type: bool
  25. default: false
  26. description: '是否开启背景音乐,默认为 false'
  27. options:
  28. - value: true
  29. label: 开启
  30. - value: false
  31. label: 关闭
  32. code_pretty:
  33. name: code_pretty
  34. label: 文章代码高亮主题
  35. type: select
  36. default: Default
  37. options:
  38. - value: Default
  39. label: Default
  40. - value: Coy
  41. label: Coy
  42. - value: Dark
  43. label: Dark
  44. - value: Okaidia
  45. label: Okaidia
  46. - value: Solarized Light
  47. label: Solarized Light
  48. - value: Tomorrow Night
  49. label: Tomorrow Night
  50. - value: Twilight
  51. label: Twilight

页面取值:

  1. // 获取首页标题
  2. <#if settings.index_title?? && settings.index_title != ''>
  3. <h1>${settings.index_title!}</h1>
  4. </#if>
  1. // 获取背景图片
  2. <#if settings.background_cover?? && settings.background_cover != ''>
  3. <img src="${settings.background_cover!}">
  4. </#if>
  1. // 获取背景颜色
  2. <style>
  3. body{
  4. <#if settings.background_color?? && settings.background_color != ''>
  5. background-color: ${settings.background_color!}
  6. <#else>
  7. background-color: #fff
  8. </#if>
  9. }
  10. </style>
  11. 或者
  12. <style>
  13. body{
  14. background-color: ${settings.background_color!'#fff'}
  15. }
  16. </style>
  1. // 判断是否开启背景音乐
  2. <#if settings.music_enabled!false>
  3. do something...
  4. </#if>
  1. // 获取代码高亮主题
  2. <link rel="stylesheet" type="text/css" href="${theme_base!}/assets/prism/css/prism-${settings.code_pretty!'Default'}.css" />
  3. <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