我现在用的博客是静态网页,没有独立的后端服务器来支撑,为了实现评论功能,需要对接第三方的评论插件,经过各种考虑,决定使用gitalk
。
这是一个基于GitHub
的issues
来实现的评论工具。
这个功能使用到了以下插件
GitHub
首先得有一个GitHub
账号,然后打开链接↙️
New OAuth application
注册一个OAuth App
具体填写参考如下:
1 2 3 4
| Application name //应用名称 Homepage URL //填自己的博客地址就可以了 Application description //应用描述 Authorization callback URL //填写自己要用 gitalk 的博客地址
|
在这里填写完成之后你就会得到Client ID
和Client Secret
。
文件修改
在主题目录下建立/layout/_third-party/gitalk.swig
文件并添加以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| {% if page.comments && theme.gitalk.enable %}
<link rel="stylesheet" href="https://unpkg.com/gitalk/dist/gitalk.css"> <script src="https://unpkg.com/gitalk/dist/gitalk.min.js"></script> <script src="https://cdn.bootcss.com/blueimp-md5/2.12.0/js/md5.min.js"></script>
<script type="text/javascript"> var gitalk = new Gitalk({ clientID: '{{ theme.gitalk.ClientID }}', clientSecret: '{{ theme.gitalk.ClientSecret }}', repo: '{{ theme.gitalk.repo }}', owner: '{{ theme.gitalk.owner }}', admin: '{{ theme.gitalk.adminUser }}', id: md5({{ theme.gitalk.ID }}), labels: {{ theme.gitalk.labels }}, perPage: {{ theme.gitalk.perPage }}, pagerDirection: '{{ theme.gitalk.pagerDirection }}', createIssueManually: {{ theme.gitalk.createIssueManually }}, distractionFreeMode: {{ theme.gitalk.distractionFreeMode }} }) gitalk.render('gitalk-container') </script> {% endif %}
|
在主题的/layout/_scripts/commons.swig
中添加以下代码
1
| {% include '../_third-party/comments/gitalk.swig' %}
|
接着,在主题的/layout/_partials/comments.swig
中找到
1 2 3 4
| {% elseif theme.valine.appid and theme.valine.appkey %} <div class="comments" id="comments"> </div> {% endif %}
|
并添加以下代码
1 2 3
| {% if theme.gitalk.enable %} <div id="gitalk-container"></div> {% endif %}
|
进行配置
在主题的配置文件中,添加一下内容
1 2 3 4 5 6 7 8 9 10 11 12 13
| gitalk: enable: true ClientID: xxxxxx ClientSecret: xxxxxxxxxxxx repo: gitalk owner: l552121229 adminUser: ['l552121229'] ID: location.pathname labels: '["gitalk"]' perPage: 15 pagerDirection: last createIssueManually: true distractionFreeMode: true
|
- 因为我们上面配置的
gitalk
是用location.pathname
来作为项目标签区分的,如果这个文章名超过50个字就会报错,为了保险起见,我们通过引入md5.min.js
来防止lables
过长。