令人难以置信的是,通过 Hugo 找到有关稍微更先进的技术的可靠信息是多么困难。
\n\n经过一段时间的搜索后,我发现这篇文章提供了一种为 Hugo 实现面包屑的非常好的方法。
\n\n我对其进行了一些修改,以便不向最后一条路径添加不必要的链接,并利用 i18n 将 URL 片段转换为更易于人类阅读的内容。我还做了一个小解决方法来删除一些与翻译条目不匹配的不需要的路径:
\n\n{{- $url := replace .Permalink ( printf "%s" ( "/" | absLangURL ) ) "" -}}\n{{- $url := replace .Permalink ( printf "%s" ( "/" | absLangURL ) ) "" -}}\n{{- $.Scratch.Add "path" ( "/" | absLangURL ) -}}\n\n{{- $.Scratch.Add "breadcrumb" (slice (dict "url" ( "/" | absLangURL ) "name" "home" "position" 1 )) -}}\n{{- range $index, $element := split $url "/" -}}\n {{- $.Scratch.Add "path" $element -}}\n {{- $.Scratch.Add "path" "/" -}}\n {{- if ne $element "" -}}\n {{- $.Scratch.Add "breadcrumb" (slice (dict "url" ($.Scratch.Get "path") "name" . "position" (add $index 2))) -}}\n {{- end -}}\n{{- end -}}\n\n<script type="application/ld+json">\n{\n "@context": "http://schema.org",\n "@type": "BreadcrumbList",\n "itemListElement": [{{ range $.Scratch.Get "breadcrumb" }}{{ if ne .position 1 }},{{ end }}{\n "@type": "ListItem",\n "position": {{ .position }},\n "item": {\n "@id": "{{ .url }}",\n "name": "{{ .name }}"\n }\n }{{ end }}]\n}\n</script>\n\n<nav class="breadcrumb">\n {{- $length := len ($.Scratch.Get "breadcrumb") -}}\n\n {{- range $index, $.Scratch.Get "breadcrumb" -}}\n\n <!--\n Assigning a constant as default value for i18n function\n if it doesn\'t match any entry\n Then check if current Breadcrumb item matches this constant,\n which means that part shouldn\'t be one of Breadcrumb\'s trail\n -->\n {{- $i18n := i18n ( print "breadcrumbs-" .name ) | default "__INTERNAL__" -}}\n\n {{- if not ( eq ($i18n) "__INTERNAL__" ) -}}\n\n {{ if eq ( (int .position) ) $length }}\n <span class="breadcrumb-item active">{{ $i18n }}</span>\n {{- else -}}\n <a class="breadcrumb-item" href="{{ .url }}" >{{ $i18n }}</a>\n {{- end -}}\n\n {{- end -}}\n\n {{ end }}\n</nav>\nRun Code Online (Sandbox Code Playgroud)\n\n它工作得非常好,除了据我所知,到目前为止,在浏览分页链接时,随着分页页面的增加,所有内容都会开始复制 N 次(即第 2 页的两倍,第 3 页的三次,依此类推)。
\n\n我搜索了更多,发现了一个类似的实现,其中没有重复...但是链接都搞乱了,每个路径的 URL 都是所有路径的所有链接的串联 oO
\n\n我尽量避免在 Hugo 的“论坛”上提问,因为那里给出的答案大多数时候很难理解、不完整或带有“伪伪代码”。
\n\n有谁知道如何进行这项工作并可以帮我一把?
\nbreadcrumbs.html文件夹中创建一个名为的文件layouts/partials<ol class="nav navbar-nav">
{{ template "breadcrumbnav" (dict "p1" . "p2" .) }}
</ol>
{{ define "breadcrumbnav" }}
{{ if .p1.Parent }}
{{ template "breadcrumbnav" (dict "p1" .p1.Parent "p2" .p2 ) }}
{{ else if not .p1.IsHome }}
{{ template "breadcrumbnav" (dict "p1" .p1.Site.Home "p2" .p2 ) }}
{{ end }}
<li{{ if eq .p1 .p2 }} class="active"{{ end }}>
<a href="{{ .p1.Permalink }}">{{ .p1.Title }}</a>
</li>
{{ end }}
Run Code Online (Sandbox Code Playgroud)
breadcrumbs.html您需要的地方:{{ partial "breadcrumbs.html" . }}
Run Code Online (Sandbox Code Playgroud)
这会产生全部有效的链接(包括部分)。
小智 0
我被迫停止编码,但由于这个问题今天向我弹出了通知,让我展示一下我是如何解决后面问题中提出的问题的,尽管我无法真正解释为什么会发生这种情况-或者-如果现在在较新版本的 Hugo 中仍然发生这种情况(我停止使用 v0.28)
\n\n好吧,经过多次测试,我只是用 \xe2\x80\x9cdot\xe2\x80\x9d 的范围初始化了一个模板变量,\xe2\x80\x99s 在调用时传递给部分模板,并且,部分,而不是从美元符号的上下文中调用 Scratch (或者在 Hugo/Go 中调用的任何 \xe2\x80\x99s ),我使用了这个初始化的变量:
\n\n列表.html
\n\n{{ partial "breadcrumbs.html" . }}\nRun Code Online (Sandbox Code Playgroud)\n\n部分/breadcrumbs.html
\n\n{{ $dot := . }}\n{{ $dot.Scratch.Set "path" "" }}\n{{ $dot.Scratch.Set "breadcrumb" slice }}\n\n<!-- Rest of the code in the original question -->\nRun Code Online (Sandbox Code Playgroud)\n\n从他们开始,而不是,例如:
\n\n{{ $.Scratch.Add "path" $element }}\nRun Code Online (Sandbox Code Playgroud)\n\n我用了:
\n\n{{ $dot.Scratch.Add "path" $element }}\nRun Code Online (Sandbox Code Playgroud)\n\n所有分页元素都可以正常工作,没有重复。
\n| 归档时间: |
|
| 查看次数: |
3422 次 |
| 最近记录: |