页面 (Page)
Page 是 Snow 中最基本的内容单元。
创建页面
在 content/ 下创建内容文件。支持的扩展名和启用方式见 解析器。
1content/ 2├── about.md # 普通 Page → /about/ 3└── posts/ 4 ├── hello.md # → /posts/hello/ 5 └── bundle/ # Page Bundle 6 ├── index.md # → /posts/bundle/ 7 └── image.png # 附属资源
Page Bundle:包含 index.{md,org,html} 的目录视为一个页面整体。目录内其他文件可以作为附属资源,详见 附件资源。
FrontMatter
1--- 2title: "文章标题" 3slug: "custom-slug" 4date: 2024-01-15 20:35:00 5modified: 2024-02-01 10:00:00 6 7draft: false 8hidden: false 9render: true 10 11path: "custom/url/" 12template: "custom-post.html" 13aliases: 14 - "/old-url/" 15 16tags: 17 - go 18 - web 19categories: 20 - Programming/Go 21---
所有 FrontMatter 字段
| 字段 | 类型 | 说明 |
|---|---|---|
title |
string | 页面标题 |
slug |
string | URL slug,默认从标题生成 |
date |
datetime | 创建时间 |
modified |
datetime | 修改时间 |
draft |
bool | 草稿,构建时默认跳过 |
hidden |
bool | 隐藏页面,不出现在列表中 |
render |
bool | 是否渲染 |
path |
string | 自定义输出路径 |
template |
string | 自定义模板 |
aliases |
[]string | 重定向别名 |
assets |
[]string | Page Bundle 附属资源白名单 |
formats.{name}.path |
string | 格式输出路径 |
formats.{name}.template |
string | 格式输出模板 |
{taxonomy} |
any | 自定义分类字段(如 tags、authors) |
页面配置
1pages: 2 _default: 3 path: "{path:slug}/{slug}/" 4 posts: 5 path: "articles/{date:%Y}/{date:%m}/{slug}.html" 6 pages: 7 hidden: true 8 template: "page.html" 9 en: 10 lang: "en" 11 drafts: 12 draft: true
配置级联查找:pages.{目录路径} → 父目录 → pages._default。
路径变量
| 变量 | 说明 | 示例 |
|---|---|---|
{date:%Y} |
年 (4位) | 2024 |
{date:%m} |
月 (2位) | 01 |
{date:%d} |
日 (2位) | 15 |
{date:%H} |
时 (2位) | 20 |
{lang} |
语言代码 | en |
{lang:optional} |
语言代码,默认语言为空 | en 或空 |
{path} |
文件位置路径 | posts |
{path:slug} |
路径 slug 化 | posts |
{slug} |
页面 slug | hello-world |
{title} |
页面标题 | Hello World |
模板查找
渲染 Page 时模板按顺序查找:
- FrontMatter 中的
template值 page.html
模板变量
| 属性 | 类型 | 说明 |
|---|---|---|
page.File |
File |
源文件信息 |
page.File.Path |
string | 相对内容根的文件路径 |
page.File.Dir |
string | 文件所在目录 |
page.File.Name |
string | 文件名 |
page.File.BaseName |
string | 不含扩展名的文件名 |
page.File.LanguageName |
string | 文件名后缀识别出的语言名 |
page.File.Ext |
string | 文件扩展名 |
page.FrontMatter |
FrontMatter | FrontMatter 数据 |
page.FrontMatter.{xxx} |
any | 自定义 FrontMatter 字段值 |
page.Toc |
[]Heading | 内容目录 |
page.Lang |
string | 语言代码 |
page.Slug |
string | URL slug |
page.Title |
string | 页面标题 |
page.Description |
string | 页面描述 |
page.Summary |
string | 摘要 |
page.Content |
string | 渲染后 HTML |
page.RawContent |
string | 原始内容 |
page.Draft |
bool | 是否为草稿 |
page.Hidden |
bool | 是否隐藏 |
page.IsBundle |
bool | 是否为 Page Bundle |
page.WordCount |
int64 | 词数统计 |
page.ReadingTime |
int64 | 预计阅读时间(分钟) |
page.Date |
time.Time | 创建时间 |
page.Modified |
time.Time | 修改时间 |
page.Path |
string | 相对 URL |
page.Permalink |
string | 绝对 URL |
page.Section |
Section | 所属栏目 |
page.Assets |
Assets | Page Bundle 附件资源 |
page.Formats |
Formats | 其他输出格式 |
page.Ancestors() |
Sections | 从所属栏目开始向上的栏目列表,不包含页面自身 |
常用关联对象字段:
| 属性 | 说明 |
|---|---|
page.Section.Title |
所属栏目标题 |
page.Assets[n].Path |
附件输出相对 URL |
page.Assets[n].Permalink |
附件输出绝对 URL |
page.Formats.Find("rss") |
查找指定名称的输出格式 |
草稿 (Draft)
1--- 2draft: true 3---
或通过配置批量标记:
1pages: 2 drafts: 3 draft: true
构建时默认忽略草稿,--include-drafts 可包含。