总文章在这里
本篇文章是这篇大文章的抽离,因为本篇文章代码段落较长刚好拿来凑文章节数 ,且具有随时更新的特性,不好固定在一个文章里,也不能写在wiki里,否则无法被推荐,故出此下策。
评论系统选择 在搭建博客的时候必不可少的就是评论了,但是评论系统怎么选就是一个关键的问题了,要能够兼顾美观、便捷、自定义性强,轻量,完全的markdwon支持,支持登录等等功能,最好还要有一个后端(😓)。
waline waline作为一个极具热度,且功能强大的评论系统就如此应运而生了,
本站主讲waline,不仅waline拥有着极其全面丰富强大的功能,而且本站也是使用waline这个评论系统,在阅览本文前建议前去阅读waline的官方文档。
服务器部署
这部分官方文档其实已经写的很明白了,里面还有一些大佬录制的部署视频,可以去看看。
数据库 LeanCloud(国际版)
登录 或 [注册 LeanCloud 国际版
并进入 控制台
点击左上角 [创建应用 并起一个你喜欢的名字 (请选择免费的开发版):
进入应用,选择左下角的 设置
> 应用 Key
。你可以看到你的 APP ID
,APP Key
和 Master Key
。请记录它们,以便后续使用。
云函数 Vercel
点击上方按钮,跳转至 Vercel 进行 Server 端部署。
如果你未登录的话,Vercel 会让你注册或登录,请使用 GitHub 账户进行快捷登录。
输入一个你喜欢的 Vercel 项目名称并点击 Create
继续:
此时 Vercel 会基于 Waline 模板帮助你新建并初始化仓库,仓库名为你之前输入的项目名。
一两分钟后,满屏的烟花会庆祝你部署成功。此时点击 Go to Dashboard
可以跳转到应用的控制台。
点击顶部的 Settings
- Environment Variables
进入环境变量配置页,并配置三个环境变量 LEAN_ID
, LEAN_KEY
和 LEAN_MASTER_KEY
。它们的值分别对应上一步在 LeanCloud 中获得的 APP ID
, APP KEY
, Master Key
。
Environment Variable
Lean Cloud
LEAN_ID
AppID
LEAN_KEY
AppKey
LEAN_MASTER_KEY
MasterKey
LEAN_SERVER
已备案的域名
LEAN_SERVER
是国内版本必须填的,需要绑定自己的域名,国际版不需要
简单启用,你可以将下面的放在你博客需要的地方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <head > <link rel ="stylesheet" href ="https://unpkg.com/@waline/client@v2/dist/waline.css" /> </head > <body > <div id ="waline" > </div > <script type ="module" > import { init } from 'https://unpkg.com/@waline/client@v2/dist/waline.mjs' ; init ({ el : '#waline' , serverURL : 'https://your-domain.vercel.app' , }); </script > </body >
注册管理员 Waline支持评论管理,默认第一个注册的用户为管理员(站长),可以在DOMAINS 的页面中直接进行登录操作支持使用QQ
、微博
、GitHub
、Twitter
、Facebook
且多个类型账号进行绑定。
Stellar启用 做好上面几步,就需要在配置文件中,增加如下配置
1 2 3 4 5 6 7 8 9 10 11 comments: service: waline waline: js: https://unpkg.com/@waline/client@2.14.1/dist/waline.js css: https://unpkg.com/@waline/client@2.14.1/dist/waline.css serverURL: https://comment.bxzdyg.cn/ commentCount: true pageview: false
serverURL即为你之前分配个waline云函数解析的域名地址
如果启用了fancybox
插件,那么你还需要添加对应的css选择器
blog\_config.stellar.yml 1 2 3 4 5 6 plugins: fancybox: enable: true selector: .swiper-slide img, .gallery img ,#waline_container .vcontent img
然后启动你本地的博客项目,在你的文章末尾就能看到评论区已经被启用了。
评论通知 邮件通知 基本变量值
此处有个坑,不知道为什么这里的AUTHOR_EMAIL
和我所想的有点不太一样,我以为博主发一级评论和回复对应的评论就不会收到信息,仅此而已,可实际测试的表现是,填入自己的邮箱自己的邮箱任何邮件都收不到 ,这明显是给发邮件的邮箱 地址用。
选择变量值
环境变量名称
备注
参考值
SENDER_NAME
自定义发送邮件的发件人
BoBoBlog<5xxxxx@qq.com>
SENDER_EMAIL
自定义发送邮件的发件地址
MAIL_SUBJECT
自定义评论回复邮件标题
MAIL_TEMPLATE
自定义评论回复邮件内容
MAIL_SUBJECT_ADMIN
自定义新评论通知邮件标题
MAIL_TEMPLATE_ADMIN
自定义新评论通知邮件内容
注意:任何环境变量的变动,都需要重新部署后才会生效。其次,如果设置了多种提醒方式,仅会有一种生效!
而且有些设置的环境变量,可能在模板上没有被用到。
邮件模板 这里为什么要修改waline的模板呢?因为默认的存在些小小的问题,修改后可以避免这些错误
waline服务器部署对应的厂库的 index.js
文件,如果是通过官方仓库的 index.js
作为 waline 的入口,那么可以通过修改 index.js
文件来修改邮件通知模板
官方默认的邮件模板示例 你waline服务器部署对应的厂库的index.js文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 const Application = require ('@waline/vercel' );module .exports = Application ({ mailSubject : '{{parent.nick | safe}},您在「{{site.name | safe}}」上的评论收到了回复' , mailTemplate : ` <div style="border-top:2px solid #12ADDB;box-shadow:0 1px 3px #AAAAAA;line-height:180%;padding:0 15px 12px;margin:50px auto;font-size:12px;"> <h2 style="border-bottom:1px solid #DDD;font-size:14px;font-weight:normal;padding:13px 0 10px 8px;"> 您在博客<a style="text-decoration:none;color: #12ADDB;" href="{{site.url}}" target="_blank">{{site.name}}</a>上的评论有了新的回复 </h2> <div style="padding:0 12px 0 12px;margin-top:18px"> <p>{{parent.nick}},您曾发表评论:</p> <div style="background-color: #f5f5f5;padding: 10px 15px;margin:18px 0;word-wrap:break-word;">{{parent.comment | safe}}</div> <p><strong>{{self.nick}}</strong> 回复说:</p> <div style="background-color: #f5f5f5;padding: 10px 15px;margin:18px 0;word-wrap:break-word;">{{self.comment | safe}}</div> <p>您可以点击<a style="text-decoration:none; color:#12addb" href="{{site.postUrl}}" target="_blank">前往原文查看完整的回复內容</a>,欢迎再次光临<a style="text-decoration:none; color:#12addb" href="{{site.url}}" target="_blank">{{site.name}}</a>。</p> <br/> </div> <div style="border-top:1px solid #DDD; padding:13px 0 0 8px;"> 该邮件为系统自动发送的邮件,请勿直接回复。 </div> <br/> </div>` , mailSubjectAdmin : '您的博客「{{site.name | safe}}」收到了新评论' , mailTemplateAdmin : ` <div style="border-top:2px solid #12ADDB;box-shadow:0 1px 3px #AAAAAA;line-height:180%;padding:0 15px 12px;margin:50px auto;font-size:12px;"> <h2 style="border-bottom:1px solid #DDD;font-size:14px;font-weight:normal;padding:13px 0 10px 8px;"> 有人在<a style="text-decoration:none;color: #12ADDB;" href="{{site.url}}" target="_blank">{{site.name}}</a>发表了新的评论 </h2> <div style="padding:0 12px 0 12px;margin-top:18px"> <p><strong>{{self.nick}}</strong> 评论说:</p> <div style="background-color: #f5f5f5;padding: 10px 15px;margin:18px 0;word-wrap:break-word;">{{self.comment | safe}}</div> <p>您可以点击<a style="text-decoration:none; color:#12addb" href="{{site.postUrl}}" target="_blank">前往原文查看完整的评论内容。</a></p> <br/> </div> <div style="border-top:1px solid #DDD; padding:13px 0 0 8px;"> 该邮件为系统自动发送的邮件,请勿直接回复。 </div> <br/> </div>` });
其他的模板 我没有那么多个性化需求,如果以后有,还是自己学成后自己设计吧,我就推几个链接,大家可以去看看
waline邮件通知模板样式一览 | SaraKale’s blog
需要注意,这个博主是采取直接写在服务器的环境变量上,看着更改即可
主要为下面几个变量MAIL_SUBJECT
、 MAIL_TEMPLATE
、 MAIL_SUBJECT_ADMIN
、 MAIL_TEMPLATE_ADMIN
其他通知方式 如微信,qq机器人,微信企业号等等,这里先不论,之后有空再提
用户标签 普通标签 普通标签在 Waline 服务端进行环境变量的配置,添加LEVELS 的key即可,对应的value是划分的区间,形式为一串给定的数的逗号拼接,例如 0,10,20,50,100,200
等级
条件
默认等级标签
0
0 <= count < 10
潜水
1
10 <= count < 20
冒泡
2
20 <= count < 50
吐槽
3
50 <= count < 100
活跃
4
100 <= count < 200
话痨
5
200 <= count
传说
此处为普通标签的等级划分方式,转换对应的标签名且看下面
专属标签 专属标签通过管理端(后台)为每位登录用户设定专属标签。
排行榜/读者墙挂件 读者墙 就是把评论用户的头像都放在一起,鼠标停留在上面显示名字,有用到的可以考虑一下
点开查看代码 blog\source\_data\widgets.yml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 waline_wall: title: 本站发言墙 layout: markdown content: | <div id="waline-users"><i class="fa-solid fa-cog fa-spin"></i>连接waline数据中...</div> <script type="module"> import { UserList } from 'https://cdn.jsdelivr.net/npm/@waline/client/dist/waline.mjs'; UserList({ el: '#waline-users', serverURL: 'https://comment.bxzdyg.cn', // 注意这里不能写成https://comment.bxzdyg.cn/ count: 10, }); </script> <style> .wl-user-item[aria-label] { position: relative; z-index: 9999; } </style>
排行榜 看起来就比较明显了,你可以看到左侧的区别,但是有可能因为网络问题,加载不出来
点开查看代码 blog\source\_data\widgets.yml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 waline_wall: title: 本站发言榜 layout: markdown content: | <div id="waline-users"><i class="fa-solid fa-cog fa-spin"></i>连接waline数据中...</div> <script type="module"> import { UserList } from 'https://cdn.jsdelivr.net/npm/@waline/client/dist/waline.mjs'; UserList({ el: '#waline-users', serverURL: 'https://comment.bxzdyg.cn', // 注意这里不能写成https://comment.bxzdyg.cn/ count: 10, mode: 'wall' }); </script> <style> #waline-users > ul > li > a{display: flex;overflow: hidden;-webkit-box-orient: vertical;} #waline-users > ul > li > a > div.wl-user-meta{font-size:14px;color: #999999;} #waline-users > ul > li > a > div.wl-user-meta > div{color: var(--swiper-theme-color);} #waline-users > ul > li > a > div.wl-user-meta > div:hover {color: #ff5724;} .wl-user-name {color: #999;font-weight: bold;} </style>
排行榜的小坑
这里我整上去后,和大佬的比对,不断的思考:“我评论区都有等级标签,为什么排行榜没有呢?”
别再瞎折腾了,以为waline的初始化没有初始化好,自己琢磨以自定义的形式输出,结果又碰到博客懒加载插件的冲突的问题,一看就不是这样,一天一夜过去了,咨询了大佬后,反复求证才知道,原来level0在排行榜上是没有标签的,起码level1才有,坑啊,我在琢磨什么啊。
还需要注意,排行榜不统计登录的账号中站长发表的评论数,邮件也会自动排除站长,在你发表评论不会有消息通知,被回复会。
自定义 自定义语言
自定义语言 | Waline
主要就是自己加上一些和修改一些文字描述,下面博主讲主要用到的键贴出来,你们可以去官方文档找一下看看自己需要哪种,再给他加上去,这里面写的极其详细了。
反应相关 blog\_config.stellar.yml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 comments: service: waline waline: locale: placeholder: 有什么想说的?大胆说出来吧(*^_^*) reactionTitle: 请给这篇文章做个评价吧 reaction0: 感兴趣 reaction1: 给心心 reaction2: 什么? reaction3: 心碎了 reaction4: 别过来 reaction5: 哎呀~ reaction6: 不忍直视 reaction7: 我真生气辣! reaction8: 摇晃
标签相关 blog\_config.stellar.yml 1 2 3 4 5 6 7 8 9 10 comments: service: waline waline: locale: level0: '潜水' level1: '冒泡' level2: '吐槽' level3: '活跃' level4: '话痨' level5: '传说'
这里为对应等级的标签称号
自定义表情 blog\_config.stellar.yml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 comments: service: waline waline: reaction: - /emojis/ablobcatattentionreverse.png - /emojis/ablobcatheart.png - /emojis/ablobcatdoubt.png - /emojis/ablobcatheartbroken.png - /emojis/ablobcatterrified.png - /emojis/ablobcatshy.png - /emojis/ablobcatnoface.png - /emojis/ablobcatanger.gif - /emojis/ablobcatrainbow.png emoji: - https://gcore.jsdelivr.net/gh/norevi/waline-blobcatemojis@1.0/blobs - https://unpkg.com/@waline/emojis@1.1.0/bilibili