摘要:可是我們勤勞的程序猿們不甘心不那么完美,所以大神們寫了各種教程,通過其他的方法解決了因為谷歌而不能使用的功能,今天就來說說為博客網站加上的瀏覽量功能。
版權聲明:更多文章請訪問我的個人站Keyon Y,轉載請注明出處。
Hexo是和WordPress一樣的完善的博客系統,但是好多輔助功能/插件需要是訪問谷歌的服務器的,在我大天朝就只能看看了。可是我們勤勞的程序猿們不甘心不那么完美,所以大神們寫了各種教程,通過其他的方法解決了因為谷歌而不能使用的功能,
今天就來說說為Hexo博客網站加上的瀏覽量功能。
原理就是使用leancloud作為數據庫托管,使用leancloud的API進行操作數據的讀取和寫入。
在leancloud上注冊一個賬號,然后參考官方文檔。
html頁面引入js
在后臺管理中新建一個應用
初始化,APP_ID和APP_KEY在應用的設置-應用key中查找
var APP_ID = "fasdfaICadjaklsdbaskd-gasdasfz"; var APP_KEY = "gfdgsArfgsdg"; AV.init({ appId: APP_ID, appKey: APP_KEY }); var Todo = AV.Object.extend("test");
由于hexo的鏈接地址都是這樣子的
就是文章的標題作為鏈接地址,所以用文章的標題來查找和創建數據的唯一標識,用content字段來存儲瀏覽次數;
新增一條數據的方法
// 保存 function saveToLeancloud(title){ var newData = new Todo(); newData.save({ title: title, content: "0" }).then(function (data) { console.log(data); }) }
新增以后要實現瀏覽/刷新后點擊量每次+1,就要更新數據
// 更新一條 文章瀏覽量數據 var _update = function(obj){ // 第一個參數是 className,第二個參數是 objectId var todo = AV.Object.createWithoutData(className, obj.id); var count = parseInt(obj.get("content"))+1; // 修改屬性 todo.set("content", count.toString()); // 保存到云端 todo.save(); }
html中加入類名為‘.leancloud_visitors’的元素用來往其中填充數據
span(id="#{item.title}", class="leancloud_visitors", data-pageNum="#{page.current}") // page.current是系統變量直接調用,這個值用來記錄列表頁的當前頁碼
獲取數據
var pageCounts = 2; // 每頁返回條數 if($(".leancloud_visitors").attr("data-pageNum")!= "undefined"){ // 判斷是否為列表頁 var pageNum = parseInt($(".leancloud_visitors").attr("data-pageNum"))-1; // 當前頁碼 } // 獲取詳情頁的訪問次數數據 var _getDetailTime = function(title) { var query = new AV.Query(className); query.equalTo("title", title); return query.find(); } // 獲取列表頁的訪問次數數據 var _getListTime = function(){ var query = new AV.Query(className); query.limit(pageCounts); // 查詢數據時返回的數量-每頁返回的條數 query.skip(pageCounts*pageNum); // 查詢數據時跳過的數量-當前頁碼*每頁返回的條數 query.descending("createdAt"); // 按新建的時間降序排列 return query.find(); }
然后是填充瀏覽量數據
// 填充訪問次數 var _writeCount = function(data){ if($(".post-page").length == 0){ // 判斷是在列表頁還是詳情頁 $(".leancloud_visitors").each(function(i,e){ $(e).text(parseInt(data[i].get("content"))); }) }else{ $(".leancloud_visitors").each(function(i,e){ $(e).text(parseInt(data[i].get("content"))+1); }) } }
判斷當前在列表頁還是詳情頁
// 判斷列表頁or詳情頁 var _isList = function(){ if($(".post-page").length == 0){ return true; } }
最終完整的方法寫在了一個js文件中,例如leancloudConfig.js
var leanCloud = (function(){ var APP_ID = "fasdfaICadjaklsdbaskd-gasdasfz"; var APP_KEY = "gfdgsArfgsdg"; var className,Todo; var pageCounts = 2; // 每頁返回條數 if($(".leancloud_visitors").attr("data-pageNum")!= "undefined"){ var pageNum = parseInt($(".leancloud_visitors").attr("data-pageNum"))-1; // 當前頁碼 } // 初始化 AV.init({ appId: APP_ID, appKey: APP_KEY }); // 新增一條 文章統計數據【僅限一條】 var _addCount = function() { // 監聽 新增按鈕 被點擊 function addListenButton(){ setTimeout(function(){ console.log("start listen..."); $(".new-post_button").click(function(){addListenInput();}) },5000) //考慮到服務器的帶寬僅有1M,網速較慢所以將此方法延遲執行 } // 監聽 回車/點擊確定按鈕 后 執行保存 function addListenInput(){ var inputTitle; setTimeout(function(){ $(".new-post_input").blur(function(){ inputTitle = $(this).val(); }) $(".new-post_ok").mousedown(function(){ var title = $(".new-post_input").val(); saveToLeancloud(title); addListenButton(); }) $(document).keypress(function(e){ if(e.which == 13){ var title = inputTitle; saveToLeancloud(title); addListenButton(); } }) },500) } // 保存 function saveToLeancloud(title){ var newData = new Todo(); newData.save({ title: title, content: "0" }).then(function (data) { console.log(data); }) } addListenButton(); } // 獲取詳情頁的訪問次數數據 var _getDetailTime = function(title) { var query = new AV.Query(className); query.equalTo("title", title); return query.find(); } // 獲取列表頁的訪問次數數據 var _getListTime = function(){ var query = new AV.Query(className); query.limit(pageCounts); // 查詢數據時返回的數量-每頁返回的條數 query.skip(pageCounts*pageNum); // 查詢數據時跳過的數量-當前頁碼*每頁返回的條數 query.descending("createdAt"); // 按新建的時間降序排列 return query.find(); } // 更新一條 文章瀏覽量數據 var _update = function(obj){ // 第一個參數是 className,第二個參數是 objectId var todo = AV.Object.createWithoutData(className, obj.id); var count = parseInt(obj.get("content"))+1; // 修改屬性 todo.set("content", count.toString()); // 保存到云端 todo.save(); } // 填充訪問次數 var _writeCount = function(data){ if($(".post-page").length == 0){ $(".leancloud_visitors").each(function(i,e){ $(e).text(parseInt(data[i].get("content"))); }) }else{ $(".leancloud_visitors").each(function(i,e){ $(e).text(parseInt(data[i].get("content"))+1); }) } } // 判斷列表頁or詳情頁 var _isList = function(){ if($(".post-page").length == 0){ return true; } } var constructor = function(config){} // 獲取瀏覽量數據 constructor.prototype._getTime = function(clsName){ className = clsName; Todo = AV.Object.extend(className); if(_isList()){ _getListTime().then(function(data) { _writeCount(data); }, function (error) { // error is an instance of AVError. console.log(error); }); }else{ var title = $(".leancloud_visitors").attr("id"); _getDetailTime(title).then(function(data){ _writeCount(data); _update(data[0]); }) } return this; } constructor.prototype._addCount = function(clsName){ className = clsName; Todo = AV.Object.extend(className); _addCount(); return this; } //返回構造函數 return constructor; })()
因為我使用的是hexo-admin做后臺管理,安裝和使用方法見https://github.com/jaredly/hexo-admin
要在hexo-admin的后臺中新增文章時自動添加一條數據,就要對其改造:
在根目錄的node_modules中搜索hexo-admin,在其文件夾中找到www文件夾下的index.html,在其中引入leancloudConfig.js:
// 調用方法
在前臺頁面的layout.jade中同樣引入和調用:
script(src= "http://cdn1.lncld.net/static/js/2.5.0/av-min.js") script(src= "/js/leancloudConfig.js") script. $(function () { var todo = new leanCloud()._getTime("test"); });
這樣就實現了瀏覽量的功能
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83524.html
摘要:我選擇的是萬網,阿里下面的。然后在主題配置文件下添加主題配置文件中添加自定義樣式不得不說還是很人性化的,你可以個性化定制你的網站,你所有的改動需要放在主題文件的文件中,會 前言 本篇文章是在已經搭建好gitpage+hexo的博客的前提下(不懂怎么搭建的可以參考我的另一篇博文:了解githubPages+hexo搭建博客的原理 或者利用Gitpage+hexo開發自己的博客,這兩篇博文...
摘要:我選擇的是萬網,阿里下面的。然后在主題配置文件下添加主題配置文件中添加自定義樣式不得不說還是很人性化的,你可以個性化定制你的網站,你所有的改動需要放在主題文件的文件中,會 前言 本篇文章是在已經搭建好gitpage+hexo的博客的前提下(不懂怎么搭建的可以參考我的另一篇博文:了解githubPages+hexo搭建博客的原理 或者利用Gitpage+hexo開發自己的博客,這兩篇博文...
摘要:我選擇的是萬網,阿里下面的。然后在主題配置文件下添加主題配置文件中添加自定義樣式不得不說還是很人性化的,你可以個性化定制你的網站,你所有的改動需要放在主題文件的文件中,會 前言 本篇文章是在已經搭建好gitpage+hexo的博客的前提下(不懂怎么搭建的可以參考我的另一篇博文:了解githubPages+hexo搭建博客的原理 或者利用Gitpage+hexo開發自己的博客,這兩篇博文...
摘要:目前比較火的和的文檔都是使用框架實現的。二的安裝安裝前,確保電腦中已經安裝了和。可以參照來自定義日期格式。值為時禁用主題部署參考部署部分的配置五部署上部署安裝中配置部署部分的設置終端進入目錄運行 一、什么是hexo Hexo是一個快速、簡潔且高效的博客框架,使用Markdown(或其他渲染引擎)解析文章,在幾秒內,即可利用靚麗的主題生成靜態網頁。目前比較火的vue和weex的文檔都是使...
閱讀 3005·2021-10-12 10:12
閱讀 3052·2021-09-22 16:04
閱讀 3287·2019-08-30 15:54
閱讀 2602·2019-08-29 16:59
閱讀 2902·2019-08-29 16:08
閱讀 868·2019-08-29 11:20
閱讀 3492·2019-08-28 18:08
閱讀 647·2019-08-26 13:43