片段
Syntax
PAGE.Fragments
Returns
tableofcontents.Fragments
在一个 URL 中,无论是绝对还是相对的,fragment 链接到页面上一个 HTML 元素的 id
属性。
/articles/article-1#section-2
------------------- ---------
path fragment
Hugo 为页面内容中的每个 markdown ATX 和 setext 标题分配一个 id
属性。你可以按需覆盖 id
,并使用 markdown attribute 创建 table of contents (TOC) 中的条目与页面上的标题之间的关系。
在 Page
对象上使用 Fragments
方法,并结合 Fragments.ToHTML
方法或者遍历 Fragments.Map
数据结构,可以创建一个包含 table of contents 的结构。
方法
- Headings
- (
map
) 页面上所有标题的嵌套映射。每个映射包含以下键值:ID
、Title
和Headings
。如需检查数据结构,请使用:
<pre>{{ .Fragments.Headings | jsonify (dict "indent" " ") }}</pre>
- HeadingsMap
- (
slice
) 所有页面标题映射的切片,每个标题的一级键。每个映射包含以下键值:ID
、Title
和Headings
。如需检查数据结构,请使用:
<pre>{{ .Fragments.HeadingsMap | jsonify (dict "indent" " ") }}</pre>
- Identifiers
- (
slice
) 包含页面上每个标题的id
的切片。如需检查数据结构,请使用:
<pre>{{ .Fragments.Identifiers | jsonify (dict "indent" " ") }}</pre>
- Identifiers.Contains
- (
bool
) 报告页面上是否有一个或多个标题具有给定的id
,对于验证链接中的片段很有用。render hook
{{ .Fragments.Identifiers.Contains "section-2" }} → true
- Identifiers.Count
- (
int
) 具有给定id
属性的页面上标题的数量,用于检测重复。
{{ .Fragments.Identifiers.Count "section-2" }} → 1
- ToHTML
- (
template.HTML
) 返回一个嵌套列表的 TOC,有序或无序,与TableOfContents
方法返回的 HTML 相同。该方法需要三个参数:起始级别 (int
)、结束级别 (int
) 和布尔值 (true
为有序列表,false
为无序列表)。
当您想要独立于站点配置中的 table of contents 设置来控制起始级别、结束级别或列表类型时,请使用该方法。
{{ $startLevel := 2 }}
{{ $endLevel := 3 }}
{{ $ordered := true }}
{{ .Fragments.ToHTML $startLevel $endLevel $ordered }}
Hugo 会将其渲染为:
<nav id="TableOfContents">
<ol>
<li><a href="#section-1">Section 1</a>
<ol>
<li><a href="#section-11">Section 1.1</a></li>
<li><a href="#section-12">Section 1.2</a></li>
</ol>
</li>
<li><a href="#section-2">Section 2</a></li>
</ol>
</nav>