[教程] PageCMS配置示例

11248 字
56 分钟
[教程] PageCMS配置示例

前言#

最近在QQ群看到了很多大佬用PageCMS写文章,正好看到有老哥分享。所以我这借用DeepSeek和ZCode将他的配置文件适配到了Firefly最新版本。现分享如下


第二版:内容按图片输入方案分隔。#

# Pages CMS 配置 - Firefly 博客
# 文件名必须为仓库根目录下的 .pages.yml(Pages CMS 只读取这个文件名)
# 文档: https://pagescms.org/docs/configuration/
media:
# 文章配图 - 对应 src/content/posts/images/
# 写入 frontmatter 的值形如 images/firefly2.avif(相对文章文件的路径)
# 注意:位于子目录的文章(如 guide/index.md)需要手动写成 ../images/xxx.avif
- name: post-images
label: 文章配图
input: src/content/posts/images
output: images
categories: [image]
# 项目配图 - 对应 src/content/projects/images/
- name: project-images
label: 项目配图
input: src/content/projects/images
output: images
categories: [image]
# 相册图片 - 对应 public/gallery/<相册id>/
# 相册的 id 与说明在 src/config/galleryConfig.ts 中配置
- name: gallery
label: 相册图片
input: public/gallery
output: /gallery
categories: [image]
# 主题自带图片 - 对应 src/assets/images/(头像、壁纸、Logo 等,构建时会被优化)
- name: site-images
label: 主题图片
input: src/assets/images
output: assets/images
categories: [image]
# 公共静态资源 - 对应 public/assets/(音乐、歌词、封面、打赏二维码、广告图等,不经过构建优化)
- name: public-assets
label: 公共资源
input: public/assets
output: /assets
categories: [image, audio]
content:
# ============================================================
# 📝 内容页面
# ============================================================
- name: content-pages
label: 📝 内容页面
type: group
items:
# 博客文章
- name: posts
label: 📝 博客文章
type: collection
path: src/content/posts
format: yaml-frontmatter
# 文件名即默认 URL,中文标题会被转换为空值,请手动填写英文/拼音文件名;
# 也可以留空 slug,仅依靠文件名作为文章地址
filename:
template: "{primary}.md"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, tags, category, draft, pinned]
sort: [published, title]
search: [title, description, tags, category]
default:
sort: published
order: desc
fields:
- name: title
label: 标题
type: string
required: true
- name: published
label: 发布时间
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: updated
label: 更新时间
type: date
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: pinned
label: 置顶
type: boolean
default: false
- name: description
label: 文章摘要
type: text
description: 简短描述,留空则自动截取正文
- name: image
label: 封面图
type: image
options:
media: post-images
description: >-
支持 images/xxx.avif(相对文章目录)、/assets/images/xxx.avif(public 目录)或完整 URL。
另外可填入 api 使用随机封面图(需先在 coverImageConfig.ts 中开启 randomCoverImage.enable);
api 无法通过本控件输入,需手动编辑文章 frontmatter,且不要点封面图右上角的删除按钮
- name: tags
label: 标签
type: string
list: true
description: 每项一个标签,无需加引号
- name: category
label: 分类
type: string
description: 文章分类(如"文章示例"、"技术笔记")
- name: series
label: 所属系列
type: string
description: 留空表示不属于任何系列
- name: seriesOrder
label: 系列内排序
type: number
description: 数字越小越靠前,仅在填写了所属系列时生效
- name: slug
label: URL 路径(slug)
type: string
description: 自定义文章 URL,留空则使用文件名
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: author
label: 作者
type: string
description: 覆盖默认作者名(通常留空)
- name: sourceLink
label: 原文链接
type: string
description: 转载/翻译文章的原始出处
- name: licenseName
label: 许可协议名称
type: string
description: 如 CC BY-NC-SA 4.0
- name: licenseUrl
label: 许可协议链接
type: string
- name: comment
label: 启用评论
type: boolean
default: true
- name: password
label: 文章密码
type: string
description: 设置后需要密码才能查看(留空为公开)
- name: passwordHint
label: 密码提示
type: string
description: 提示访问者密码是什么
- name: body
label: 正文
type: rich-text
required: true
# 动态(说说)
- name: dynamic
label: 💬 动态
type: collection
path: src/content/dynamic
format: yaml-frontmatter
description: >-
每条动态一个 md 文件,文件名即创建时间(与 scripts/new-dynamic.js 生成规则一致,
也可用 pnpm new-dynamic "内容" 生成)。本集合关闭了文件名输入框,新建时按当前时间自动命名
filename:
template: "{year}-{month}-{day}-{hour}{minute}{second}.md"
field: false
view:
primary: published
fields: [published, pinned, location]
sort: [published, location]
search: [location]
default:
sort: published
order: desc
fields:
- name: published
label: 发布时间
type: date
required: true
options:
time: true
format: "yyyy-MM-dd HH:mm:ss"
- name: pinned
label: 置顶
type: boolean
default: false
- name: location
label: 位置
type: string
description: 显示在动态时间旁的地点,可留空
- name: body
label: 内容
type: rich-text
required: true
# 项目展示
- name: projects
label: 🚀 项目
type: collection
path: src/content/projects
format: yaml-frontmatter
filename:
template: "{primary}.md"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, status, order, draft]
sort: [published, order, title]
search: [title, description, tags]
default:
sort: published
order: desc
fields:
- name: title
label: 项目名称
type: string
required: true
- name: slug
label: URL 路径(slug)
type: string
description: 自定义项目 URL,留空则使用文件名
- name: published
label: 发布日期
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: order
label: 排序权重
type: number
description: 数字越大越靠前;未设置则按发布日期降序
- name: description
label: 项目简介
type: text
- name: image
label: 封面图
type: image
options:
media: project-images
description: 支持 images/xxx.avif(相对项目目录)、/assets/images/xxx.avif(public 目录)或完整 URL
- name: tags
label: 标签
type: string
list: true
- name: status
label: 项目状态
type: select
options:
values:
- { name: planning, label: 计划中 }
- { name: developing, label: 开发中 }
- { name: published, label: 已发布 }
- { name: archived, label: 已归档 }
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: link
label: 相关链接
type: object
list: true
fields:
- name: label
label: 链接名称
type: string
required: true
- name: icon
label: 图标
type: string
description: astro-icon 图标名(如 fa7-brands:github)、图片地址,留空则显示名称首字母
- name: value
label: 链接地址
type: string
required: true
- name: body
label: 项目说明
type: rich-text
# 关于页面
- name: about
label: 📄 关于页面
type: file
path: src/content/spec/about.md
format: yaml-frontmatter
fields:
- name: title
label: 页面标题
type: string
default: "关于我"
- name: body
label: 正文
type: rich-text
# 友情链接
- name: friends
label: 🔗 友情链接
type: file
path: src/content/spec/friends.mdx
format: yaml-frontmatter
fields:
- name: title
label: 页面标题
type: string
default: 友情链接
- name: description
label: 页面描述
type: string
- name: body
label: 正文
type: code
options:
format: mdx
description: MDX 格式(包含 JSX 组件),使用代码模式编辑
# 留言板
- name: guestbook
label: 📬 留言板
type: file
path: src/content/spec/guestbook.md
format: yaml-frontmatter
fields:
- name: title
label: 页面标题
type: string
default: 留言板
- name: description
label: 页面描述
type: string
- name: body
label: 正文
type: rich-text
- name: content-pages
label: 📝 内容-自由输入
type: group
items:
# 博客文章(自由输入封面)
- name: posts-free
label: 📝 博客文章(自由输入封面)
type: collection
path: src/content/posts
format: yaml-frontmatter
# 文件名即默认 URL,中文标题会被转换为空值,请手动填写英文/拼音文件名;
# 也可以留空 slug,仅依靠文件名作为文章地址
filename:
template: "{primary}.md"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, tags, category, draft, pinned]
sort: [published, title]
search: [title, description, tags, category]
default:
sort: published
order: desc
fields:
- name: title
label: 标题
type: string
required: true
- name: published
label: 发布时间
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: updated
label: 更新时间
type: date
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: pinned
label: 置顶
type: boolean
default: false
- name: description
label: 文章摘要
type: text
description: 简短描述,留空则自动截取正文
- name: image
label: 封面图(自由输入)
type: string
description: >-
可直接手填:api(随机封面,需先在 coverImageConfig.ts 中开启 randomCoverImage.enable)、
完整图片 URL,或相对路径(如 images/xxx.avif)。留空则不显示封面
- name: tags
label: 标签
type: string
list: true
description: 每项一个标签,无需加引号
- name: category
label: 分类
type: string
description: 文章分类(如"文章示例"、"技术笔记")
- name: series
label: 所属系列
type: string
description: 留空表示不属于任何系列
- name: seriesOrder
label: 系列内排序
type: number
description: 数字越小越靠前,仅在填写了所属系列时生效
- name: slug
label: URL 路径(slug)
type: string
description: 自定义文章 URL,留空则使用文件名
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: author
label: 作者
type: string
description: 覆盖默认作者名(通常留空)
- name: sourceLink
label: 原文链接
type: string
description: 转载/翻译文章的原始出处
- name: licenseName
label: 许可协议名称
type: string
description: 如 CC BY-NC-SA 4.0
- name: licenseUrl
label: 许可协议链接
type: string
- name: comment
label: 启用评论
type: boolean
default: true
- name: password
label: 文章密码
type: string
description: 设置后需要密码才能查看(留空为公开)
- name: passwordHint
label: 密码提示
type: string
description: 提示访问者密码是什么
- name: body
label: 正文
type: rich-text
required: true
# 项目展示(自由输入封面)
- name: projects-free
label: 🚀 项目(自由输入封面)
type: collection
path: src/content/projects
format: yaml-frontmatter
filename:
template: "{primary}.md"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, status, order, draft]
sort: [published, order, title]
search: [title, description, tags]
default:
sort: published
order: desc
fields:
- name: title
label: 项目名称
type: string
required: true
- name: slug
label: URL 路径(slug)
type: string
description: 自定义项目 URL,留空则使用文件名
- name: published
label: 发布日期
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: order
label: 排序权重
type: number
description: 数字越大越靠前;未设置则按发布日期降序
- name: description
label: 项目简介
type: text
- name: image
label: 封面图(自由输入)
type: string
description: >-
可直接手填完整图片 URL 或相对路径(如 images/xxx.avif)。
项目封面不支持 api 随机图,留空则不显示封面
- name: tags
label: 标签
type: string
list: true
- name: status
label: 项目状态
type: select
options:
values:
- { name: planning, label: 计划中 }
- { name: developing, label: 开发中 }
- { name: published, label: 已发布 }
- { name: archived, label: 已归档 }
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: link
label: 相关链接
type: object
list: true
fields:
- name: label
label: 链接名称
type: string
required: true
- name: icon
label: 图标
type: string
description: astro-icon 图标名(如 fa7-brands:github)、图片地址,留空则显示名称首字母
- name: value
label: 链接地址
type: string
required: true
- name: body
label: 项目说明
type: rich-text
- name: content-pages
label: 📝 内容-MDX
type: group
items:
# 博客文章(MDX)- Pages CMS 每个集合只能对应一种扩展名,
# 所以 .mdx 文章必须单独开一个集合,字段与上面的 posts 保持一致
- name: posts-mdx
label: 📝 博客文章(MDX)
type: collection
path: src/content/posts
format: yaml-frontmatter
filename:
template: "{primary}.mdx"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, tags, category, draft, pinned]
sort: [published, title]
search: [title, description, tags, category]
default:
sort: published
order: desc
fields:
- name: title
label: 标题
type: string
required: true
- name: published
label: 发布时间
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: updated
label: 更新时间
type: date
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: pinned
label: 置顶
type: boolean
default: false
- name: description
label: 文章摘要
type: text
description: 简短描述,留空则自动截取正文
- name: image
label: 封面图
type: image
options:
media: post-images
description: 支持 images/xxx.avif(相对文章目录)、/assets/images/xxx.avif(public 目录)或完整 URL。 另外可填入 api 使用随机封面图(需先在 coverImageConfig.ts 中开启 randomCoverImage.enable); api 无法通过本控件输入,需手动编辑文章 frontmatter,且不要点封面图右上角的删除按钮
- name: tags
label: 标签
type: string
list: true
description: 每项一个标签,无需加引号
- name: category
label: 分类
type: string
description: 文章分类(如"文章示例"、"技术笔记")
- name: series
label: 所属系列
type: string
description: 留空表示不属于任何系列
- name: seriesOrder
label: 系列内排序
type: number
description: 数字越小越靠前,仅在填写了所属系列时生效
- name: slug
label: URL 路径(slug)
type: string
description: 自定义文章 URL,留空则使用文件名
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: author
label: 作者
type: string
description: 覆盖默认作者名(通常留空)
- name: sourceLink
label: 原文链接
type: string
description: 转载/翻译文章的原始出处
- name: licenseName
label: 许可协议名称
type: string
description: 如 CC BY-NC-SA 4.0
- name: licenseUrl
label: 许可协议链接
type: string
- name: comment
label: 启用评论
type: boolean
default: true
- name: password
label: 文章密码
type: string
description: 设置后需要密码才能查看(留空为公开)
- name: passwordHint
label: 密码提示
type: string
description: 提示访问者密码是什么
- name: body
label: 正文(MDX 源码)
type: code
options:
format: mdx
description: MDX 源码原文,含 JSX 组件与 import 语句,只能以代码模式编辑
# 项目展示(Markdown 文章)
- name: projects-mdx
label: 🚀 项目(MDX)
type: collection
path: src/content/projects
format: yaml-frontmatter
filename:
template: "{primary}.mdx"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, status, order, draft]
sort: [published, order, title]
search: [title, description, tags]
default:
sort: published
order: desc
fields:
- name: title
label: 项目名称
type: string
required: true
- name: slug
label: URL 路径(slug)
type: string
description: 自定义项目 URL,留空则使用文件名
- name: published
label: 发布日期
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: order
label: 排序权重
type: number
description: 数字越大越靠前;未设置则按发布日期降序
- name: description
label: 项目简介
type: text
- name: image
label: 封面图
type: image
options:
media: project-images
description: 支持 images/xxx.avif(相对项目目录)、/assets/images/xxx.avif(public 目录)或完整 URL
- name: tags
label: 标签
type: string
list: true
- name: status
label: 项目状态
type: select
options:
values:
- { name: planning, label: 计划中 }
- { name: developing, label: 开发中 }
- { name: published, label: 已发布 }
- { name: archived, label: 已归档 }
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: link
label: 相关链接
type: object
list: true
fields:
- name: label
label: 链接名称
type: string
required: true
- name: icon
label: 图标
type: string
description: astro-icon 图标名(如 fa7-brands:github)、图片地址,留空则显示名称首字母
- name: value
label: 链接地址
type: string
required: true
- name: body
label: 项目说明(MDX 源码)
type: code
options:
format: mdx
description: MDX 源码原文,含 JSX 组件与 import 语句,只能以代码模式编辑
- name: content-pages
label: 📝 内容-MDX+自由输入
type: group
items:
# 博客文章(MDX·自由输入封面)
- name: posts-mdx-free
label: 📝 博客文章(MDX·自由输入封面)
type: collection
path: src/content/posts
format: yaml-frontmatter
filename:
template: "{primary}.mdx"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, tags, category, draft, pinned]
sort: [published, title]
search: [title, description, tags, category]
default:
sort: published
order: desc
fields:
- name: title
label: 标题
type: string
required: true
- name: published
label: 发布时间
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: updated
label: 更新时间
type: date
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: pinned
label: 置顶
type: boolean
default: false
- name: description
label: 文章摘要
type: text
description: 简短描述,留空则自动截取正文
- name: image
label: 封面图(自由输入)
type: string
description: >-
可直接手填:api(随机封面,需先在 coverImageConfig.ts 中开启 randomCoverImage.enable)、
完整图片 URL,或相对路径(如 images/xxx.avif)。留空则不显示封面
- name: tags
label: 标签
type: string
list: true
description: 每项一个标签,无需加引号
- name: category
label: 分类
type: string
description: 文章分类(如"文章示例"、"技术笔记")
- name: series
label: 所属系列
type: string
description: 留空表示不属于任何系列
- name: seriesOrder
label: 系列内排序
type: number
description: 数字越小越靠前,仅在填写了所属系列时生效
- name: slug
label: URL 路径(slug)
type: string
description: 自定义文章 URL,留空则使用文件名
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: author
label: 作者
type: string
description: 覆盖默认作者名(通常留空)
- name: sourceLink
label: 原文链接
type: string
description: 转载/翻译文章的原始出处
- name: licenseName
label: 许可协议名称
type: string
description: 如 CC BY-NC-SA 4.0
- name: licenseUrl
label: 许可协议链接
type: string
- name: comment
label: 启用评论
type: boolean
default: true
- name: password
label: 文章密码
type: string
description: 设置后需要密码才能查看(留空为公开)
- name: passwordHint
label: 密码提示
type: string
description: 提示访问者密码是什么
- name: body
label: 正文(MDX 源码)
type: code
options:
format: mdx
description: MDX 源码原文,含 JSX 组件与 import 语句,只能以代码模式编辑
# 项目展示(MDX·自由输入封面)
- name: projects-mdx-free
label: 🚀 项目(MDX·自由输入封面)
type: collection
path: src/content/projects
format: yaml-frontmatter
filename:
template: "{primary}.mdx"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, status, order, draft]
sort: [published, order, title]
search: [title, description, tags]
default:
sort: published
order: desc
fields:
- name: title
label: 项目名称
type: string
required: true
- name: slug
label: URL 路径(slug)
type: string
description: 自定义项目 URL,留空则使用文件名
- name: published
label: 发布日期
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: order
label: 排序权重
type: number
description: 数字越大越靠前;未设置则按发布日期降序
- name: description
label: 项目简介
type: text
- name: image
label: 封面图(自由输入)
type: string
description: >-
可直接手填完整图片 URL 或相对路径(如 images/xxx.avif)。
项目封面不支持 api 随机图,留空则不显示封面
- name: tags
label: 标签
type: string
list: true
- name: status
label: 项目状态
type: select
options:
values:
- { name: planning, label: 计划中 }
- { name: developing, label: 开发中 }
- { name: published, label: 已发布 }
- { name: archived, label: 已归档 }
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: link
label: 相关链接
type: object
list: true
fields:
- name: label
label: 链接名称
type: string
required: true
- name: icon
label: 图标
type: string
description: astro-icon 图标名(如 fa7-brands:github)、图片地址,留空则显示名称首字母
- name: value
label: 链接地址
type: string
required: true
- name: body
label: 项目说明(MDX 源码)
type: code
options:
format: mdx
description: MDX 源码原文,含 JSX 组件与 import 语句,只能以代码模式编辑
# ============================================================
# ⚙️ 站点设置
# ============================================================
- name: site-settings
label: ⚙️ 站点设置
type: group
description: 核心站点配置,包括标题、域名、SEO、个人信息等
items:
- name: site-config
label: 🌐 站点主配置
type: file
path: src/config/siteConfig.ts
format: code
description: 站点标题、URL、主题色、分页、页面开关、Bangumi 等核心设置
- name: profile-config
label: 👤 个人信息
type: file
path: src/config/profileConfig.ts
format: code
description: 头像、昵称、签名、社交链接等个人资料配置
- name: announcement-config
label: 📢 公告栏
type: file
path: src/config/announcementConfig.ts
format: code
description: 博客顶部公告栏的标题、内容和链接配置
- name: license-config
label: 📜 许可协议
type: file
path: src/config/licenseConfig.ts
format: code
description: 文章底部版权声明(如 CC BY-NC-SA 4.0)
# ============================================================
# 🎨 布局与外观
# ============================================================
- name: layout-appearance
label: 🎨 布局与外观
type: group
description: 导航栏、侧边栏、壁纸、字体等视觉相关配置
items:
- name: nav-bar-config
label: 🧭 导航栏
type: file
path: src/config/navBarConfig.ts
format: code
description: 导航栏菜单项、LinkPresets 链接预设和搜索配置
- name: sidebar-config
label: 📐 侧边栏布局
type: file
path: src/config/sidebarConfig.ts
format: code
description: 侧边栏位置、组件(个人资料、公告、音乐、分类、标签等)的显示和排序
- name: footer-html
label: 📏 页脚 HTML
type: file
path: src/config/FooterConfig.html
format: code
description: 页脚自定义 HTML 内容(备案号、版权信息等),留空则使用默认页脚
- name: font-config
label: 🔤 字体设置
type: file
path: src/config/fontConfig.ts
format: code
description: 全局字体、横幅字体、Google Fonts、子集化等配置
- name: cover-image-config
label: 🖼️ 文章封面图
type: file
path: src/config/coverImageConfig.ts
format: code
description: 文章详情页封面图显示和随机图 API 配置
- name: background-wallpaper
label: 🏞️ 背景壁纸
type: file
path: src/config/backgroundWallpaper.ts
format: code
description: 全屏壁纸、横幅壁纸、视频背景、水波纹、渐变等背景特效
- name: expressive-code-config
label: 💻 代码块样式
type: file
path: src/config/expressiveCodeConfig.ts
format: code
description: 代码高亮主题、折叠插件、语言徽章等代码块配置
- name: display-settings-config
label: 🎛️ 显示设置面板
type: file
path: src/config/displaySettingsConfig.ts
format: code
description: 前台设置面板总开关及各设置项(主题色、布局、壁纸、特效)开关
# ============================================================
# 🔧 功能配置
# ============================================================
- name: feature-settings
label: 🔧 功能配置
type: group
description: 评论、统计、音乐、打赏、相册、动态、书签等功能模块配置
items:
- name: comment-config
label: 💬 评论系统
type: file
path: src/config/commentConfig.ts
format: code
description: Twikoo / Waline / Giscus / Artalk / Disqus 评论系统配置
- name: analytics-config
label: 📊 数据统计
type: file
path: src/config/analyticsConfig.ts
format: code
description: Google Analytics、Microsoft Clarity、Umami、51la 统计配置
- name: music-config
label: 🎵 音乐播放器
type: file
path: src/config/musicConfig.ts
format: code
description: 音乐播放模式(Meting API / 本地音乐)、播放列表、歌词设置
- name: sponsor-config
label: 💰 打赏页面
type: file
path: src/config/sponsorConfig.ts
format: code
description: 打赏用途、支付方式(支付宝/微信/Ko-fi/爱发电)、赞助者列表
- name: friends-data
label: 🔗 友链数据
type: file
path: src/config/friendsConfig.ts
format: code
description: 友链页面设置和友链列表(站点名、头像、描述、链接、标签、权重)
- name: gallery-config
label: 🖼️ 相册配置
type: file
path: src/config/galleryConfig.ts
format: code
description: 相册列表(ID、名称、描述、地点、日期、标签、密码)和瀑布流列宽,图片放在 public/gallery/<相册id>/
- name: dynamic-config
label: 💬 动态页面
type: file
path: src/config/dynamicConfig.ts
format: code
description: 动态页面标题、评论开关、每页条数,以及本地 JSON / Memos 数据源切换
- name: booknav-config
label: 🔖 书签导航
type: file
path: src/config/booknavConfig.ts
format: code
description: 书签导航页面标题、favicon 接口和书签分类组(开发、项目、设计、工具等)
- name: effects-config
label: 🌸 樱花特效
type: file
path: src/config/effectsConfig.ts
format: code
description: 樱花飘落动画的数量、速度、尺寸、透明度等参数
- name: pio-config
label: 🎭 看板娘
type: file
path: src/config/pioConfig.ts
format: code
description: Spine / Live2D 看板娘模型、位置、交互、气泡提示配置
- name: mermaid-config
label: 🧩 Mermaid 图表
type: file
path: src/config/mermaidConfig.ts
format: code
description: Mermaid 图表的亮色 / 暗色主题配置
- name: plantuml-config
label: 📐 PlantUML 图表
type: file
path: src/config/plantumlConfig.ts
format: code
description: PlantUML 服务器地址和明暗主题配置
settings:
content:
# true:保存时保留配置里未声明的 frontmatter 字段(如 slug、自定义字段),避免被清空
merge: true
# ============================================================
# 📌 参考:可自由输入「api 或任意 URL」的图片字段写法
# ============================================================
# 上面所有 image 字段用的都是 type: image(带媒体库的上传 / 选择按钮)。
# 如果改成下面这样用 type: string,就能在网页上直接手打 api(随机封面)
# 或任意图片 URL,代价是失去媒体库的选择按钮。
#
# - name: image
# label: 封面图
# type: string
# description: 填 api 使用随机封面,也可填 https:// 完整 URL
#
# ── 关于可选校验 pattern ───────────────────────────────────
# Pages CMS 的 pattern 内部是 z.string().regex(),有两点要注意:
# 1. 不会自动加首尾锚定,^ $ 必须自己写;
# 2. 「留空」提交的是空字符串 ""(不是 undefined),而字段非必填时
# 只会包一层 .optional(),空字符串仍然会被 pattern 校验。
# 因此 pattern 必须显式允许空值,否则把封面留空的文章将无法保存:
#
# pattern: "^(?:|api|https?://.+)$" # ✅ 允许 留空 / api / http(s) URL
# pattern: "^(api|https?://.+)$" # ❌ 留空会被拒绝,文章存不回去
#
# 完全不写 pattern 就是不做校验,可以自由输入任何内容(包括 images/xxx.avif
# 这类相对路径)。仅在确实想约束取值范围时才加。
#
# ── 两个提醒 ───────────────────────────────────────────────
# 1. api 只在文章上生效:随机封面逻辑在 utils/image-utils.ts 的
# processCoverImageSync() 里,只有 PostCard.astro 与 posts/[...slug].astro
# 调用它;项目页没有这段逻辑,填 api 不会出随机图。生效前还需在
# coverImageConfig.ts 中把 randomCoverImage.enable 设为 true。
# 2. 使用 type: string 后,读到旧值不会再做路径归一化,存进去什么就是什么。

