给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
版权声明:转载请务必保留本文链接和注明内容来源,并自负版权等法律责任。