惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

Fooleap's Blog

渴望理想 | Fooleap's Blog 19 年底一些事 | Fooleap's Blog 藉秋风,跑起来 | Fooleap's Blog 一个人去跑步 | Fooleap's Blog 8 月的跑量仿佛是那暑假的作业 | Fooleap's Blog 三伏天跑步那么难受,为何还要跑? | Fooleap's Blog 解决小程序开发“当前系统代理不是安全代理” | Fooleap's Blog 忘却配速的夏日跑步 | Fooleap's Blog 六月天时“带水”跑步更爽 | Fooleap's Blog 出来混迟早要还的 | Fooleap's Blog 跑步不能当饭吃 | Fooleap's Blog 将京东移动端详情页链接转为 PC 端 | Fooleap's Blog 不是热就是雨 | Fooleap's Blog 这半月,我跑了 11 个 520 | Fooleap's Blog 跑完流汗一时爽,一直流汗一直爽 | Fooleap's Blog 初夏夜跑 | Fooleap's Blog Electron 中打开 QQ 临时会话 | Fooleap's Blog 春节期间的培隆角 | Fooleap's Blog 从春天跑到夏天 | Fooleap's Blog 晨雾中奔跑 | Fooleap's Blog 漫步春雨中 | Fooleap's Blog 跑在木棉花下 | Fooleap's Blog 我在春节依然坚持跑步 | Fooleap's Blog 伴随着日出跑步 | Fooleap's Blog 没有最好,只有更好 | Fooleap's Blog 电子气温计 | Fooleap's Blog 渡亭小学的金凤花 | Fooleap's Blog 随心而跑 | Fooleap's Blog 2018 跑步小结 | Fooleap's Blog 在 gVim 中使用“非等宽字体” | Fooleap's Blog 动车进汕,喜大普奔 | Fooleap's Blog 雨战汕马,漫步鮀城 | Fooleap's Blog 准备出发汕马 | Fooleap's Blog 环苏溪跑个半马 | Fooleap's Blog 不义之财 | Fooleap's Blog 跑去培隆看日落 | Fooleap's Blog 雨后跑土路 | Fooleap's Blog 秋意渐浓 | Fooleap's Blog 在夕阳下奔跑 | Fooleap's Blog 准备参加 2018 汕马 | Fooleap's Blog 不可立见的 spoiler 标签 | Fooleap's Blog TomTom Spark 表带 | Fooleap's Blog Disqus 支持新浪微博图床 | Fooleap's Blog 暂存 Disqus 匿名评论者邮箱地址 | Fooleap's Blog 组一台迷你主机 DeskMini 310 | Fooleap's Blog 我的个人信息卖给了谁? | Fooleap's Blog 我发了违法短信? | Fooleap's Blog 使用 Python 合并地图瓦片 | Fooleap's Blog 使用 Python 合并瓦片图 | Fooleap's Blog 拆电热水壶 | Fooleap's Blog 使用树莓派做监控显示 | Fooleap's Blog 南方的冷 | Fooleap's Blog 蓝牙耳机 Avantree Jogger Plus | Fooleap's Blog 新厝布网 | Fooleap's Blog 报装移动宽带 | Fooleap's Blog 双十一战绩 | Fooleap's Blog 郁闷的心情 | Fooleap's Blog 像 Disqus 一样获取链接颜色 | Fooleap's Blog Disqus 的 URL 编码问题 | Fooleap's Blog 选择框的全选联动 | Fooleap's Blog 弹出层中的视频全屏问题 | Fooleap's Blog 2016 年台风海马 | Fooleap's Blog 纯 CSS 实现导航图标动画 | Fooleap's Blog 湾头晨跑路线推荐:南湾小学跑道 | Fooleap's Blog Jekyll 显示每一年的文章数 | Fooleap's Blog 湾头晨跑路线推荐:南湾堤顶 | Fooleap's Blog Disqus 的 @ 提及功能 | Fooleap's Blog 近日渡亭堤顶的夕阳 | Fooleap's Blog 使用 Disqus API 上传图片 | Fooleap's Blog Disqus API 评论嵌套问题 | Fooleap's Blog Disqus API 的权限问题 | Fooleap's Blog 湾头晨跑路线推荐:环三湾 | Fooleap's Blog 如何下载 Apple Emoji 的 PNG 图片 公众号文章二维码 | Fooleap's Blog Disqus 的评论预审核 | Fooleap's Blog 湾头最好的跑道 | Fooleap's Blog 结合七牛和高德地图 API 显示照片位置 | Fooleap's Blog Zip 压缩排除特定目录 | Fooleap's Blog 流水涸摸蚬热 | Fooleap's Blog 2017 跨年跑 | Fooleap's Blog Jekyll 的中文字数统计 | Fooleap's Blog 为 Jekyll 文章页添加相关文章 | Fooleap's Blog 为 Jekyll 添加一个标签页面 | Fooleap's Blog 干了这瓶蛇草水 | Fooleap's Blog 在 macOS 上使用 NTFS 差点丢数据 Disqus Moderator Badge Text 已支持中文 为 Jekyll 添加一个简单的 API | Fooleap's Blog 为 Jekyll 加上简单搜索功能 | Fooleap's Blog 解决 Jemoji 的出错 | Fooleap's Blog 检测网络是否能够访问 Disqus | Fooleap's Blog 解决 This socket is closed 问题 更好的 Markdown 插图方式 | Fooleap's Blog 转换 Nike+ 的坐标数据 | Fooleap's Blog 高德地图 API 显示跑步路线 | Fooleap's Blog 善用 Google 搜索工具 | Fooleap's Blog 利用 Nike+ API 获取跑步路线数据 | Fooleap's Blog 七牛 API 生成页面 URL 二维码 旧年 12 月跑步笔记 | Fooleap's Blog 科学使用 Disqus | Fooleap's Blog 培隆角的日出 | Fooleap's Blog
显示 Disqus 评论计数 | Fooleap's Blog
fooleap · 2015-09-14 · via Fooleap's Blog

