给hugo添加搜索功能
条评论前言
Hugo 这种静态站点默认没有搜索功能,大概因为没了数据库实现反而不方便。Search for your Hugo Website 列出了一些可选项,要么自己生成索引用开源的工具搜索,要么用第三方搜索服务如 algolia。
其实 algolia 也是运营几年的熟脸,提供的免费方案小网站也够用,但是还是第三方依赖,配置的动作同样还是要做的,不如自己来。
自己来的方案里我选择 Github Gist for Fuse.js integration ,因为它不需要另外引入 Node.js、 Grunt 或 Gulp,而是利用 Hugo 内置的功能在 build 的时候生成索引输出到 JSON,看起来更简单的样子。
输出索引文件
第一步:修改配置文件 Config.toml
添加以下内容:
1 | [outputs] |
第二步:创建 layouts/_default/index.json
完成后可以从 /index.json 打开索引文件。
注:
layouts/目录里保存的是 Hugo 的模板文件。layouts/是站点级别的模板,themes/<theme name>/layouts/是主题级别的模板,站点级别模板的设置优先于主题级别的模板。
创建搜索页面
第一步:创建 content/search.md
1 |
|
根据 URL 规则,Hugo 会生成 /search/index.html 或 /search.html 。但是因为 content/ 里的内容不支持插入 JS ,所以此处的关键是 layout: "search" 指定模板文件,之后在模板文件中实现搜索功能。
第二步:创建 layouts/_default/search.html
1 | <section> |
和原链相比去掉了以下这样的代码:
此处的 define 其实更像是 implement,或者说 define 这个 block 内的内容,而前提是你已经定义过这个 block。一般是在 Base Template 里,以下面的格式定义:
这个例子是基于 Hugo Resume Theme,它在 layouts/_default/baseof.html 里定义了 block,而我使用的主题没有,结果就是直接使用原链的代码搜索页面会跳白板。
然后,没有 Base Template 可以引用的结果就是搜索界面比较丑,慢慢美化吧。
我就加个简单搜索功能,结果被迫学习了 Hugo 的模板布局架构,嗯,人间正道是沧桑。
第三步:创建 static/js/search.js
这是具体实现搜索功能的 JS 函数,search.html 中被引用,照抄即可。
1 | summaryInclude=60; |
注:Hugo 的
static/目录存放需要应用的图片、CSS、JS文件,build时会直接生成于站点根目录。
后记
配置完成发现中文搜索有问题(中文分词问题,不奇怪),之后再慢慢研究吧。
这个例子使用的是 Fuse.js,但按照这个结构替换为其它 JS 库(Lunr.js …)也是可以的
参考链接
本文标题:给hugo添加搜索功能
文章作者:凹凸曼
发布时间:2020-08-27
最后更新:2020-08-27
原始链接:https://sobaigu.com/hugo-set-featuer-search.html
版权声明:转载请务必保留本文链接和注明内容来源,并自负版权等法律责任。