分类
什么是分类?
Hugo 包括对用户定义的内容分组(称为分类)的支持。分类是对内容之间逻辑关系的分类。
定义
- Taxonomy
- 一种可用于对内容进行分类的类别
- 术语
- 分类中的键
- 值
- 分配给术语的一段内容
示例分类:电影网站
假设您正在制作一个关于电影的网站。您可能希望包含以下分类
- 演员
- 导演
- 制片厂
- 类型
- 年份
- 奖项
然后,在每部电影中,您将为每个分类指定术语(即,在每个电影内容文件的前言中)。根据这些术语,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"
]
}
类型 | 描述 | 示例 |
---|---|---|
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
分类将创建以下页面
- 位于
example.com/categories/
的单个页面,其中列出了分类中的所有术语 - 单独的分类列表页面(例如,
/categories/development/
),用于显示在任何内容文件的前言中标记为该分类一部分的所有页面的列表的每个术语
配置分类
除了默认值之外的自定义分类必须在您的站点配置中定义,然后才能在整个站点中使用。您需要为每个分类提供复数和单数标签。例如,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
的用法。
将术语分配给内容
要将一个或多个术语分配给页面,请使用分类法的复数名称创建一个前言字段,然后将术语添加到相应的数组中。例如
---
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"
}
排序分类法
内容文件可以为其每个关联的分类法分配权重。分类权重可用于在 分类模板 中对内容进行排序或排列,并在内容文件的 前言 中声明。声明分类权重的约定是 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
处为该术语创建一个页面,并在其前言中添加您的元数据。继续我们的“演员”示例,假设您想为每个演员添加一个 Wikipedia 页面链接。您的术语页面将如下所示
---
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"
}