Taxonomies
什麼是分類法?
Hugo 支援自定義的內容分組,稱為 分類法。分類法是對內容之間邏輯關係的分類。
定義
- 分類法
- 用來分類內容的一種方式
- 術語
- 分類法中的一個關鍵字
- 值
- 指定給某個術語的內容
範例分類法:電影網站
假設您正在製作一個電影網站,您可能會想要包括以下分類法:
- 演員
- 導演
- 影業
- 類型
- 年份
- 獎項
接著,在每部電影中,您會為每個分類法指定術語(即,在每部電影內容檔案的 [前端資料] 中)。從這些術語,Hugo 將自動為每個演員、導演、影業、類型、年份和獎項創建頁面,每個頁面將列出與該術語匹配的所有電影。
電影分類法組織
繼續以電影網站為例,以下展示了從分類法角度看的內容關係:
演員 <- 分類法
Bruce Willis <- 術語
The Sixth Sense <- 值
Unbreakable <- 值
Moonrise Kingdom <- 值
Samuel L. Jackson <- 術語
Unbreakable <- 值
The Avengers <- 值
xXx <- 值
從內容的角度看,關係會有所不同,雖然使用的數據和標籤相同:
Unbreakable <- 值
演員 <- 分類法
Bruce Willis <- 術語
Samuel L. Jackson <- 術語
導演 <- 分類法
M. Night Shyamalan <- 術語
...
Moonrise Kingdom <- 值
演員 <- 分類法
Bruce Willis <- 術語
Bill Murray <- 術語
導演 <- 分類法
Wes Anderson <- 術語
...
預設分類法
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
。
以下顯示了一個內容,為其 tags
分類法中的 a
、b
和 c
設定了 22 的權重,在渲染時會根據這個權重排序,並為 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
,並在該頁面的前端資料中添加您的元數據。以我們的「演員」為例,假設您想為每個演員添加 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"
}