评论
介绍如何通过局部模板在 Hugo 站点中接入第三方评论服务。
评论功能与 Hugo
Hugo 内置了对 Disqus 的支持。Disqus 是一项第三方服务,通过 JavaScript 为网站提供评论与社区功能。评论数据的存储、审核与展示都在服务端完成,Hugo 只负责在页面上输出挂载代码——静态站点本身没有数据库,也没有可以写入评论的服务端接口,所以「在 Hugo 里加评论」实际上就是把第三方提供的嵌入片段放进模板。
你的主题可能已经支持 Disqus;如果没有,借助 Hugo 内置的局部模板(partial)也很容易把它加进去。
添加 Disqus
Hugo 自带了把 Disqus 载入模板所需的全部代码。在把 Disqus 加到站点之前,需要先注册一个账号并取得站点短名(shortname)。
配置 Disqus
Disqus 只需要在项目配置中设置一个值:
# hugo.toml
[services.disqus]
shortname = 'your-disqus-shortname'模板中可以用 .Site.Config.Services.Disqus.Shortname 读取这个值。
对多数网站来说,这些配置已经够用。此外还可以在单个内容文件的前置元数据(front matter)中设置以下参数:
+++
title = "我的文章"
[params]
disqus_identifier = 'unique-identifier'
disqus_title = '文章标题'
disqus_url = 'https://example.org/blog/my-post/'
+++disqus_identifier:该页讨论串的唯一标识。URL 发生变化时,靠它保住原有的评论。disqus_title:讨论串的标题。disqus_url:讨论串的规范 URL。同一份内容有多个地址时,用它覆盖 Disqus 识别讨论串所用的地址。
渲染局部模板
在希望评论出现的位置加入下面这行代码即可,通常写在单页模板里:
{{ partial "disqus.html" . }}disqus.html 是 Hugo 内置的局部模板,配置好短名之后,它就会输出评论容器与所需的脚本。如果内置模板不符合需要,可以把它的源码复制到 layouts/_partials/ 下的同名文件里再作修改,模板查找顺序会优先使用你提供的版本。注意在本地预览站点时,Hugo 会把 Disqus 组件替换为一句提示,说明本地预览默认不加载 Disqus 评论。
替代方案
Disqus 之外还有很多选择,上游文档把它们分成商业与开源两类。
商业评论系统:
开源评论系统:
- Cactus Comments
- Comentario
- Comma
- Discourse
- Giscus
- Isso
- Remark42
- Staticman
- Talkyard
- Utterances
- Zoomment
这些方案大多沿用同一套思路:由服务方提供一段 <script>,把它放进自己的局部模板,再按服务方的要求填写仓库、站点标识等参数。其中 Giscus、Utterances 把评论存进 GitHub 仓库的 Discussions 或 Issues,读者需要登录 GitHub 才能发言,适合开发者向的站点;Comentario、Isso、Remark42 一类自托管方案把数据留在自己的服务器上,代价是需要额外部署与维护。无论选哪一种,都应先确认它提供数据导出能力——服务下线或更换服务商时,历史评论往往无法迁移。
隐私设置
评论数据存放在第三方,涉及隐私与合规问题,Hugo 为内置模板提供了隐私(privacy)配置。以 Disqus 为例,可以在项目配置中关闭内置模板的输出:
[privacy]
[privacy.disqus]
disable = truedisable 的默认值是 false;设为 true 后 Hugo 便不再输出 Disqus 组件,是否改由自定义的局部模板手动加载由站点作者决定。请注意这些设置只作用于 Hugo 自带的模板,不影响主题或模块提供的模板。第三方脚本还会增加页面请求,影响加载性能,可以延迟加载,或只在真正需要评论的页面渲染。