分类法
什么是分类法?
Hugo支持用户自定义的内容归类,称为分类法(taxonomies)。分类法是对内容之间的逻辑关系进行分类的方式。
定义
- 分类法
- 一种用于对内容进行分类的方式
- 术语
- 分类法中的一个关键词
- 数值
- 分配给术语的一部分内容
例子:电影网站的分类法
假设您正在制作一个关于电影的网站。您可能希望包含以下分类法:
- 演员
- 导演
- 工作室
- 类型
- 年份
- 奖项
然后,在每个电影中,您会为每个分类法指定术语(即,在每个电影内容文件的[front matter]中)。根据这些术语,Hugo会自动为每个演员、导演、工作室、类型、年份和奖项创建页面,并列出与该特定演员、导演、工作室、类型、年份和奖项匹配的所有电影。
电影分类法组织
继续以电影网站的例子,下面演示了从分类法的角度显示的内容关系:
演员 <- 分类法
布鲁斯•威利斯 <- 术语
无间道 <- 数值
防弹少年团 <- 数值
月升王国 <- 数值
塞缪尔•杰克逊 <- 术语
防弹少年团 <- 数值
复仇者联盟 <- 数值
X战警 <- 数值
从内容的角度来看,关系将会以不同的方式显示,尽管使用的数据和标签是相同的:
无间道 <- 数值
演员 <- 分类法
布鲁斯•威利斯 <- 术语
塞缪尔•杰克逊 <- 术语
导演 <- 分类法
夜访吸血鬼 <- 术语
...
月升王国 <- 数值
演员 <- 分类法
布鲁斯•威利斯 <- 术语
比尔•默里 <- 术语
导演 <- 分类法
Wes Anderson <- 术语
...
默认分类法
Hugo本身支持分类法。
在不对[站点配置]文件添加任何内容的情况下,Hugo将自动为tags
和categories
创建分类法。这与手动配置您的分类法相同:
分类法: null
{
"分类法": null
}
如果您不想让Hugo创建任何分类法,请将您的[站点配置]中的disableKinds
设置为以下内容:
disableKinds:
- taxonomy
- term
disableKinds = ['taxonomy', 'term']
{
"disableKinds": [
"taxonomy",
"term"
]
}
类别 | 描述 | 示例 |
---|---|---|
home |
主页的着陆页 | /index.html |
page |
特定页面的着陆页 | my-post 页面 (/posts/my-post/index.html ) |
section |
特定部分的着陆页 | posts 部分 (/posts/index.html ) |
taxonomy |
分类法的着陆页 | tags 分类法 (/tags/index.html ) |
term |
一个分类法术语的着陆页 | 分类法 tags 中的术语 awesome (/tags/awesome/index.html ) |
与内容无关的其他四种页面类型为 robotsTXT
、RSS
、sitemap
和 404
。虽然主要供内部使用,但您可以在禁用网站上的一个或多个页面类型时指定名称。例如:
disableKinds:
- robotsTXT
- "404"
disableKinds = ['robotsTXT', '404']
{
"disableKinds": [
"robotsTXT",
"404"
]
}
默认目标
当使用分类法时,且提供了[分类法模板],Hugo将自动创建列出所有分类法术语的页面,以及每个术语关联的内容的单独页面。例如,在您的配置中声明的categories
分类法并在内容的front matter中使用的情况下,将创建以下页面:
example.com/categories/
:列出[分类法中的术语]- [单独的分类法列表页面][分类法模板](例如
/categories/development/
),显示所有在任何内容文件的front matter中标记为该分类法的页面
配置分类法
除了默认值之外,其他自定义分类法必须先在[站点配置]中定义,然后才能在整个网站中使用。您需要为每个分类法提供复数和单数的标签。例如,对于TOML格式,写为singular key = "plural value"
,而对于YAML格式,写为singular key: "plural value"
。
例子:添加名为"series"的自定义分类法
taxonomies:
category: categories
series: series
tag: tags
[taxonomies]
category = 'categories'
series = 'series'
tag = 'tags'
{
"taxonomies": {
"category": "categories",
"series": "series",
"tag": "tags"
}
}
例子:删除默认分类法
如果您只想要默认的tags
分类法,并且删除categories
分类法,请通过修改[站点配置]中的taxonomies
值来实现。
taxonomies:
tag: tags
[taxonomies]
tag = 'tags'
{
"taxonomies": {
"tag": "tags"
}
}
如果您想要完全禁用所有分类法,请参见Hugo默认分类法中的disableKinds
的用法。
将分类法应用于内容
一旦在站点级别定义了分类法,不论内容类型或内容部分如何,任何内容都可以分配给它。
将内容分配给分类法是在[front matter]中完成的。只需创建具有分类法的复数名称并将所有要应用于内容实例的术语赋值给它。
例子:带有分类法的front matter
---
categories:
- 开发
project_url: https://github.com/gohugoio/hugo
series:
- Go Web开发
slug: hugo
tags:
- 开发
- Go
- 快速
- 博客
title: 'Hugo: 一个快速灵活的静态网站生成器'
---
+++
categories = ['开发']
project_url = 'https://github.com/gohugoio/hugo'
series = ['Go Web开发']
slug = 'hugo'
tags = ['开发', 'Go', '快速', '博客']
title = 'Hugo: 一个快速灵活的静态网站生成器'
+++
{
"categories": [
"开发"
],
"project_url": "https://github.com/gohugoio/hugo",
"series": [
"Go Web开发"
],
"slug": "hugo",
"tags": [
"开发",
"Go",
"快速",
"博客"
],
"title": "Hugo: 一个快速灵活的静态网站生成器"
}
给分类法排序
内容文件可以为其关联的每个分类法分配权重,分类法的权重可用于在[分类法列表模板]中对内容进行排序或排序,并在内容文件的[front matter]中声明。声明分类法权重的惯例是taxonomyname_weight
。
以下示例显示了一个权重为22的内容片段,可用于对tags
分类法的值为"a"、“b"和"c"的页面进行排序。同时,对于渲染为"d"分类目录页面时分配了权重为44。
例子:分类法的weight
categories:
- d
categories_weight: 44
tags:
- a
- b
- c
tags_weight: 22
title: foo
categories = ['d']
categories_weight = 44
tags = ['a', 'b', 'c']
tags_weight = 22
title = 'foo'
{
"categories": [
"d"
],
"categories_weight": 44,
"tags": [
"a",
"b",
"c"
],
"tags_weight": 22,
"title": "foo"
}
通过使用分类法的权重,相同的内容片段可以在不同的分类法中以不同的位置显示。
向分类法或术语添加自定义元数据
如果您需要向分类法术语添加自定义元数据,您需要在/content/<分类法>/<术语>/_index.md
位置创建一个页面,并在其front matter中添加您的元数据。继续以’演员’的例子为例,假设您想要为每个演员添加一个维基百科链接。您的术语页面将如下所示:
---
title: Bruce Willis
wikipedia: https://en.wikipedia.org/wiki/Bruce_Willis
---
+++
title = 'Bruce Willis'
wikipedia = 'https://en.wikipedia.org/wiki/Bruce_Willis'
+++
{
"title": "Bruce Willis",
"wikipedia": "https://en.wikipedia.org/wiki/Bruce_Willis"
}
[front matter]: /内容管理/front matter/ [分类法列表模板]: /templates/分类法模板/#分类法列表模板 [分类法模板]: /templates/分类法模板/ [分类法中的术语]: /templates/分类法模板/#分类法术语模板 [站点配置]: /入门/配置/