分类法
什么是分类法?
Hugo 支持用户定义的内容分组,称为 分类法 。分类法是对内容之间逻辑关系的分类。
定义
- 分类法
- 一种可用于对内容进行分类的分类方法
- 术语
- 分类法中的一个键
- 值
- 分配给术语的一段内容
分类法示例:电影网站
假设您正在制作一个关于电影的网站。您可能希望包含以下分类法:
- 演员
- 导演
- 制片厂
- 类型
- 年份
- 奖项
然后,在每部电影中,您将为这些分类法的每一个指定术语(即,在每部电影内容文件的 前置 matter 中)。根据这些术语,Hugo 将自动为每个演员、导演、制片厂、类型、年份和奖项创建页面,每个页面都列出与该特定演员、导演、制片厂、类型、年份和奖项匹配的所有电影。
电影分类法组织
为了继续以电影网站为例,以下内容从分类法的角度演示了内容关系:
演员 <- 分类法
布鲁斯·威利斯 <- 术语
第六感 <- 值
非常嫌疑犯 <- 值
月升王国 <- 值
塞缪尔·杰克逊 <- 术语
非常嫌疑犯 <- 值
复仇者联盟 <- 值
XXX <- 值
从内容的角度来看,关系会有所不同,尽管使用的数据和标签相同:
非常嫌疑犯 <- 值
演员 <- 分类法
布鲁斯·威利斯 <- 术语
塞缪尔·杰克逊 <- 术语
导演 <- 分类法
M·奈特·沙马兰 <- 术语
...
月升王国 <- 值
演员 <- 分类法
布鲁斯·威利斯 <- 术语
比尔·默里 <- 术语
导演 <- 分类法
韦斯·安德森 <- 术语
...
默认分类法
Hugo 原生支持分类法。
无需向您的 站点配置 文件添加一行代码,Hugo 就会自动为 tags
和 categories
创建分类法。这与手动 配置您的分类法 相同,如下所示:
taxonomies:
category: categories
tag: tags
[taxonomies]
category = 'categories'
tag = 'tags'
{
"taxonomies": {
"category": "categories",
"tag": "tags"
}
}
如果您不希望 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 将自动创建一个列出所有分类法术语的页面,以及包含与每个术语关联的内容列表的各个页面。例如,在您的配置中声明并在内容前置 matter 中使用的 categories
分类法将创建以下页面:
- 一个位于
example.com/categories/
的单个页面,列出分类法中的所有术语 - 各个分类法列表页面 (例如,
/categories/development/
),其中列出了在任何内容文件的 前置 matter 中标记为该分类法一部分的所有页面
配置分类法
除了 默认值 之外的自定义分类法必须在您的 站点配置 中定义,然后才能在整个站点中使用。您需要为每个分类法提供复数和单数标签。例如,TOML 的 singular key = "plural value"
和 YAML 的 singular key: "plural value"
。
示例:添加名为“系列”的自定义分类法
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
的使用。
将术语分配给内容
要将一个或多个术语分配给页面,请使用分类法的复数名称创建一个前置 matter 字段,然后将术语添加到相应的数组中。例如:
---
categories:
- Category A
- Category B
tags:
- Tag A
- Tag B
title: Example
---
+++
categories = ['Category A', 'Category B']
tags = ['Tag A', 'Tag B']
title = 'Example'
+++
{
"categories": [
"Category A",
"Category B"
],
"tags": [
"Tag A",
"Tag B"
],
"title": "Example"
}
分类法排序
内容文件可以为其关联的每个分类法分配权重。分类权重可用于在 分类法模板 中对内容进行排序,并在内容文件的 前置 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/<TAXONOMY>/<TERM>/_index.md
的页面,并在其前置 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"
}