分类法
什么是分类法?
Hugo 包含对用户定义的内容分组的支持,称为**分类法**。分类法是对内容之间逻辑关系的分类。
定义
- 分类法
- 可用于对内容进行分类的分类
- 术语
- 分类法中的一个键
- 值
- 分配给术语的内容片段
分类法示例:电影网站
假设您正在制作一个关于电影的网站。您可能希望包含以下分类法
- 演员
- 导演
- 制片厂
- 类型
- 年份
- 奖项
然后,在每部电影中,您将为每个分类法指定术语(即,在每个电影内容文件的前置 matter中)。根据这些术语,Hugo 将自动为每个演员、导演、制片厂、类型、年份和奖项创建页面,每个页面都列出与该特定演员、导演、制片厂、类型、年份和奖项匹配的所有电影。
电影分类法组织
要继续电影网站的示例,以下演示了从分类法的角度来看的内容关系
Actor <- Taxonomy
Bruce Willis <- Term
The Sixth Sense <- Value
Unbreakable <- Value
Moonrise Kingdom <- Value
Samuel L. Jackson <- Term
Unbreakable <- Value
The Avengers <- Value
xXx <- Value
从内容的角度来看,关系将以不同的方式出现,尽管使用的数据和标签相同
Unbreakable <- Value
Actors <- Taxonomy
Bruce Willis <- Term
Samuel L. Jackson <- Term
Director <- Taxonomy
M. Night Shyamalan <- Term
...
Moonrise Kingdom <- Value
Actors <- Taxonomy
Bruce Willis <- Term
Bill Murray <- Term
Director <- Taxonomy
Wes Anderson <- Term
...
默认分类法
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"
]
}
种类 | 描述 | 示例 |
---|---|---|
首页 |
首页的登录页面 | /index.html |
页面 |
给定页面的登录页面 | my-post 页面 (/posts/my-post/index.html ) |
章节 |
给定章节的登录页面 | posts 章节 (/posts/index.html ) |
分类法 |
分类法的登录页面 | tags 分类法 (/tags/index.html ) |
术语 |
一个分类法术语的登录页面 | 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"
。
示例:添加名为“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
的用法。
将术语分配给内容
要将一个或多个术语分配给页面,请使用分类的复数名称创建一个前置 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"
}