使用 Jekyll 生成静态页面做博客访问很快,可是网站托管在 GitHub,并不支持直接写入,所以就不得不外挂第三方评论系统。之前我也折腾 对比过 Disqus 和多说,但最终还是没有切换到多说,选择继续留在 Disqus 观望,希望 Disqus 以后能一直保持不被墙。

怎么部署 Disqus 这里就不多说了,鄙人博客上除了显示评论框,还在首页显示评论计数,这是如何做到的,下面就来看看。

通过 count.js

在官方的帮助文档中,显示评论计数并不复杂[1],仅需在页面添加一段 JS 代码,并按照一定的规则写好 HTML 便可。

JavaScript 代码,找个合适的地方放好:

/* * * 自定义变量 * * */
var disqus_shortname = 'example'; // 替换为你 Disqus 的 shortname

/* * * 不要动 * * */
(function () {
var s = document.createElement('script'); s.async = true;
s.type = 'text/javascript';
s.src = '//' + disqus_shortname + '.disqus.com/count.js';
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
}());

超链接标签

最粗暴的方法直接给链接指定 href 属性,属性值为 页面链接 + '#disqus_thread',这样既能使此元素的内容替换为评论数,点开此链接也会跳转到相关页面的 Disqus 评论框,一举两得。

在 Jekyll 上可以这么写:

{% for post in site.posts %}
  ...
  <a href="{{ site.url }}{{ post.url }}#disqus_thread"></a>
  ...
{% endfor %}

如果不希望点开链接即跳到评论框,那么也可以使用 disqus_url 等变量,即可加上 data-disqus-url 等属性,可以这么写:

{% for post in site.posts %}
  ...
  <a href="{{ site.url }}{{ post.url }}" data-disqus-url="{{ site.url }}{{ post.url }}"></a>
  ...
{% endfor %}

