TEMPLATES

Taxonomy templates

下列的 範疇 模板繼承了網站的基本模板,並顯示當前範疇中的一組 術語

layouts/_default/taxonomy.html
{{ define "main" }}
  <h1>{{ .Title }}</h1>
  {{ .Content }}
  {{ range .Pages }}
    <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
  {{ end }}
{{ end }}

請參閱 模板查找順序 以選擇提供所需具體層級的模板路徑。

在上述範例中,如果範疇和術語的對應頁面沒有由檔案支持,它們將會以大寫字母開頭。你可以在網站配置中禁用此功能:

hugo.
     
capitalizeListTitles: false
capitalizeListTitles = false
{
   "capitalizeListTitles": false
}

資料對象

在範疇模板中使用以下方法來操作 Data 物件。

單數
(string) 返回範疇的單數名稱。
{{ .Data.Singular }} → tag
複數
(string) 返回範疇的複數名稱。
{{ .Data.Plural }} → tags
術語
(page.Taxonomy) 返回 Taxonomy 物件,包含一組術語及與每個術語相關聯的 加權頁面
{{ $taxonomyObject := .Data.Terms }} 

一旦擁有了 Taxonomy 物件,就可以調用它的任何 方法,讓我們按照字母順序或術語數量進行排序。

按字母順序排序

下列範疇模板繼承了網站的基本模板,並顯示當前範疇中的一組術語。Hugo 按術語的字母順序排序,並顯示每個術語相關的頁面數量。

layouts/_default/taxonomy.html
{{ define "main" }}
  <h1>{{ .Title }}</h1>
  {{ .Content }}
  {{ range .Data.Terms.Alphabetical }}
    <h2><a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a> ({{ .Count }})</h2>
  {{ end }}
{{ end }}

按術語數量排序

下列範疇模板繼承了網站的基本模板,並顯示當前範疇中的一組術語。Hugo 根據與每個術語相關聯的頁面數量進行排序,並顯示每個術語的頁面數量。

layouts/_default/taxonomy.html
{{ define "main" }}
  <h1>{{ .Title }}</h1>
  {{ .Content }}
  {{ range .Data.Terms.ByCount }}
    <h2><a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a> ({{ .Count }})</h2>
  {{ end }}
{{ end }}

包含內容鏈接

在前面的範例中使用的 AlphabeticalByCount 方法會返回一個 排序過的範疇,因此我們還可以列出每個術語所對應的內容。

下列範疇模板繼承了網站的基本模板,並顯示當前範疇中的一組術語。Hugo 根據與每個術語相關聯的頁面數量進行排序,並顯示每個術語的頁面數量,接著列出每個術語所對應的內容。

layouts/_default/taxonomy.html
{{ define "main" }}
  <h1>{{ .Title }}</h1>
  {{ .Content }}
  {{ range .Data.Terms.ByCount }}
    <h2><a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a> ({{ .Count }})</h2>
    <ul>
      {{ range .WeightedPages }}
        <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
      {{ end }}
    </ul>
  {{ end }}
{{ end }}

顯示元數據

透過在內容目錄中創建對應的分支捆綁,你可以顯示每個術語的元數據。

例如,創建一個 “authors” 範疇:

hugo.
     
taxonomies:
  author: authors
[taxonomies]
  author = 'authors'
{
   "taxonomies": {
      "author": "authors"
   }
}

接著為每個術語創建一個 分支捆綁

content/
└── authors/
    ├── jsmith/
    │   ├── _index.md
    │   └── portrait.jpg
    └── rjones/
        ├── _index.md
        └── portrait.jpg

然後在每個術語頁面中加入 front matter:

content/authors/jsmith/_index.md
     
---
affiliation: University of Chicago
title: John Smith
---
+++
affiliation = 'University of Chicago'
title = 'John Smith'
+++
{
   "affiliation": "University of Chicago",
   "title": "John Smith"
}

接著創建一個針對 “authors” 範疇的模板:

layouts/authors/taxonomy.html
{{ define "main" }}
  <h1>{{ .Title }}</h1>
  {{ .Content }}
  {{ range .Data.Terms.Alphabetical }}
    <h2><a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a></h2>
    <p>隸屬機構: {{ .Page.Params.Affiliation }}</p>
    {{ with .Page.Resources.Get "portrait.jpg" }}
      {{ with .Fill "100x100" }}
        <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt="portrait">
      {{ end }}
    {{ end }}
  {{ end }}
{{ end }}

在上述範例中,我們列出了每位作者的隸屬機構和肖像照。