分类模板
下面的 分类 模板从 基础模板继承了站点的外壳,并呈现当前分类中的 术语 列表。
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 }}
包含内容链接
前面示例中使用的 Alphabetical
和 ByCount
方法返回一个有序分类,因此我们还可以列出每个术语分配到的内容。
下面的分类模板从基础模板继承了站点的外壳,并呈现当前分类中的术语列表。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 }}
显示元数据
通过在 content
目录中创建相应的分支包来显示有关每个术语的元数据。
例如,创建一个“作者”分类法
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"
}
然后创建一个特定于“作者”分类的分类模板
layouts/authors/taxonomy.html
{{ define "main" }}
<h1>{{ .Title }}</h1>
{{ .Content }}
{{ range .Data.Terms.Alphabetical }}
<h2><a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a></h2>
<p>Affiliation: {{ .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 }}
在上面的示例中,我们列出了每位作者,包括他们的隶属关系和肖像。