iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0
Modern Web

Hugo 貼身打造個人部落格系列 第 14

Day 14. Hugo Content - Taxonomies

前言

Hugo Taxonomies 是一種「內容分群」的功能,它能將散落於網站不同 Section 中的 Content Page,將其分群在同一頁呈現 (Grouping),下面會舉個簡單的例子,來介紹 Taxonomies 的使用情境。

Hugo Taxonomies

Hugo 預設提供了以下兩種 Taxonomy:

  • categories:使用者可於 Front Matter 中,指定文章類別
  • tags:使用者可於 Front Matter 中,指定文章標籤

指定方式如下 (以 YAML 格式為例):

---
title: "Sample"
categories: ["foo", "bar"]
tags: ["foo", "bar"]
---

content

若使用者不想要使用預設的 Taxonomy,有兩種方式可以將它關閉:

  • 部分關閉 (追加設置 config [taxonomies])
  • 完全關閉 (追加設置 config disableKinds)

這邊所謂「關閉」,概念上指的是把 http://your.baseurl.blog/{taxonomy} 這個頁面給關掉。

Taxonomy 部分關閉

你可以從 config 配置自己想要啟用的 Taxonomy,「覆蓋掉」預設的設置,以下是「只啟用 tags」的例子:

[taxonomies]
  tag = "tags"

以本例設置來說,官方預設的 categories 就會變得無法被公開存取:http://your.baseurl.blog/categories (404),因為預設配置已經被 config 所取代。

Taxonomy 完全關閉

若是想要完全關閉 Taxonomy 功能,可以配置 disableKinds

disableKinds = ["taxonomy", "term"]

Taxonomies V.S. Content Sections

如前言所述 Hugo Taxonomies 能幫助我們將散落在不同 Section 中的文章抓在同一頁呈現,舉例來說,假設你的個人部落格有以下網站結構與內容:

+ 首頁 (Homepage)
    
    + 旅遊美食 Travel and Foods (Section, ./content/travel-n-foods)
        + 2020 網友票選前十名巷弄咖啡 (Content, ./content/travel-n-foods/2020-top-10-coffee)
        + 經典不敗超推必吃早午餐 (Content, ./content/travel-n-foods/awesome-brunch)
    
    + 限時團購 Group Buying (Section, ./content/group-buying)
        + 巴西黑麻麻咖啡豆熱烈揪團中 (Content, ./content/group-buying/brazilian-coffee)
    
    + 玩具開箱 Toys Introdution (Section, ./content/toys-introduction)
        + 麵包超人等身公仔(可食用) (Content, ./content/toys-introduction/eatable-anpanman)

當你瀏覽網址為 http://your.baseurl.blog/travel-n-foods 時,頁面就會列出匹配 ./content/travel-n-foods/*.md 這路徑的所有文章:

- 2020 網友票選前十名巷弄咖啡 (Content, /travel-n-foods/2020-top-10-coffee)
- 經典不敗超推必吃早午餐 (Content, /travel-n-foods/awesome-brunch)

現在假設每篇 Content Page 都有設置 Front Matter tags,例如:

# 2020 網友票選前十名巷弄咖啡.md Front Matter

---
title: "2020 網友票選前十名巷弄咖啡"
tags: ["food", "coffee"]
---
...

當你瀏覽網址為 http://your.baseurl.blog/tags 時,頁面就會列出設置了 tags 的所有文章:

+ food

    + 2020 網友票選前十名巷弄咖啡 (Content, /travel-n-foods/2020-top-10-coffee)
    + 經典不敗超推必吃早午餐 (Content, /travel-n-foods/awesome-brunch)
    + 巴西黑麻麻咖啡豆熱烈揪團中 (Content, /group-buying/brazilian-coffee)
    + 麵包超人等身公仔(可食用) (Content, /toys-introduction/eatable-anpanman)
    
+ coffee

    + 2020 網友票選前十名巷弄咖啡 (Content, /travel-n-foods/2020-top-10-coffee)
    + 巴西黑麻麻咖啡豆熱烈揪團中 (Content, /group-buying/brazilian-coffee)

當你瀏覽網址為 http://your.baseurl.blog/tags/coffee 時,頁面就會列出設置了 tags 中包含 coffee 的所有文章:

- 2020 網友票選前十名巷弄咖啡 (Content, /travel-n-foods/2020-top-10-coffee)
- 巴西黑麻麻咖啡豆熱烈揪團中 (Content, /group-buying/brazilian-coffee)

創建 Taxonomy

Hugo 讓我們可依據需求,自行創建自己想要的分類法,命名與創建方式如下:

單數名詞: "複數名詞"

例如筆者想創建一個 Taxonomy,名為「product」 :

[taxonomies]
  category = "categories"
  tag = "tags"
  product = "products"

請注意,你必須在此定義網站中,所有使用到的 taxonomy,此配置是「覆蓋設定」,它會完全取代 Hugo 預設的配置,若你沒有列舉出原本預設 Taxonomy,而又有使用到它的話,http://your.baseurl.blog/{taxonomy} 頁面就會無法存取 (變成 404)。

此時我們就可以使用新的設置:

# 巴西黑麻麻咖啡豆熱烈揪團中.md Front Matter

---
title: "巴西黑麻麻咖啡豆熱烈揪團中"
tags: ["food", "coffee"]
products: ["drink", "coffee"]
---
...

佈景支援

若佈景沒有實作 Taxonomy Terms Template 的 layout,有可能會無法正常顯示 Taxonomy 的頁面列表,請參考官方關於 Taxonomy Templates 的說明。

小結

最後舉個使用 Hugo Taxonomy 的場景,假設今天筆者想為網站增添一個新的選單 (HTML Links),連結文字為「Restaurants」,筆者想把這個連結放在 Menu 選單中,透過追加以下 config 配置:

[taxonomies]
  category = "categories"
  tag = "tags"
  restaurant = "restaurants"
  
[[menu.main]]
  name = "Restaurants"
  weight = 66
  identifier = "restaurants"
  url = "/restaurants/"

新增一篇文章 ./content/post/the-best-beef-noodle-from-ancestor.md

---
title: "祖傳牛肉麵"
restaurants:
- "beef noodle"
---

祖傳牛肉麵...

瀏覽網址:

參考連結


上一篇
Day 13. Hugo Content - Section 與 Page Bundle
下一篇
Day 15. Hugo Content - 文章狀態與 Q&A
系列文
Hugo 貼身打造個人部落格30

尚未有邦友留言

立即登入留言