HUGO
Menu
GitHub 87548 stars Mastodon

标题渲染钩子

创建标题渲染钩子模板以覆盖 Markdown 标题到 HTML 的渲染。

上下文

标题_渲染钩子_ 模板接收以下 上下文

Anchor
(string) 标题元素的 id 属性。
Attributes
(map) Markdown 属性,如果您的站点配置如下则可用:
markup:
  goldmark:
    parser:
      attribute:
        title: true
[markup]
  [markup.goldmark]
    [markup.goldmark.parser]
      [markup.goldmark.parser.attribute]
        title = true
{
   "markup": {
      "goldmark": {
         "parser": {
            "attribute": {
               "title": true
            }
         }
      }
   }
}
Level
(int) 标题级别,1 到 6。
Page
(page) 对当前页面的引用。
PageInner
(page) 对通过 RenderShortcodes 方法嵌套的页面的引用。详见
PlainText
(string) 标题文本(纯文本形式)。
Text
(template.HTML) 标题文本。

示例

在默认配置中,Hugo 根据 CommonMark 规范 渲染 Markdown 标题,并添加了自动 id 属性。要创建执行相同操作的渲染钩子:

layouts/_markup/render-heading.html
<h{{ .Level }} id="{{ .Anchor }}" {{- with .Attributes.class }} class="{{ . }}" {{- end }}>
  {{- .Text -}}
</h{{ .Level }}>

要在每个标题的右侧添加锚点链接:

layouts/_markup/render-heading.html
<h{{ .Level }} id="{{ .Anchor }}" {{- with .Attributes.class }} class="{{ . }}" {{- end }}>
  {{ .Text }}
  <a href="#{{ .Anchor }}">#</a>
</h{{ .Level }}>

PageInner 详情

PageInner 的主要用途是相对于包含的 Page 解析链接和 页面资源。例如,创建一个 “include” 短代码,从多个内容文件组合页面,同时保留脚注和目录的全局上下文:

layouts/_shortcodes/include.html
{{ with .Get 0 }}
  {{ with $.Page.GetPage . }}
    {{- .RenderShortcodes }}
  {{ else }}
    {{ errorf "短代码 %q 无法找到 %q。参见 %s" $.Name . $.Position }}
  {{ end }}
{{ else }}
  {{ errorf "短代码 %q 需要一个位置参数来指示要包含的文件的逻辑路径。参见 %s" .Name .Position }}
{{ end }}

然后在您的 Markdown 中调用短代码:

content/posts/post-1.md
{{% include "/posts/post-2" %}}

在渲染 /posts/post-2 时触发的任何渲染钩子将获得:

  • 调用 Page 时获得 /posts/post-1
  • 调用 PageInner 时获得 /posts/post-2

如果不相关,PageInner 会回退到 Page 的值,并且始终返回一个值。

PageInner 方法仅与调用 RenderShortcodes 方法的短代码相关,并且您必须使用 Markdown 表示法 调用短代码。

作为实际示例,Hugo 的嵌入式链接和图像渲染钩子使用 PageInner 方法来解析 Markdown 链接和图像目标。请参阅各自的源代码:


Last updated: January 1, 0001
Improve this page