Alphabetical

Alphabetical 方法在 Taxonomy 物件中,會回傳一個按 詞彙 字母順序排列的 有序分類

雖然 Taxonomy 物件本身是 映射,但有序分類是一個 切片,其中每個元素都是一個物件,包含了詞彙以及它所對應的 加權頁面 切片。

在我們可以使用 Taxonomy 方法之前,我們需要先捕捉 Taxonomy 物件。

捕捉一個 Taxonomy 物件

考慮以下的網站配置:

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

以及這個內容結構:

content/
├── books/
│   ├── and-then-there-were-none.md --> genres: suspense
│   ├── death-on-the-nile.md        --> genres: suspense
│   └── jamaica-inn.md              --> genres: suspense, romance
│   └── pride-and-prejudice.md      --> genres: romance
└── _index.md

要從任何範本中捕捉 “genres” 的 Taxonomy 物件,請使用 Site 物件上的 Taxonomies 方法。

{{ $taxonomyObject := .Site.Taxonomies.genres }}

在渲染其頁面時,要捕捉 “genres” 的 Taxonomy 物件,請使用頁面的 Data 物件上的 Terms 方法:

layouts/_default/taxonomy.html
{{ $taxonomyObject := .Data.Terms }}

要檢查資料結構:

<pre>{{ debug.Dump $taxonomyObject }}</pre>

雖然 AlphabeticalByCount 方法提供了更適合範圍遍歷的資料結構,但您也可以直接從 Taxonomy 物件渲染按類別加權的頁面:

{{ range $term, $weightedPages := $taxonomyObject }}
  <h2><a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a></h2>
  <ul>
    {{ range $weightedPages }}
      <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
    {{ end }}
  </ul>
{{ end }}

在上面的範例中,第一個錨點元素是指向該類別頁面的連結。

取得有序分類

現在,我們已經捕捉到「genres」分類物件,接下來讓我們依照詞彙字母順序取得有序分類:

{{ $taxonomyObject.Alphabetical }}

若要反轉排序順序:

{{ $taxonomyObject.Alphabetical.Reverse }}

要檢查資料結構:

<pre>{{ debug.Dump $taxonomyObject.Alphabetical }}</pre>

有序的 taxonomy 是一個切片,其中每個元素都是一個物件,包含了類別和與該類別相關聯的頁面切片。

切片中的每個元素提供以下方法:

Count
(int) 返回與該類別相關聯的頁面數量。
Page
(page.Page) 返回該類別的 Page 物件,對於連結到該類別頁面很有用。
Pages
(page.Pages) 返回一個 Pages 物件,包含了與該類別相關聯的 Page 物件,並按 taxonomic weight 排序。若要進行排序或分組,請使用 Pages 物件中可用的任何 [方法]。例如,按最後修改日期排序。
Term
(string) 返回該類別名稱。
WeightedPages
(page.WeightedPages) 返回與該類別相關聯的有權重頁面切片,並按 taxonomic weight 排序。上述的 Pages 方法更具彈性,允許進行排序和分組。

範例

使用以下模板:

{{ range $taxonomyObject.Alphabetical }}
  <h2><a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a> ({{ .Count }})</h2>
  <ul>
    {{ range .Pages.ByTitle }}
      <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
    {{ end }}
  </ul>
{{ end }}

Hugo 會渲染成:

<h2><a href="/genres/romance/">romance</a> (2)</h2>
<ul>
  <li><a href="/books/jamaica-inn/">Jamaica inn</a></li>
  <li><a href="/books/pride-and-prejudice/">Pride and prejudice</a></li>
</ul>
<h2><a href="/genres/suspense/">suspense</a> (3)</h2>
<ul>
  <li><a href="/books/and-then-there-were-none/">And then there were none</a></li>
  <li><a href="/books/death-on-the-nile/">Death on the nile</a></li>
  <li><a href="/books/jamaica-inn/">Jamaica inn</a></li>
</ul>