分类的定义

Hugo包含对用户定义的内容分类-taxonomies 标签的支持. 标签是对内容逻辑关系的分类.

定义 Definitions

标签 Taxonomy
可以被用来对内容分类的类型
条目 Term
分类中的键
值 Value
赋值某条目的一条内容

分类举例: 电影网站

我们假设在建的是关于电影的网站。您可能想包括如下分类:

  • Actors 演员
  • Directors 导演
  • Studios 工作室
  • Genre 电影类型
  • Year 年份
  • Awards 获奖

然后, 对每个电影, 需要声明这些分类的条目(比如,在每个电影内容文件的front matter部分)。对于这些条目,Hugo自动为每个演员、导演、工作室、电影类型、年份和获奖情况创建对应页面,每个页面包含属于特定演员、导演、工作室、电影类型、年份或获奖情况的电影的列表。

电影分类组织

继续上面电影网站例子, 下面展示了从分类角度的内容的关系:

1
2
3
4
5
6
7
8
9
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     值

从内容的角度看, 关系会以不同方式出现, 虽然数据和标记使用的都一样:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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原生支持分类.

不需要在配置文件 中添加一行,Hugo自动为tagscategories创建分类. 自动创建的分类,同在配置文件中配置分类效果一样:

     
1
2
3
taxonomies:
  category: categories
  tag: tags
1
2
3
[taxonomies]
  category = 'categories'
  tag = 'tags'
1
2
3
4
5
6
{
   "taxonomies": {
      "category": "categories",
      "tag": "tags"
   }
}

如果不需要Hugo去创建任何分类, 在站点配置中设置 disableKinds 像下面这样:

     
1
2
3
disableKinds:
- taxonomy
- term
1
disableKinds = ['taxonomy', 'term']
1
2
3
4
5
6
{
   "disableKinds": [
      "taxonomy",
      "term"
   ]
}

我们修复了用于分类法的之前的导致混乱的页面的类型(请参见下面的清单),使其与讨论分类法时使用的术语一致

我们尽量避免网站破坏,如果可能需要您调整原来的disableKinds部分,在console里面会提示ERROR错误。

Kind 类型Description 描述Example 例子
home主页的登陆页面/index.html
page特定页面的登陆页面my-post page (/posts/my-post/index.html)
section特定块的登陆页面posts section (/posts/index.html)
taxonomy分类标签的登陆页面tags taxonomy (/tags/index.html)
term标签条目的登陆页面term awesome in tags taxonomy (/tags/awesome/index.html)

默认的目的 Default Destinations

当使用分类并且提供了taxonomy templates分类模板—Hugo会自动创建展示所有分类条目的列表页面,以及为每一个条目创建单独页面展示条目相关的内容列表。 比如,在配置中声明的categories分类,在内容的前言设定中使用后Hugo会创建如下页面:

配置分类

默认的分类之外defaults定制的分类必须先在站点配置中定义,然后才能在站点中使用。 需要给每个条目提供复数和单数的label. 比如TOML中singular key = "plural value" 和 YAML中 singular key: "plural value".

举例添加定制的分类,名称为"series"

     
1
2
3
4
taxonomies:
  category: categories
  series: series
  tag: tags
1
2
3
4
[taxonomies]
  category = 'categories'
  series = 'series'
  tag = 'tags'
1
2
3
4
5
6
7
{
   "taxonomies": {
      "category": "categories",
      "series": "series",
      "tag": "tags"
   }
}

例子: 删除默认分类

如果想为网站仅仅保留默认的tags 分类,删除 categories 分类, 您可以在站点配置文件中 像下面这样修改taxonomies 值.

     
1
2
taxonomies:
  tag: tags
1
2
[taxonomies]
  tag = 'tags'
1
2
3
4
5
{
   "taxonomies": {
      "tag": "tags"
   }
}

如果想一次禁用所有分类标签, 参考上面disableKinds的用法默认分类

Add Taxonomies to Content

当站点层级定义了标签,任何内容可以赋值这个标签,不论内容类型或者内容块.

给内容赋值标签通过前言设定 front matter内设定。 简单的使用标签的复数形式(英语)作为变量, 赋值所有想对内容实例应用的条目作为标签的值.

例子: 前言设定标签

     
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
categories:
- Development
project_url: https://github.com/gohugoio/hugo
series:
- Go Web Dev
slug: hugo
tags:
- Development
- Go
- fast
- Blogging
title: 'Hugo: A fast and flexible static site generator'
1
2
3
4
5
6
categories = ['Development']
project_url = 'https://github.com/gohugoio/hugo'
series = ['Go Web Dev']
slug = 'hugo'
tags = ['Development', 'Go', 'fast', 'Blogging']
title = 'Hugo: A fast and flexible static site generator'
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
{
   "categories": [
      "Development"
   ],
   "project_url": "https://github.com/gohugoio/hugo",
   "series": [
      "Go Web Dev"
   ],
   "slug": "hugo",
   "tags": [
      "Development",
      "Go",
      "fast",
      "Blogging"
   ],
   "title": "Hugo: A fast and flexible static site generator"
}

标签排序

内容文件的每个相关标签可以设置一个weight值。 标签的weight值可以用来在条目列表模板中排序,可以在内容页面的front matter中设定。声明标签weight值的惯例是 taxonomyname_weight.

下面的TOML和YAML例子中显示的内容片段具有weight值22,在和tags分类的 “a”, “b” and “c” 关联的标签条目页是显示时排序使用, 在category分类的’d’页面中排序时具有weight 44.

Example: Taxonomic weight

     
1
2
3
4
5
6
7
8
9
categories:
- d
categories_weight: 44
tags:
- a
- b
- c
tags_weight: 22
title: foo
1
2
3
4
5
categories = ['d']
categories_weight = 44
tags = ['a', 'b', 'c']
tags_weight = 22
title = 'foo'
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
   "categories": [
      "d"
   ],
   "categories_weight": 44,
   "tags": [
      "a",
      "b",
      "c"
   ],
   "tags_weight": 22,
   "title": "foo"
}

通过使用标签weight,相同内容在不同标签条目列表页内处于不同的位置.

Add custom metadata to a Taxonomy or Term

如果需要对标签条目添加定制的元数据,您需要创建创建条目页面在/content/<TAXONOMY>/<TERM>/_index.md, 在这个页面的前言设定中添加元数据。沿用上面的 ‘Actors’例子, 我们假设需要添加一个Wikipedia页面链接给每个演员。 标签条目页可能会像下面这样:

/content/actors/bruce-willis/_index.md
1
2
3
4
5

---
title: "Bruce Willis"
wikipedia: "https://en.wikipedia.org/wiki/Bruce_Willis"
---