利用Github Pages建立的Jekyll模板我的博客添加阅读量统计功能

内容转载自我本身的博客数据库

@(文章目录)安全

前言

Jekyll 是一个简单的免费的 Blog 生成工具,相似 WordPress 。它只是一个生成静态网页的工具,不须要数据库支持,最重要的是,GitHub Pages 基于 Jekyll 构建,因此可垂手可得地在 GitHub 上免费发布网站并自定义域名。Jekyll 具备许多的主题能够选择,也有不少插件能够安装,都只须要在文件_config.yml中写明便可,不过我本身找了很久也没发现具备博客文章访问量统计的相关插件(虽然个人博客基本没什么人访问,但也仍是想认真作好,权当是给本身的备忘录)。而后就去万能的搜索引擎寻找答案,参考别人的教程以及 leancloud 的 API 使用方法最终完成了点击量的功能服务器

准备工做

第一步,须要已经成功使用 GitHub Pages ,而后去leancloud 官网注册一个用户并登陆
第二步,建立新应用:应用名称能够随意填写,计价方案选择开发版,而后点击建立
建立应用
第三步,建立class:名字为Counter,其余都保持默认值便可
建立Class
第四步,为Counter添加列:默认会有四个列字段,不要改动。本身选择添加列,而后依次添加三个列,分别是url(String 类型),time(Number 类型),title(String 类型)
建立列字段
最后,添加网址白名单:左侧的设置栏目,点击安全中心,在Web 安全域名处填写本身博客网站的域名
填写网址白名单app

模板文件修改

首先,打开index.html,在文中合适位置添加如下代码:
浏览量:&nbsp;<span id="{{ post.url }}" class="leancloud_visitors" data-flag-title="{{ post.title }}"> - </span>次.
同时根据需求也可将此代码加入到post.html的合适位置
而后,再分别在以上两个文件中加入 JavaScript 代码来控制实现功能:工具

<!-- 同时兼容http与https -->
<script src="//cdn1.lncld.net/static/js/2.5.0/av-min.js"></script>
<script>
    // 第一个参数是appid,第二个参数是appkey,此处的只是示例
    AV.initialize("gQJjjB93fxTAN0W6cmFdlOrW-gzGzoHsz", "IcwsNtdTDwM9gdkJfLNJKcck");
    // 本身建立的Class的名字
    var name='Counter';
    function createRecord(Counter){
      // 设置 ACL
      var acl = new AV.ACL();
      acl.setPublicReadAccess(true);
      acl.setPublicWriteAccess(true);
      // 得到span的全部元素
      var elements=document.getElementsByClassName('leancloud_visitors');
      // 一次建立多条记录
      var allcounter=[];
      for (var i = 0; i < elements.length ; i++) {
        // 若某span的内容不包括 '-' ,则没必要建立记录
        if(elements[i].textContent.indexOf('-') == -1){
          continue;
        }
        var title = elements[i].getAttribute('data-flag-title');
        var url = elements[i].id;
        var newcounter = new Counter();
        newcounter.setACL(acl);
        newcounter.set("title", title);
        newcounter.set("url", url);
        newcounter.set("time", 0);
        allcounter.push(newcounter);
        // 顺便更新显示span为默认值0
        elements[i].textContent=0;
      }
      AV.Object.saveAll(allcounter).then(function (todo) {
        // 成功保存记录以后
        console.log('建立记录成功!');
      }, function (error) {
        // 异常错误 
        console.error('建立记录失败: ' + error.message);
      });
    }
    function showCount(Counter){
      // 是否须要建立新纪录的标志(添加一篇新文章)
      var flag=false;
      var query = new AV.Query(name);
      query.greaterThanOrEqualTo('time', 0);
      query.find().then(function (results) {
        // 当获取到的记录为0时置默认值
        if(results.length==0){
          $('.leancloud_visitors').text('-');
          flag=true;
          console.log('返回查询记录为空');
          // 若是获取到空记录就建立新记录
          createRecord(Counter);
          return;
        }
        // 将获取到的数据设置为text
        for (var i = 0; i < results.length; i++) {
          var item = results[i];
          var url = item.get('url');
          var time = item.get('time');
          var element = document.getElementById(url);
          element.textContent = time;
        }
        // 当某个span含有默认值时说明须要建立记录
        if($('.leancloud_visitors').text().indexOf("-") != -1){
          flag=true;
        }
        // 当获取的记录数与span个数不吻合时
        if(results.length != $('.leancloud_visitors').length){
          flag=true;
        }
        if(flag){
          createRecord(Counter);
        }
      }, function (error) {
        console.log('query error:'+error.message);
      });
    }
    $(function() {
      var Counter = AV.Object.extend(name);
      showCount(Counter);
    });
</script>

其中,appidappkey能够在 leancloud 网站的设置的应用Key处找到并粘贴
AppID和AppKey
最后,等待修改生效便可。若是没有意外的话,这里将会看到以下结果:
理想结果post

写在最后

这个阅读量统计的功能自己实现并不难,并不须要多么复杂的逻辑和 JavaScript 代码,我本来是打算使用本身的服务器建立一系列的接口并使用数据库来保存这些信息的。后来考虑到个人服务器可能没那么稳定,以及 leancloud 的免费我的开发版的接口调用次数限制对我这个超级冷清的博客来讲已经足够了,最重要的大概是我太懒了吧,不想本身再实现一套接口,就这样吧,但愿能对遇到此问题的朋友以帮助网站

相关文章
相关标签/搜索