Link render hooks
Markdown
Markdown 連結有三個組成部分:連結文字、連結目標,以及可選的連結標題。
[Post 1](/posts/post-1 "My first post")
------ ------------- -------------
文字 目標 標題
這些組成部分會傳遞到渲染 Hook 的 上下文 中,如下所示。
上下文
連結渲染 Hook 模板接收以下上下文:
Destination
(string)連結目標。
Page
(page)對當前頁面的引用。
PageInner
New in v0.125.0(page)通過 RenderShortcodes 方法嵌套的頁面引用。查看詳細資訊。
PlainText
(string)連結描述的純文字。
Text
(template.HTML)連結描述。
Title
(string)連結標題。
範例
在預設配置中,Hugo 根據 CommonMark 規範 渲染 Markdown 連結。要創建與預設相同的渲染 Hook:
<a href="{{ .Destination | safeURL }}"
{{- with .Title }} title="{{ . }}"{{ end -}}
>
{{- with .Text }}{{ . }}{{ end -}}
</a>
{{- /* chomp trailing newline */ -}}若要為外部連結添加 rel="external" 屬性:
{{- $u := urls.Parse .Destination -}}
<a href="{{ .Destination | safeURL }}"
{{- with .Title }} title="{{ . }}"{{ end -}}
{{- if $u.IsAbs }} rel="external"{{ end -}}
>
{{- with .Text }}{{ . }}{{ end -}}
</a>
{{- /* chomp trailing newline */ -}}預設
New in v0.123.0Hugo 包含一個 內建的連結渲染 Hook,用於解析 Markdown 連結目標。此功能預設為停用,可在網站配置中啟用:
markup:
goldmark:
renderHooks:
link:
enableDefault: true
[markup]
[markup.goldmark]
[markup.goldmark.renderHooks]
[markup.goldmark.renderHooks.link]
enableDefault = true
{
"markup": {
"goldmark": {
"renderHooks": {
"link": {
"enableDefault": true
}
}
}
}
}
即使主題或模組提供了自訂渲染 Hook,也會覆蓋上述內建渲染 Hook。
內建的連結渲染 Hook 會通過尋找匹配的頁面來解析內部 Markdown 目標,接著回退到匹配的 頁面資源,再回退到匹配的 全域資源。對於遠端目標,會直接傳遞,且當無法解析目標時,渲染 Hook 不會拋出錯誤或警告。
全域資源必須放置在 assets 資料夾中。如果您的資源已放置於 static 資料夾,且無法或不願移動,您需要通過在網站配置中同時包含以下條目將 static 資料夾掛載到 assets 資料夾:
module:
mounts:
- source: assets
target: assets
- source: static
target: assets
[module]
[[module.mounts]]
source = 'assets'
target = 'assets'
[[module.mounts]]
source = 'static'
target = 'assets'
{
"module": {
"mounts": [
{
"source": "assets",
"target": "assets"
},
{
"source": "static",
"target": "assets"
}
]
}
}
PageInner 詳細資訊
New in v0.125.0PageInner 的主要用途是解析相對於包含的 Page 的連結和 頁面資源。例如,建立一個「include」掛載程式碼,從多個內容檔案組合成一個頁面,同時保留註腳和目錄的全域上下文:
{{ with site.GetPage (.Get 0) }}
{{ .RenderShortcodes }}
{{ end }}然後在您的 Markdown 中呼叫此掛載程式碼:
{{% include "/posts/p2" %}}在渲染 /posts/p2 時觸發的任何渲染掛載將獲得:
/posts/p1當呼叫Page/posts/p2當呼叫PageInner
如果不相關,PageInner 將回退到 Page 的值,並始終返回一個值。
作為一個實際範例,Hugo 的內嵌連結和圖片渲染掛載使用 PageInner 方法解析 Markdown 中連結和圖片的目標位置。請參考以下來源程式碼: