CONTENT MANAGEMENT

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 會自動為 tagscategories 創建分類法。這相當於手動 配置您的分類法 如下所示:

hugo.
     
taxonomies:
  category: categories
  tag: tags
[taxonomies]
  category = 'categories'
  tag = 'tags'
{
   "taxonomies": {
      "category": "categories",
      "tag": "tags"
   }
}

如果您不希望 Hugo 創建任何分類法,可以在 [站點配置] 中設置 disableKinds 為以下:

hugo.
     
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)

其他四種與內容無關的頁面類型為 robotsTXTRSSsitemap404。雖然這些類型主要用於內部用途,但您仍可透過指定名稱來停用網站中的一個或多個頁面類型。例如:

hugo.
     
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” 的自定義分類法

hugo.
     
taxonomies:
  category: categories
  series: series
  tag: tags
[taxonomies]
  category = 'categories'
  series = 'series'
  tag = 'tags'
{
   "taxonomies": {
      "category": "categories",
      "series": "series",
      "tag": "tags"
   }
}

範例:移除預設分類法

如果您只想使用預設的 tags 分類法,並移除 categories 分類法,您可以修改站點配置中的 taxonomies 設置:

hugo.
     
taxonomies:
  tag: tags
[taxonomies]
  tag = 'tags'
{
   "taxonomies": {
      "tag": "tags"
   }
}

如果您希望完全禁用所有分類法,請參見 Hugo 分類法預設值 中的 disableKinds 設置。

將術語指派給內容

要將一個或多個術語指派給頁面,可以在前端資料中創建一個使用分類法複數名稱的欄位,然後將術語添加到對應的陣列中。例如:

content/example.md
     
---
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 分類法中的 abc 設定了 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 頁面的鏈接,您的術語頁面會是這樣:

content/actors/bruce-willis/_index.md
     
---
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"
}