第一版:内容混一块。#

# Pages CMS 配置 - Firefly 博客
# 文件名必须为仓库根目录下的 .pages.yml(Pages CMS 只读取这个文件名)
# 文档: https://pagescms.org/docs/configuration/
media:
# 文章配图 - 对应 src/content/posts/images/
# 写入 frontmatter 的值形如 images/firefly2.avif(相对文章文件的路径)
# 注意:位于子目录的文章(如 guide/index.md)需要手动写成 ../images/xxx.avif
- name: post-images
label: 文章配图
input: src/content/posts/images
output: images
categories: [image]
# 项目配图 - 对应 src/content/projects/images/
- name: project-images
label: 项目配图
input: src/content/projects/images
output: images
categories: [image]
# 相册图片 - 对应 public/gallery/<相册id>/
# 相册的 id 与说明在 src/config/galleryConfig.ts 中配置
- name: gallery
label: 相册图片
input: public/gallery
output: /gallery
categories: [image]
# 主题自带图片 - 对应 src/assets/images/(头像、壁纸、Logo 等,构建时会被优化)
- name: site-images
label: 主题图片
input: src/assets/images
output: assets/images
categories: [image]
# 公共静态资源 - 对应 public/assets/(音乐、歌词、封面、打赏二维码、广告图等,不经过构建优化)
- name: public-assets
label: 公共资源
input: public/assets
output: /assets
categories: [image, audio]
content:
# ============================================================
# 📝 内容页面
# ============================================================
- name: content-pages
label: 📝 内容页面
type: group
items:
# 博客文章
- name: posts
label: 📝 博客文章
type: collection
path: src/content/posts
format: yaml-frontmatter
# 文件名即默认 URL,中文标题会被转换为空值,请手动填写英文/拼音文件名;
# 也可以留空 slug,仅依靠文件名作为文章地址
filename:
template: "{primary}.md"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, tags, category, draft, pinned]
sort: [published, title]
search: [title, description, tags, category]
default:
sort: published
order: desc
fields:
- name: title
label: 标题
type: string
required: true
- name: published
label: 发布时间
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: updated
label: 更新时间
type: date
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: pinned
label: 置顶
type: boolean
default: false
- name: description
label: 文章摘要
type: text
description: 简短描述,留空则自动截取正文
- name: image
label: 封面图
type: image
options:
media: post-images
description: >-
支持 images/xxx.avif(相对文章目录)、/assets/images/xxx.avif(public 目录)或完整 URL。
另外可填入 api 使用随机封面图(需先在 coverImageConfig.ts 中开启 randomCoverImage.enable);
api 无法通过本控件输入,需手动编辑文章 frontmatter,且不要点封面图右上角的删除按钮
- name: tags
label: 标签
type: string
list: true
description: 每项一个标签,无需加引号
- name: category
label: 分类
type: string
description: 文章分类(如"文章示例"、"技术笔记")
- name: series
label: 所属系列
type: string
description: 留空表示不属于任何系列
- name: seriesOrder
label: 系列内排序
type: number
description: 数字越小越靠前,仅在填写了所属系列时生效
- name: slug
label: URL 路径(slug)
type: string
description: 自定义文章 URL,留空则使用文件名
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: author
label: 作者
type: string
description: 覆盖默认作者名(通常留空)
- name: sourceLink
label: 原文链接
type: string
description: 转载/翻译文章的原始出处
- name: licenseName
label: 许可协议名称
type: string
description: 如 CC BY-NC-SA 4.0
- name: licenseUrl
label: 许可协议链接
type: string
- name: comment
label: 启用评论
type: boolean
default: true
- name: password
label: 文章密码
type: string
description: 设置后需要密码才能查看(留空为公开)
- name: passwordHint
label: 密码提示
type: string
description: 提示访问者密码是什么
- name: body
label: 正文
type: rich-text
required: true
# 博客文章(自由输入封面)
- name: posts-free
label: 📝 博客文章(自由输入封面)
type: collection
path: src/content/posts
format: yaml-frontmatter
# 文件名即默认 URL,中文标题会被转换为空值,请手动填写英文/拼音文件名;
# 也可以留空 slug,仅依靠文件名作为文章地址
filename:
template: "{primary}.md"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, tags, category, draft, pinned]
sort: [published, title]
search: [title, description, tags, category]
default:
sort: published
order: desc
fields:
- name: title
label: 标题
type: string
required: true
- name: published
label: 发布时间
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: updated
label: 更新时间
type: date
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: pinned
label: 置顶
type: boolean
default: false
- name: description
label: 文章摘要
type: text
description: 简短描述,留空则自动截取正文
- name: image
label: 封面图(自由输入)
type: string
description: >-
可直接手填:api(随机封面,需先在 coverImageConfig.ts 中开启 randomCoverImage.enable)、
完整图片 URL,或相对路径(如 images/xxx.avif)。留空则不显示封面
- name: tags
label: 标签
type: string
list: true
description: 每项一个标签,无需加引号
- name: category
label: 分类
type: string
description: 文章分类(如"文章示例"、"技术笔记")
- name: series
label: 所属系列
type: string
description: 留空表示不属于任何系列
- name: seriesOrder
label: 系列内排序
type: number
description: 数字越小越靠前,仅在填写了所属系列时生效
- name: slug
label: URL 路径(slug)
type: string
description: 自定义文章 URL,留空则使用文件名
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: author
label: 作者
type: string
description: 覆盖默认作者名(通常留空)
- name: sourceLink
label: 原文链接
type: string
description: 转载/翻译文章的原始出处
- name: licenseName
label: 许可协议名称
type: string
description: 如 CC BY-NC-SA 4.0
- name: licenseUrl
label: 许可协议链接
type: string
- name: comment
label: 启用评论
type: boolean
default: true
- name: password
label: 文章密码
type: string
description: 设置后需要密码才能查看(留空为公开)
- name: passwordHint
label: 密码提示
type: string
description: 提示访问者密码是什么
- name: body
label: 正文
type: rich-text
required: true
# 博客文章(MDX)- Pages CMS 每个集合只能对应一种扩展名,
# 所以 .mdx 文章必须单独开一个集合,字段与上面的 posts 保持一致
- name: posts-mdx
label: 📝 博客文章(MDX)
type: collection
path: src/content/posts
format: yaml-frontmatter
filename:
template: "{primary}.mdx"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, tags, category, draft, pinned]
sort: [published, title]
search: [title, description, tags, category]
default:
sort: published
order: desc
fields:
- name: title
label: 标题
type: string
required: true
- name: published
label: 发布时间
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: updated
label: 更新时间
type: date
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: pinned
label: 置顶
type: boolean
default: false
- name: description
label: 文章摘要
type: text
description: 简短描述,留空则自动截取正文
- name: image
label: 封面图
type: image
options:
media: post-images
description: 支持 images/xxx.avif(相对文章目录)、/assets/images/xxx.avif(public 目录)或完整 URL。 另外可填入 api 使用随机封面图(需先在 coverImageConfig.ts 中开启 randomCoverImage.enable); api 无法通过本控件输入,需手动编辑文章 frontmatter,且不要点封面图右上角的删除按钮
- name: tags
label: 标签
type: string
list: true
description: 每项一个标签,无需加引号
- name: category
label: 分类
type: string
description: 文章分类(如"文章示例"、"技术笔记")
- name: series
label: 所属系列
type: string
description: 留空表示不属于任何系列
- name: seriesOrder
label: 系列内排序
type: number
description: 数字越小越靠前,仅在填写了所属系列时生效
- name: slug
label: URL 路径(slug)
type: string
description: 自定义文章 URL,留空则使用文件名
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: author
label: 作者
type: string
description: 覆盖默认作者名(通常留空)
- name: sourceLink
label: 原文链接
type: string
description: 转载/翻译文章的原始出处
- name: licenseName
label: 许可协议名称
type: string
description: 如 CC BY-NC-SA 4.0
- name: licenseUrl
label: 许可协议链接
type: string
- name: comment
label: 启用评论
type: boolean
default: true
- name: password
label: 文章密码
type: string
description: 设置后需要密码才能查看(留空为公开)
- name: passwordHint
label: 密码提示
type: string
description: 提示访问者密码是什么
- name: body
label: 正文(MDX 源码)
type: code
options:
format: mdx
description: MDX 源码原文,含 JSX 组件与 import 语句,只能以代码模式编辑
# 博客文章(MDX·自由输入封面)
- name: posts-mdx-free
label: 📝 博客文章(MDX·自由输入封面)
type: collection
path: src/content/posts
format: yaml-frontmatter
filename:
template: "{primary}.mdx"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, tags, category, draft, pinned]
sort: [published, title]
search: [title, description, tags, category]
default:
sort: published
order: desc
fields:
- name: title
label: 标题
type: string
required: true
- name: published
label: 发布时间
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: updated
label: 更新时间
type: date
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: pinned
label: 置顶
type: boolean
default: false
- name: description
label: 文章摘要
type: text
description: 简短描述,留空则自动截取正文
- name: image
label: 封面图(自由输入)
type: string
description: >-
可直接手填:api(随机封面,需先在 coverImageConfig.ts 中开启 randomCoverImage.enable)、
完整图片 URL,或相对路径(如 images/xxx.avif)。留空则不显示封面
- name: tags
label: 标签
type: string
list: true
description: 每项一个标签,无需加引号
- name: category
label: 分类
type: string
description: 文章分类(如"文章示例"、"技术笔记")
- name: series
label: 所属系列
type: string
description: 留空表示不属于任何系列
- name: seriesOrder
label: 系列内排序
type: number
description: 数字越小越靠前,仅在填写了所属系列时生效
- name: slug
label: URL 路径(slug)
type: string
description: 自定义文章 URL,留空则使用文件名
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: author
label: 作者
type: string
description: 覆盖默认作者名(通常留空)
- name: sourceLink
label: 原文链接
type: string
description: 转载/翻译文章的原始出处
- name: licenseName
label: 许可协议名称
type: string
description: 如 CC BY-NC-SA 4.0
- name: licenseUrl
label: 许可协议链接
type: string
- name: comment
label: 启用评论
type: boolean
default: true
- name: password
label: 文章密码
type: string
description: 设置后需要密码才能查看(留空为公开)
- name: passwordHint
label: 密码提示
type: string
description: 提示访问者密码是什么
- name: body
label: 正文(MDX 源码)
type: code
options:
format: mdx
description: MDX 源码原文,含 JSX 组件与 import 语句,只能以代码模式编辑
# 动态(说说)
- name: dynamic
label: 💬 动态
type: collection
path: src/content/dynamic
format: yaml-frontmatter
description: >-
每条动态一个 md 文件,文件名即创建时间(与 scripts/new-dynamic.js 生成规则一致,
也可用 pnpm new-dynamic "内容" 生成)。本集合关闭了文件名输入框,新建时按当前时间自动命名
filename:
template: "{year}-{month}-{day}-{hour}{minute}{second}.md"
field: false
view:
primary: published
fields: [published, pinned, location]
sort: [published, location]
search: [location]
default:
sort: published
order: desc
fields:
- name: published
label: 发布时间
type: date
required: true
options:
time: true
format: "yyyy-MM-dd HH:mm:ss"
- name: pinned
label: 置顶
type: boolean
default: false
- name: location
label: 位置
type: string
description: 显示在动态时间旁的地点,可留空
- name: body
label: 内容
type: rich-text
required: true
# 项目展示
- name: projects
label: 🚀 项目
type: collection
path: src/content/projects
format: yaml-frontmatter
filename:
template: "{primary}.md"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, status, order, draft]
sort: [published, order, title]
search: [title, description, tags]
default:
sort: published
order: desc
fields:
- name: title
label: 项目名称
type: string
required: true
- name: slug
label: URL 路径(slug)
type: string
description: 自定义项目 URL,留空则使用文件名
- name: published
label: 发布日期
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: order
label: 排序权重
type: number
description: 数字越大越靠前;未设置则按发布日期降序
- name: description
label: 项目简介
type: text
- name: image
label: 封面图
type: image
options:
media: project-images
description: 支持 images/xxx.avif(相对项目目录)、/assets/images/xxx.avif(public 目录)或完整 URL
- name: tags
label: 标签
type: string
list: true
- name: status
label: 项目状态
type: select
options:
values:
- { name: planning, label: 计划中 }
- { name: developing, label: 开发中 }
- { name: published, label: 已发布 }
- { name: archived, label: 已归档 }
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: link
label: 相关链接
type: object
list: true
fields:
- name: label
label: 链接名称
type: string
required: true
- name: icon
label: 图标
type: string
description: astro-icon 图标名(如 fa7-brands:github)、图片地址,留空则显示名称首字母
- name: value
label: 链接地址
type: string
required: true
- name: body
label: 项目说明
type: rich-text
# 项目展示(自由输入封面)
- name: projects-free
label: 🚀 项目(自由输入封面)
type: collection
path: src/content/projects
format: yaml-frontmatter
filename:
template: "{primary}.md"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, status, order, draft]
sort: [published, order, title]
search: [title, description, tags]
default:
sort: published
order: desc
fields:
- name: title
label: 项目名称
type: string
required: true
- name: slug
label: URL 路径(slug)
type: string
description: 自定义项目 URL,留空则使用文件名
- name: published
label: 发布日期
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: order
label: 排序权重
type: number
description: 数字越大越靠前;未设置则按发布日期降序
- name: description
label: 项目简介
type: text
- name: image
label: 封面图(自由输入)
type: string
description: >-
可直接手填完整图片 URL 或相对路径(如 images/xxx.avif)。
项目封面不支持 api 随机图,留空则不显示封面
- name: tags
label: 标签
type: string
list: true
- name: status
label: 项目状态
type: select
options:
values:
- { name: planning, label: 计划中 }
- { name: developing, label: 开发中 }
- { name: published, label: 已发布 }
- { name: archived, label: 已归档 }
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: link
label: 相关链接
type: object
list: true
fields:
- name: label
label: 链接名称
type: string
required: true
- name: icon
label: 图标
type: string
description: astro-icon 图标名(如 fa7-brands:github)、图片地址,留空则显示名称首字母
- name: value
label: 链接地址
type: string
required: true
- name: body
label: 项目说明
type: rich-text
# 项目展示(Markdown 文章)
- name: projects-mdx
label: 🚀 项目(MDX)
type: collection
path: src/content/projects
format: yaml-frontmatter
filename:
template: "{primary}.mdx"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, status, order, draft]
sort: [published, order, title]
search: [title, description, tags]
default:
sort: published
order: desc
fields:
- name: title
label: 项目名称
type: string
required: true
- name: slug
label: URL 路径(slug)
type: string
description: 自定义项目 URL,留空则使用文件名
- name: published
label: 发布日期
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: order
label: 排序权重
type: number
description: 数字越大越靠前;未设置则按发布日期降序
- name: description
label: 项目简介
type: text
- name: image
label: 封面图
type: image
options:
media: project-images
description: 支持 images/xxx.avif(相对项目目录)、/assets/images/xxx.avif(public 目录)或完整 URL
- name: tags
label: 标签
type: string
list: true
- name: status
label: 项目状态
type: select
options:
values:
- { name: planning, label: 计划中 }
- { name: developing, label: 开发中 }
- { name: published, label: 已发布 }
- { name: archived, label: 已归档 }
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: link
label: 相关链接
type: object
list: true
fields:
- name: label
label: 链接名称
type: string
required: true
- name: icon
label: 图标
type: string
description: astro-icon 图标名(如 fa7-brands:github)、图片地址,留空则显示名称首字母
- name: value
label: 链接地址
type: string
required: true
- name: body
label: 项目说明(MDX 源码)
type: code
options:
format: mdx
description: MDX 源码原文,含 JSX 组件与 import 语句,只能以代码模式编辑
# 项目展示(MDX·自由输入封面)
- name: projects-mdx-free
label: 🚀 项目(MDX·自由输入封面)
type: collection
path: src/content/projects
format: yaml-frontmatter
filename:
template: "{primary}.mdx"
field: true
exclude: ["**/images/**", "**/*.avif", "**/*.webp", "**/*.png", "**/*.jpg"]
view:
primary: title
fields: [title, published, status, order, draft]
sort: [published, order, title]
search: [title, description, tags]
default:
sort: published
order: desc
fields:
- name: title
label: 项目名称
type: string
required: true
- name: slug
label: URL 路径(slug)
type: string
description: 自定义项目 URL,留空则使用文件名
- name: published
label: 发布日期
type: date
required: true
options:
time: false
format: yyyy-MM-dd
- name: draft
label: 草稿
type: boolean
default: false
- name: order
label: 排序权重
type: number
description: 数字越大越靠前;未设置则按发布日期降序
- name: description
label: 项目简介
type: text
- name: image
label: 封面图(自由输入)
type: string
description: >-
可直接手填完整图片 URL 或相对路径(如 images/xxx.avif)。
项目封面不支持 api 随机图,留空则不显示封面
- name: tags
label: 标签
type: string
list: true
- name: status
label: 项目状态
type: select
options:
values:
- { name: planning, label: 计划中 }
- { name: developing, label: 开发中 }
- { name: published, label: 已发布 }
- { name: archived, label: 已归档 }
- name: lang
label: 语言
type: string
description: 留空使用站点默认语言;其他语言填写如 en、ja、zh_TW、ru
- name: link
label: 相关链接
type: object
list: true
fields:
- name: label
label: 链接名称
type: string
required: true
- name: icon
label: 图标
type: string
description: astro-icon 图标名(如 fa7-brands:github)、图片地址,留空则显示名称首字母
- name: value
label: 链接地址
type: string
required: true
- name: body
label: 项目说明(MDX 源码)
type: code
options:
format: mdx
description: MDX 源码原文,含 JSX 组件与 import 语句,只能以代码模式编辑
# 关于页面
- name: about
label: 📄 关于页面
type: file
path: src/content/spec/about.md
format: yaml-frontmatter
fields:
- name: title
label: 页面标题
type: string
default: "关于我"
- name: body
label: 正文
type: rich-text
# 友情链接
- name: friends
label: 🔗 友情链接
type: file
path: src/content/spec/friends.mdx
format: yaml-frontmatter
fields:
- name: title
label: 页面标题
type: string
default: 友情链接
- name: description
label: 页面描述
type: string
- name: body
label: 正文
type: code
options:
format: mdx
description: MDX 格式(包含 JSX 组件),使用代码模式编辑
# 留言板
- name: guestbook
label: 📬 留言板
type: file
path: src/content/spec/guestbook.md
format: yaml-frontmatter
fields:
- name: title
label: 页面标题
type: string
default: 留言板
- name: description
label: 页面描述
type: string
- name: body
label: 正文
type: rich-text
# ============================================================
# ⚙️ 站点设置
# ============================================================
- name: site-settings
label: ⚙️ 站点设置
type: group
description: 核心站点配置,包括标题、域名、SEO、个人信息等
items:
- name: site-config
label: 🌐 站点主配置
type: file
path: src/config/siteConfig.ts
format: code
description: 站点标题、URL、主题色、分页、页面开关、Bangumi 等核心设置
- name: profile-config
label: 👤 个人信息
type: file
path: src/config/profileConfig.ts
format: code
description: 头像、昵称、签名、社交链接等个人资料配置
- name: announcement-config
label: 📢 公告栏
type: file
path: src/config/announcementConfig.ts
format: code
description: 博客顶部公告栏的标题、内容和链接配置
- name: license-config
label: 📜 许可协议
type: file
path: src/config/licenseConfig.ts
format: code
description: 文章底部版权声明(如 CC BY-NC-SA 4.0)
# ============================================================
# 🎨 布局与外观
# ============================================================
- name: layout-appearance
label: 🎨 布局与外观
type: group
description: 导航栏、侧边栏、壁纸、字体等视觉相关配置
items:
- name: nav-bar-config
label: 🧭 导航栏
type: file
path: src/config/navBarConfig.ts
format: code
description: 导航栏菜单项、LinkPresets 链接预设和搜索配置
- name: sidebar-config
label: 📐 侧边栏布局
type: file
path: src/config/sidebarConfig.ts
format: code
description: 侧边栏位置、组件(个人资料、公告、音乐、分类、标签等)的显示和排序
- name: footer-html
label: 📏 页脚 HTML
type: file
path: src/config/FooterConfig.html
format: code
description: 页脚自定义 HTML 内容(备案号、版权信息等),留空则使用默认页脚
- name: font-config
label: 🔤 字体设置
type: file
path: src/config/fontConfig.ts
format: code
description: 全局字体、横幅字体、Google Fonts、子集化等配置
- name: cover-image-config
label: 🖼️ 文章封面图
type: file
path: src/config/coverImageConfig.ts
format: code
description: 文章详情页封面图显示和随机图 API 配置
- name: background-wallpaper
label: 🏞️ 背景壁纸
type: file
path: src/config/backgroundWallpaper.ts
format: code
description: 全屏壁纸、横幅壁纸、视频背景、水波纹、渐变等背景特效
- name: expressive-code-config
label: 💻 代码块样式
type: file
path: src/config/expressiveCodeConfig.ts
format: code
description: 代码高亮主题、折叠插件、语言徽章等代码块配置
- name: display-settings-config
label: 🎛️ 显示设置面板
type: file
path: src/config/displaySettingsConfig.ts
format: code
description: 前台设置面板总开关及各设置项(主题色、布局、壁纸、特效)开关
# ============================================================
# 🔧 功能配置
# ============================================================
- name: feature-settings
label: 🔧 功能配置
type: group
description: 评论、统计、音乐、打赏、相册、动态、书签等功能模块配置
items:
- name: comment-config
label: 💬 评论系统
type: file
path: src/config/commentConfig.ts
format: code
description: Twikoo / Waline / Giscus / Artalk / Disqus 评论系统配置
- name: analytics-config
label: 📊 数据统计
type: file
path: src/config/analyticsConfig.ts
format: code
description: Google Analytics、Microsoft Clarity、Umami、51la 统计配置
- name: music-config
label: 🎵 音乐播放器
type: file
path: src/config/musicConfig.ts
format: code
description: 音乐播放模式(Meting API / 本地音乐)、播放列表、歌词设置
- name: sponsor-config
label: 💰 打赏页面
type: file
path: src/config/sponsorConfig.ts
format: code
description: 打赏用途、支付方式(支付宝/微信/Ko-fi/爱发电)、赞助者列表
- name: friends-data
label: 🔗 友链数据
type: file
path: src/config/friendsConfig.ts
format: code
description: 友链页面设置和友链列表(站点名、头像、描述、链接、标签、权重)
- name: gallery-config
label: 🖼️ 相册配置
type: file
path: src/config/galleryConfig.ts
format: code
description: 相册列表(ID、名称、描述、地点、日期、标签、密码)和瀑布流列宽,图片放在 public/gallery/<相册id>/
- name: dynamic-config
label: 💬 动态页面
type: file
path: src/config/dynamicConfig.ts
format: code
description: 动态页面标题、评论开关、每页条数,以及本地 JSON / Memos 数据源切换
- name: booknav-config
label: 🔖 书签导航
type: file
path: src/config/booknavConfig.ts
format: code
description: 书签导航页面标题、favicon 接口和书签分类组(开发、项目、设计、工具等)
- name: effects-config
label: 🌸 樱花特效
type: file
path: src/config/effectsConfig.ts
format: code
description: 樱花飘落动画的数量、速度、尺寸、透明度等参数
- name: pio-config
label: 🎭 看板娘
type: file
path: src/config/pioConfig.ts
format: code
description: Spine / Live2D 看板娘模型、位置、交互、气泡提示配置
- name: mermaid-config
label: 🧩 Mermaid 图表
type: file
path: src/config/mermaidConfig.ts
format: code
description: Mermaid 图表的亮色 / 暗色主题配置
- name: plantuml-config
label: 📐 PlantUML 图表
type: file
path: src/config/plantumlConfig.ts
format: code
description: PlantUML 服务器地址和明暗主题配置
settings:
content:
# true:保存时保留配置里未声明的 frontmatter 字段(如 slug、自定义字段),避免被清空
merge: true
# ============================================================
# 📌 参考:可自由输入「api 或任意 URL」的图片字段写法
# ============================================================
# 上面所有 image 字段用的都是 type: image(带媒体库的上传 / 选择按钮)。
# 如果改成下面这样用 type: string,就能在网页上直接手打 api(随机封面)
# 或任意图片 URL,代价是失去媒体库的选择按钮。
#
# - name: image
# label: 封面图
# type: string
# description: 填 api 使用随机封面,也可填 https:// 完整 URL
#
# ── 关于可选校验 pattern ───────────────────────────────────
# Pages CMS 的 pattern 内部是 z.string().regex(),有两点要注意:
# 1. 不会自动加首尾锚定,^ $ 必须自己写;
# 2. 「留空」提交的是空字符串 ""(不是 undefined),而字段非必填时
# 只会包一层 .optional(),空字符串仍然会被 pattern 校验。
# 因此 pattern 必须显式允许空值,否则把封面留空的文章将无法保存:
#
# pattern: "^(?:|api|https?://.+)$" # ✅ 允许 留空 / api / http(s) URL
# pattern: "^(api|https?://.+)$" # ❌ 留空会被拒绝,文章存不回去
#
# 完全不写 pattern 就是不做校验,可以自由输入任何内容(包括 images/xxx.avif
# 这类相对路径)。仅在确实想约束取值范围时才加。
#
# ── 两个提醒 ───────────────────────────────────────────────
# 1. api 只在文章上生效:随机封面逻辑在 utils/image-utils.ts 的
# processCoverImageSync() 里,只有 PostCard.astro 与 posts/[...slug].astro
# 调用它;项目页没有这段逻辑,填 api 不会出随机图。生效前还需在
# coverImageConfig.ts 中把 randomCoverImage.enable 设为 true。
# 2. 使用 type: string 后,读到旧值不会再做路径归一化,存进去什么就是什么。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
[教程] PageCMS配置示例
https://blog.ipixeloldc.com/posts/pagecms-setup-guide/
作者
iPixelOldC
发布于
2026-09-16
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
iPixelOldC
你好,我是iPixelOldC ꒰。•◡•。꒱
公告
欢迎来到我的博客 ⸜(* ॑꒳ ॑* )⸝,如果评论区等无法显示,麻烦刷新一下页面(╥﹏╥)
分类
标签
最新动态
站点统计
文章
6
分类
3
标签
4
总字数
4,223
运行时长
0
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录