aboutsummaryrefslogtreecommitdiffhomepage
path: root/docs/content/en/methods/taxonomy/_common/get-a-taxonomy-object.md
blob: 4c4fc42c91c16ed2c28cd6696fea375315c56c12 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
---
# Do not remove front matter.
---

Before we can use a `Taxonomy` method, we need to capture a `Taxonomy` object.

## Capture a taxonomy object

Consider 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
```

To capture the "genres" taxonomy object from within any template, use the [`Taxonomies`] method on a `Site` object.

```go-html-template
{{ $taxonomyObject := .Site.Taxonomies.genres }}
```

To capture the "genres" taxonomy object when rendering its page with a taxonomy template, use the [`Terms`] method on the page's [`Data`] object:

{{< code file=layouts/_default/taxonomy.html  >}}
{{ $taxonomyObject := .Data.Terms }}
{{< /code >}}

To inspect the data structure:

```go-html-template
<pre>{{ jsonify (dict "indent" "  ") $taxonomyObject }}</pre>
```

Although the [`Alphabetical`] and [`ByCount`] methods provide a better data structure for ranging through the taxonomy, you can render the weighted pages by term directly from the `Taxonomy` object:

```go-html-template
{{ 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 }}
```

In the example above, the first anchor element is a link to the term page.


[`Alphabetical`]: /methods/taxonomy/alphabetical
[`ByCount`]: /methods/taxonomy/bycount

[`data`]: /methods/page/data
[`terms`]: /methods/page/data/#in-a-taxonomy-template
[`taxonomies`]: /methods/site/taxonomies