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