修复我的标签列表

hugo / go

最近发现我的标签列表有些问题,记录一下修复

问题

这个问题应该已经存在了好久,只是我一直没有发现,随便点一个标签我发现,列表里居然 列出了大量不相干的内容,我意识到我的标签页其实并没有正常工作。

原因

我的标签页是我自制主题下 taxonomy/tag.html 显示的,修复前这个文件是这个样子:

{{ partial "header.html" . }}
{{ partial "navbar.html" . }}

<div class="col-11 col-lg-8 mx-auto border-0 card bg-transparent">
  <h1>Tags: {{ .Title }}</h1>
</div>

<div class="bg-transparent" id="div-regular-pages">
  {{ range .Site.RegularPages }}
  {{ .Render "summary" }}
  {{ end }}
</div>

{{ partial "footer.html"}}

很显然,这个页面把所有页面都列出来了,并没有根据标签进行筛选。

解决

我查阅了很多资料,但是感觉都讲得比较晦涩,也翻了几个主题,想看一下别人的做法, 但是还是比较难懂,于是开始想能不能用最直接的方法解决这个问题,这个问题可以分解为 两个问题,一个是如何获取当前标签名,第二是如何筛选出所有相同标签。

当前标签名

首先需要确定的是当前标签名,这样我们才可以进行筛选,我们注意到:

  <h1>Tags: {{ .Title }}</h1>

这个可以正确显示当前标签页,所以我们需要把这个值保存下来:

  <h1>Tags: {{ .Title }}</h1>
  {{ $tag := .Title }}

筛选

在查阅资料的过程中,我们知道标签保存在 .Params.tags,那么其实只要判断标签列表 中包含我们的当前标签名,那么就可以列出所有同名标签了:

<div class="bg-transparent" id="div-regular-pages">
  {{ range .Site.RegularPages }}
  {{ if in .Params.tags $tag }}
  {{ .Render "summary" }}
  {{ end }}
  {{ end }}
</div>

总结

这样我的标签列表就修复完成了,是不是非常简单?