Hugo 添加相册页面

Overview

总有那么一瞬间特别特别想发一张照片,但不是以文章形式发布。

实现思路是程序自动遍历指定文件夹内的图片,并展示在一个页面上。有了思路,剩下的就是看文档、看文档、看文档,此功能利用 Hugo 的 readDir function 函数达成。

日常更新把图片丢到 static/photos 中即可(搭配 Github Action 自动化部署更香):

1static
2└── photos
3    ├── 落樱缤纷.jpeg
4    ├── 想象中的自由.jpeg
5    └── 儿时登过顶的狮子山.jpeg

主题集成

如需集成到自己的主题,一般如下操作,但不保证最终结果:

1.static/photos 丢几张命名好的图片先;

2.content/photos.md 创建一个md,好让 Hugo 生成页面;内容如下:

1---
2title: "我的相册"
3layout: "photos"
4---

3.layouts/_default/photos.html

 1{{ define "main" }}
 2<div class="post">
 3  <h2 class="post-title">{{.Title}}</h2>
 4</div>
 5
 6<div class="page-photos">
 7  {{ range (readDir "./static/photos") }}
 8  <figure>
 9    <img src="https://cdn.jsdelivr.net/gh/tfnick/blog@gh-pages/photos/{{ .Name }}" alt="{{ .Name }}" />
10    <figcaption>{{ .Name | replaceRE "(.*)[.].*" "$1"}}</figcaption>
11  </figure>
12  {{ end }}
13</div>
14{{ end }}

图片撸了 jsdelivr CDN 的羊毛,需自行更改,或者指定图片的 src 为本地:

1<img src="{{"photos/" | absURL }}{{ .Name }}" alt="{{ .Name }}" />

4.样式参考:

1.page-photos figure{max-width:80%;margin:0 auto 3rem;}
2.page-photos figure img{box-shadow: 0 12px 40px rgba(0,0,0,.15);border-radius: 8px;}

不了了之

原依据 os.FileInfo 还加了 {{ .Modtime }} 时间显示,本地测试都可以,但同步到线上之后所有图片都一个时间,了之。