Hugo 相关内容
在"另请参阅"部分列出相关内容。
Hugo 使用一组因素根据 front matter 参数识别页面的相关内容。这可以调整为所需的索引和参数集,或保留为 Hugo 的默认 相关内容配置。
列出相关内容
列出最多 5 个相关页面(共享相同的 date 或 keyword 参数),只需在模板中包含类似以下的 partial:
layouts/_partials/related.html
{{ with site.RegularPages.Related . | first 5 }}
<p>相关内容:</p>
<ul>
{{ range . }}
<li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
{{ end }}
</ul>
{{ end }}Related 方法接受一个参数,可以是 Page 或选项映射。选项映射有以下选项:
- indices
- (
slice) 要在其中搜索的索引。 - document
- (
page) 要查找相关内容的页面。指定选项映射时必需。 - namedSlices
- (
slice) 要搜索的关键字,使用keyVals函数表示为KeyValues切片。 - fragments
- (
slice) 特殊关键字列表,用于配置为"fragments"类型的索引。这将匹配文档的 fragment 标识符。
使用上述所有选项的虚构示例:
{{ $page := . }}
{{ $opts := dict
"indices" (slice "tags" "keywords")
"document" $page
"namedSlices" (slice (keyVals "tags" "hugo" "rocks") (keyVals "date" $page.Date))
"fragments" (slice "heading-1" "heading-2")
}}我们在 Hugo 0.111.0 中改进并简化了此功能。在此之前,我们有 3 种不同的方法:Related、RelatedTo 和 RelatedIndices。现在我们只有一个方法:Related。旧方法仍然可用但已弃用。另请参阅 this blog article 了解此功能更高级用法的详细说明。
索引内容标题
Hugo 可以索引内容中的标题并使用它来查找相关内容。你可以通过在 related 配置中添加类型为 fragments 的索引来启用此功能:
related:
includeNewer: true
indices:
- applyFilter: true
name: fragmentrefs
type: fragments
weight: 80
threshold: 20
toLower: false
[related]
includeNewer = true
threshold = 20
toLower = false
[[related.indices]]
applyFilter = true
name = 'fragmentrefs'
type = 'fragments'
weight = 80
{
"related": {
"includeNewer": true,
"indices": [
{
"applyFilter": true,
"name": "fragmentrefs",
"type": "fragments",
"weight": 80
}
],
"threshold": 20,
"toLower": false
}
}
name映射到可选的 front matter slice 属性,可用于从页面级别链接到 fragment/标题级别。- 如果启用了
applyFilter,结果中每个页面上的.HeadingsFiltered将反映过滤后的标题。如果你想在相关内容列表中显示标题,这很有用:
{{ $related := .Site.RegularPages.Related . | first 5 }}
{{ with $related }}
<h2>另请参阅</h2>
<ul>
{{ range $i, $p := . }}
<li>
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
{{ with .HeadingsFiltered }}
<ul>
{{ range . }}
{{ $link := printf "%s#%s" $p.RelPermalink .ID | safeURL }}
<li>
<a href="{{ $link }}">{{ .Title }}</a>
</li>
{{ end }}
</ul>
{{ end }}
</li>
{{ end }}
</ul>
{{ end }}