其他标签

当然,你可能不希望在链接上显示评论数,在其他标签上显示评论数只需要加上一个 class='disqus-comment-count' 属性,且加上相关变量即可。例如:

{% for post in site.posts %}
  ...
  <span class='disqus-comment-count' data-disqus-url="{{ site.url }}{{ post.url }}"></span>
  ...
{% endfor %}

对了,在 Disqus 后台中可以设置评论计数链接的文字[2],鄙人设置如下图:

设置评论计数链接的文字 设置评论计数链接的文字

经过上面的方式处理之后,打开页面的时候刷刷的,一看原来加载了三个文件。虽然加载时间用不了多少,但为了显示评论数要多增加三次响应,是不是有点得不偿失?不管是不是,强迫症告诉我应该找找有没有更好的方式。

加载的文件1 加载的文件1

就为了显示下评论计数而已,使用 Disqus 的 API 实现应该不麻烦,首先得去 Disqus 注册一个新的应用,获取公钥。

折腾了一下,可以这样实现:

{% for post in site.posts %}
  ...
  <a class='disqus-comment-count' href="{{ site.url }}{{ post.url }}#disqus_thread" data-disqus-url="{{ site.url }}{{ post.url }}"></a>
  ...
{% endfor %}

使用 JavaScript 取数据,并写入:

var disqusShortName = "example"; // 替换为你 Disqus 的 shortname
var disqusPublicKey = "Public Key"; // 申请的公钥
var urlArray = [];
var commentsCount = document.querySelectorAll('.disqus-comment-count');
if (commentsCount.length) {
  for (i=0; i < commentsCount.length; i++) {
    var url = commentsCount[i].getAttribute('data-disqus-url');
    urlArray.push('thread=link:' + url);
  }
  function jsonpCallback(result) {  
    for (var i in result.response) {
      var count = result.response[i].posts;
      if ( count ) {
        document.querySelector('[data-disqus-url="' + result.response[i].link + '"]').innerHTML = count;
      }
    }  
  }
  (function () {
    var s = document.createElement('script');
    s.type = 'text/javascript';
    s.src = 'https://disqus.com/api/3.0/threads/set.jsonp' + '?callback=jsonpCallback' + '&api_key=' + disqusPublicKey + '&forum=' + disqusShortName + '&' + urlArray.join('&') ;
    (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
  }());
}

看看是不是快多了?好像也没快多少,不过只需加载一个文件便可。

加载的文件2 加载的文件2

使用 jQuery 实现更方便[3]

var disqusShortName = "example"; // 替换为你 Disqus 的 shortname
var disqusPublicKey = "Public Key"; // 申请的公钥
var urlArray = [];
$('.disqus-comment-count').each(function () {
  var url = $(this).attr('data-disqus-url');
  urlArray.push('link:' + url);
});
$.ajax({
  type: 'GET',
  url: "https://disqus.com/api/3.0/threads/set.jsonp",
  data: { api_key: disqusPublicKey, forum : disqusShortName, thread : urlArray }, 
  cache: false,
  dataType: "jsonp",
  success: function (result) {
    for (var i in result.response) {
      var count = result.response[i].posts;
      if ( count ) {
        $('.disqus-comment-count[data-disqus-url="' + result.response[i].link + '"]').html(count);
      }
    }
  }
});

代码中实现没评论不显示,对了,本博评论计数样式模仿 V2EX、Ruby China 等站,至于 Disqus 具体参考 Disqus API 的相关文档[4]

Disqus API 看起来相当有趣,不过鉴于 Disqus 不在天朝,所以暂时也不折腾更多。

参考资料

  1. Adding comment count links to your home page | DISQUS
  2. Settings > General
  3. Disqus Comment Counts Example
  4. API - Disqus

本文历史

  • 2015 年 09 月 14 日 完成初稿

最近更新

猜你喜欢