Get

Get 方法在 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」分類物件,接下來讓我們取得「suspense」這個詞彙所關聯的加權頁面:

{{ $weightedPages := $taxonomyObject.Get "suspense" }}

上述代碼等同於:

{{ $weightedPages := $taxonomyObject.suspense }}

然而,如果詞彙不是有效的 識別符號,則無法使用 鏈式語法。例如,以下代碼會因為識別符號包含連字號而拋出錯誤:

{{ $weightedPages := $taxonomyObject.my-genre }}

您也可以使用 index 函數,但語法會更冗長:

{{ $weightedPages := index $taxonomyObject "my-genre" }}

要檢查數據結構:

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

範例

使用此模板:

{{ $weightedPages := $taxonomyObject.Get "suspense" }}
{{ range $weightedPages }}
  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
{{ end }}

Hugo 會渲染如下:

<h2><a href="/books/jamaica-inn/">Jamaica inn</a></h2>
<h2><a href="/books/death-on-the-nile/">Death on the nile</a></h2>
<h2><a href="/books/and-then-there-were-none/">And then there were none</a></h2>