我出于自己的目的修改了Hugo的Ananke主题,修改内容在这里。
关键的变化是我想要一个可链接标签的列表(主题已经放在每个帖子的底部)也出现在
/tags/
页面的顶部(并且对类别和其他分类法也执行相同的操作) 。此外,我希望在每个标签气泡中也显示适用帖子的数量。
所以,我将这段代码放入模板中
/layouts/_default/terms.html
:
{{ $taxonomyObject := cond (eq .Data.Plural "tags") .Site.Taxonomies.tags .Site.Taxonomies.categories }}
<div class="measure-wide-l center f4 lh-copy nested-copy-line-height nested-links {{ $.Param "text_color" | default "mid-gray" }}">
{{ .Content }}
<ul class="pa0">
{{ range .Data.Pages }}
<li class="list di">
<a href="{{ .Page.RelPermalink }}" class="link f5 grow no-underline br-pill ba ph3 pv2 mb2 dib black sans-serif">
{{- .Page.Title -}} <span class="f4"><strong> {{ $taxonomyObject.Count .Page.Title }}</strong></span>
</a>
</li>
{{ end }}
</ul>
</div>
(我可以稍后添加对除标签和类别之外的分类法的检查)
我还修改了
exampleSite
类别以添加一些标签和类别。然而,与大多数示例和教程所显示的不同,我没有将它们全部设为单个单词小写值(如果我这样做,我就不会注意到这个问题)。
以下是 macOS 上的结果(Sonoma 14.4.1、Intel、go v1.22.1、Hugo v0.124.1):
这是 Hugo 在 Linux 上从同一源生成的内容(Alpine 3.18、x86_64、go v1.20.11、Hugo v0.111.3)
如您所见,差异在于:
a
、the
、and
等以外的单词均大写)。我认为后者是一个比前者更严重的问题,但如果所有行为在操作系统之间保持一致那就太好了。
我发现的解决方案的一部分涉及修改模板条目,如下所示:
<li class="list di">
{{ $normalizedTerm := replace (lower .Page.Title) " " "-" }}
<a href="{{ .Page.RelPermalink }}" class="link f5 grow no-underline br-pill ba ph3 pv2 mb2 dib black sans-serif">
{{- .Page.Title -}} <span class="f4"><strong> {{ $taxonomyObject.Count $normalizedTerm }}</strong></span>
</a>
</li>
但是,如果我只是更改为这样,在 macOS 上,计数将不正确。
那么为什么会发生这种情况,无论我在什么操作系统上进行操作,如何获得一致的站点生成呢?我在 Hugo 文档中没有找到确定模板内操作系统类型的方法(有些相关的功能是here和here。即使这是可能的,它也不是一个理想的解决方案:
虽然一个明显的区别是 Linux 文件系统区分大小写,但这并不是那么简单,因为在两个系统上 Hugo 生成的所有文件都是小写的,没有空格。 Hugo 实际上会从相同的代码生成不同的 HTML,具体取决于操作系统。
所以,两个问题是:
我通过将模板编辑为以下内容找到了部分有效(但可靠)的解决方案:
{{ $taxonomyObject := cond (eq .Data.Plural "tags") .Site.Taxonomies.tags .Site.Taxonomies.categories }}
{{ $replaceFlag := getenv "HUGO_TAXONOMY_REPLACE_FLAG" }}
<div class="measure-wide-l center f4 lh-copy nested-copy-line-height nested-links {{ $.Param "text_color" | default "mid-gray" }}">
{{ .Content }}
<ul class="pa0">
{{ range .Data.Pages }}
<li class="list di">
{{ $transformedTerm := replace (lower .Page.Title) " " "-" }}
{{ $normalizedTerm := cond (ne $replaceFlag "") $transformedTerm .Page.Title }}
<a href="{{ .Page.RelPermalink }}" class="link f5 grow no-underline br-pill ba ph3 pv2 mb2 dib black sans-serif">
{{- .Page.Title -}} <span class="f4"><strong> {{ $taxonomyObject.Count $normalizedTerm }}</strong></span>
</a>
</li>
{{ end }}
</ul>
虽然没有直接的方法来访问 Hugo 构建中的系统类型,但可以在调用
hugo -D
之前适当地设置该变量。这不会改变不同的大小写,但正如我在问题中所说,这是一个比错误计数更小的问题——这可以解决。
但这是通过反复试验找到的解决方案。我仍然对为什么会出现这种差异感兴趣。