mirror of https://github.com/gohugoio/hugo
186 lines
4.5 KiB
Markdown
186 lines
4.5 KiB
Markdown
---
|
|
title: Taxonomies
|
|
description: Returns a data structure containing the site's Taxonomy objects, the terms within each Taxonomy object, and the pages to which the terms are assigned.
|
|
categories: []
|
|
keywords: []
|
|
action:
|
|
related: []
|
|
returnType: page.TaxonomyList
|
|
signatures: [SITE.Taxonomies]
|
|
---
|
|
|
|
<!-- TODO
|
|
Show template example: GetTerms
|
|
|
|
|
|
|
|
-->
|
|
|
|
Conceptually, the `Taxonomies` method on a `Site` object returns a data structure such as:
|
|
|
|
{{< code-toggle >}}
|
|
taxonomy a:
|
|
- term 1:
|
|
- page 1
|
|
- page 2
|
|
- term 2:
|
|
- page 1
|
|
taxonomy b:
|
|
- term 1:
|
|
- page 2
|
|
- term 2:
|
|
- page 1
|
|
- page 2
|
|
{{< /code-toggle >}}
|
|
|
|
For example, on a book review site you might create two taxonomies; one for genres and another for authors.
|
|
|
|
With this site configuration:
|
|
|
|
{{< code-toggle file=hugo >}}
|
|
[taxonomies]
|
|
genre = 'genres'
|
|
author = 'authors'
|
|
{{< /code-toggle >}}
|
|
|
|
And this content structure:
|
|
|
|
```text
|
|
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
|
|
```
|
|
|
|
Conceptually, the taxonomies data structure looks like:
|
|
|
|
{{< code-toggle >}}
|
|
genres:
|
|
- suspense:
|
|
- And Then There Were None
|
|
- Death on the Nile
|
|
- Jamaica Inn
|
|
- romance:
|
|
- Jamaica Inn
|
|
- Pride and Prejudice
|
|
authors:
|
|
- achristie:
|
|
- And Then There Were None
|
|
- Death on the Nile
|
|
- ddmaurier:
|
|
- Jamaica Inn
|
|
- jausten:
|
|
- Pride and Prejudice
|
|
{{< /code-toggle >}}
|
|
|
|
|
|
To list the "suspense" books:
|
|
|
|
```go-html-template
|
|
<ul>
|
|
{{ range .Site.Taxonomies.genres.suspense }}
|
|
<li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
|
|
{{ end }}
|
|
</ul>
|
|
```
|
|
|
|
Hugo renders this to:
|
|
|
|
```html
|
|
<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>
|
|
```
|
|
|
|
{{% note %}}
|
|
Hugo's taxonomy system is powerful, allowing you to classify content and create relationships between pages.
|
|
|
|
Please see the [taxonomies] section for a complete explanation and examples.
|
|
|
|
[taxonomies]: /content-management/taxonomies/
|
|
{{% /note %}}
|
|
|
|
## Examples
|
|
|
|
### List content with the same taxonomy term
|
|
|
|
If you are using a taxonomy for something like a series of posts, you can list individual pages associated with the same term. For example:
|
|
|
|
```go-html-template
|
|
<ul>
|
|
{{ range .Site.Taxonomies.series.golang }}
|
|
<li><a href="{{ .Page.RelPermalink }}">{{ .Page.Title }}</a></li>
|
|
{{ end }}
|
|
</ul>
|
|
```
|
|
|
|
### List all content in a given taxonomy
|
|
|
|
This would be very useful in a sidebar as “featured content”. You could even have different sections of “featured content” by assigning different terms to the content.
|
|
|
|
```go-html-template
|
|
<section id="menu">
|
|
<ul>
|
|
{{ range $term, $taxonomy := .Site.Taxonomies.featured }}
|
|
<li>{{ $term }}</li>
|
|
<ul>
|
|
{{ range $taxonomy.Pages }}
|
|
<li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
|
|
{{ end }}
|
|
</ul>
|
|
{{ end }}
|
|
</ul>
|
|
</section>
|
|
```
|
|
|
|
### Render a site's taxonomies
|
|
|
|
The following example displays all terms in a site's tags taxonomy:
|
|
|
|
```go-html-template
|
|
<ul>
|
|
{{ range .Site.Taxonomies.tags }}
|
|
<li><a href="{{ .Page.Permalink }}">{{ .Page.Title }}</a> {{ .Count }}</li>
|
|
{{ end }}
|
|
</ul>
|
|
```
|
|
This example will list all taxonomies and their terms, as well as all the content assigned to each of the terms.
|
|
|
|
{{< code file=layouts/partials/all-taxonomies.html >}}
|
|
{{ with .Site.Taxonomies }}
|
|
{{ $numberOfTerms := 0 }}
|
|
{{ range $taxonomy, $terms := . }}
|
|
{{ $numberOfTerms = len . | add $numberOfTerms }}
|
|
{{ end }}
|
|
|
|
{{ if gt $numberOfTerms 0 }}
|
|
<ul>
|
|
{{ range $taxonomy, $terms := . }}
|
|
{{ with $terms }}
|
|
<li>
|
|
<a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a>
|
|
<ul>
|
|
{{ range $term, $weightedPages := . }}
|
|
<li>
|
|
<a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a>
|
|
<ul>
|
|
{{ range $weightedPages }}
|
|
<li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
|
|
{{ end }}
|
|
</ul>
|
|
</li>
|
|
{{ end }}
|
|
</ul>
|
|
</li>
|
|
{{ end }}
|
|
{{ end }}
|
|
</ul>
|
|
{{ end }}
|
|
{{ end }}
|
|
{{< /code >}}
|