自动把Markdown链接转换为网页链接
在本地编辑笔记时经常顺手插入一个笔记链接,但是发布到网站上,这个链接是不能跳转的,利用一段代码解决这个问题。
功能说明:
这个文件告诉 Hugo:当在 Markdown 文章里遇到 [文字](链接) 时,该怎么处理。
核心目的:
让你可以直接使用 Obsidian 的相对路径文件链接(例如:[下一章](../docs/part2.md)),
Hugo 会自动把它们转换成最终网页的正确网址(例如:/docs/part2/)。
使用方式:
- 将此文件保存为 layouts/_default/_markup/render-link.html
- 在文章里正常写 Markdown 链接:[链接文字](相对路径/文件名.md)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
{{- /* 1. 获取链接的目标地址 (就是括号里的内容) */ -}}
{{- $destination := .Destination -}}
{{- /* 2. 判断是否为远程链接 (http开头) 或 邮件链接 (mailto开头) */ -}}
{{- /* 如果是远程链接,我们就不处理,直接保持原样 */ -}}
{{- $isRemote := or (hasPrefix $destination "http") (hasPrefix $destination "https") (hasPrefix $destination "mailto")
-}}
{{- if not $isRemote -}}
{{- /* 3. 如果是内部链接,尝试在 Hugo 的数据库里找这就文章 */ -}}
{{- $page := .Page.GetPage $destination -}}
{{- if $page -}}
{{- /* 4. 如果找到了!把链接地址替换成网页的最终永久链接 (RelPermalink) */ -}}
{{- $destination = $page.RelPermalink -}}
{{- else -}}
{{- /* 5. 如果没找到,可能是因为链接带了 .md 后缀,尝试去掉后缀再找一次 */ -}}
{{- $cleanPath := replace $destination ".md" "" -}}
{{- $pageRetry := .Page.GetPage $cleanPath -}}
{{- if $pageRetry -}}
{{- /* 6. 去掉后缀后找到了!替换成网页链接 */ -}}
{{- $destination = $pageRetry.RelPermalink -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- /* 7. 最终生成标准的 HTML <a> 标签 */ -}}
<a href="{{ $destination | safeURL }}" {{ with .Title}} title="{{ . }}" {{ end }}>{{ .Text | safeHTML }}</a>
|