摘要:可是我們勤勞的程序猿們不甘心不那么完美,所以大神們寫了各種教程,通過(guò)其他的方法解決了因?yàn)楣雀瓒荒苁褂玫墓δ?,今天就?lái)說(shuō)說(shuō)為博客網(wǎng)站加上的瀏覽量功能。
版權(quán)聲明:更多文章請(qǐng)?jiān)L問(wèn)我的個(gè)人站Keyon Y,轉(zhuǎn)載請(qǐng)注明出處。
Hexo是和WordPress一樣的完善的博客系統(tǒng),但是好多輔助功能/插件需要是訪問(wèn)谷歌的服務(wù)器的,在我大天朝就只能看看了??墒俏覀兦趧诘某绦蛟硞儾桓市牟荒敲赐昝溃源笊駛儗懥烁鞣N教程,通過(guò)其他的方法解決了因?yàn)楣雀瓒荒苁褂玫墓δ埽?br>今天就來(lái)說(shuō)說(shuō)為Hexo博客網(wǎng)站加上的瀏覽量功能。
原理就是使用leancloud作為數(shù)據(jù)庫(kù)托管,使用leancloud的API進(jìn)行操作數(shù)據(jù)的讀取和寫入。
在leancloud上注冊(cè)一個(gè)賬號(hào),然后參考官方文檔。
html頁(yè)面引入js
在后臺(tái)管理中新建一個(gè)應(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)題來(lái)查找和創(chuàng)建數(shù)據(jù)的唯一標(biāo)識(shí),用content字段來(lái)存儲(chǔ)瀏覽次數(shù);
新增一條數(shù)據(jù)的方法
// 保存 function saveToLeancloud(title){ var newData = new Todo(); newData.save({ title: title, content: "0" }).then(function (data) { console.log(data); }) }
新增以后要實(shí)現(xiàn)瀏覽/刷新后點(diǎn)擊量每次+1,就要更新數(shù)據(jù)
// 更新一條 文章瀏覽量數(shù)據(jù) var _update = function(obj){ // 第一個(gè)參數(shù)是 className,第二個(gè)參數(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’的元素用來(lái)往其中填充數(shù)據(jù)
span(id="#{item.title}", class="leancloud_visitors", data-pageNum="#{page.current}") // page.current是系統(tǒng)變量直接調(diào)用,這個(gè)值用來(lái)記錄列表頁(yè)的當(dāng)前頁(yè)碼
獲取數(shù)據(jù)
var pageCounts = 2; // 每頁(yè)返回條數(shù) if($(".leancloud_visitors").attr("data-pageNum")!= "undefined"){ // 判斷是否為列表頁(yè) var pageNum = parseInt($(".leancloud_visitors").attr("data-pageNum"))-1; // 當(dāng)前頁(yè)碼 } // 獲取詳情頁(yè)的訪問(wèn)次數(shù)數(shù)據(jù) var _getDetailTime = function(title) { var query = new AV.Query(className); query.equalTo("title", title); return query.find(); } // 獲取列表頁(yè)的訪問(wèn)次數(shù)數(shù)據(jù) var _getListTime = function(){ var query = new AV.Query(className); query.limit(pageCounts); // 查詢數(shù)據(jù)時(shí)返回的數(shù)量-每頁(yè)返回的條數(shù) query.skip(pageCounts*pageNum); // 查詢數(shù)據(jù)時(shí)跳過(guò)的數(shù)量-當(dāng)前頁(yè)碼*每頁(yè)返回的條數(shù) query.descending("createdAt"); // 按新建的時(shí)間降序排列 return query.find(); }
然后是填充瀏覽量數(shù)據(jù)
// 填充訪問(wèn)次數(shù) var _writeCount = function(data){ if($(".post-page").length == 0){ // 判斷是在列表頁(yè)還是詳情頁(yè) $(".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)前在列表頁(yè)還是詳情頁(yè)
// 判斷列表頁(yè)or詳情頁(yè) var _isList = function(){ if($(".post-page").length == 0){ return true; } }
最終完整的方法寫在了一個(gè)js文件中,例如leancloudConfig.js
var leanCloud = (function(){ var APP_ID = "fasdfaICadjaklsdbaskd-gasdasfz"; var APP_KEY = "gfdgsArfgsdg"; var className,Todo; var pageCounts = 2; // 每頁(yè)返回條數(shù) if($(".leancloud_visitors").attr("data-pageNum")!= "undefined"){ var pageNum = parseInt($(".leancloud_visitors").attr("data-pageNum"))-1; // 當(dāng)前頁(yè)碼 } // 初始化 AV.init({ appId: APP_ID, appKey: APP_KEY }); // 新增一條 文章統(tǒng)計(jì)數(shù)據(jù)【僅限一條】 var _addCount = function() { // 監(jiān)聽 新增按鈕 被點(diǎn)擊 function addListenButton(){ setTimeout(function(){ console.log("start listen..."); $(".new-post_button").click(function(){addListenInput();}) },5000) //考慮到服務(wù)器的帶寬僅有1M,網(wǎng)速較慢所以將此方法延遲執(zhí)行 } // 監(jiān)聽 回車/點(diǎ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(); } // 獲取詳情頁(yè)的訪問(wèn)次數(shù)數(shù)據(jù) var _getDetailTime = function(title) { var query = new AV.Query(className); query.equalTo("title", title); return query.find(); } // 獲取列表頁(yè)的訪問(wèn)次數(shù)數(shù)據(jù) var _getListTime = function(){ var query = new AV.Query(className); query.limit(pageCounts); // 查詢數(shù)據(jù)時(shí)返回的數(shù)量-每頁(yè)返回的條數(shù) query.skip(pageCounts*pageNum); // 查詢數(shù)據(jù)時(shí)跳過(guò)的數(shù)量-當(dāng)前頁(yè)碼*每頁(yè)返回的條數(shù) query.descending("createdAt"); // 按新建的時(shí)間降序排列 return query.find(); } // 更新一條 文章瀏覽量數(shù)據(jù) var _update = function(obj){ // 第一個(gè)參數(shù)是 className,第二個(gè)參數(shù)是 objectId var todo = AV.Object.createWithoutData(className, obj.id); var count = parseInt(obj.get("content"))+1; // 修改屬性 todo.set("content", count.toString()); // 保存到云端 todo.save(); } // 填充訪問(wèn)次數(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); }) } } // 判斷列表頁(yè)or詳情頁(yè) 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; })()
因?yàn)槲沂褂玫氖莌exo-admin做后臺(tái)管理,安裝和使用方法見https://github.com/jaredly/hexo-admin
要在hexo-admin的后臺(tái)中新增文章時(shí)自動(dòng)添加一條數(shù)據(jù),就要對(duì)其改造:
在根目錄的node_modules中搜索hexo-admin,在其文件夾中找到www文件夾下的index.html,在其中引入leancloudConfig.js:
// 調(diào)用方法
在前臺(tái)頁(yè)面的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"); });
這樣就實(shí)現(xiàn)了瀏覽量的功能
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/83524.html
摘要:我選擇的是萬(wàn)網(wǎng),阿里下面的。然后在主題配置文件下添加主題配置文件中添加自定義樣式不得不說(shuō)還是很人性化的,你可以個(gè)性化定制你的網(wǎng)站,你所有的改動(dòng)需要放在主題文件的文件中,會(huì) 前言 本篇文章是在已經(jīng)搭建好gitpage+hexo的博客的前提下(不懂怎么搭建的可以參考我的另一篇博文:了解githubPages+hexo搭建博客的原理 或者利用Gitpage+hexo開發(fā)自己的博客,這兩篇博文...
摘要:我選擇的是萬(wàn)網(wǎng),阿里下面的。然后在主題配置文件下添加主題配置文件中添加自定義樣式不得不說(shuō)還是很人性化的,你可以個(gè)性化定制你的網(wǎng)站,你所有的改動(dòng)需要放在主題文件的文件中,會(huì) 前言 本篇文章是在已經(jīng)搭建好gitpage+hexo的博客的前提下(不懂怎么搭建的可以參考我的另一篇博文:了解githubPages+hexo搭建博客的原理 或者利用Gitpage+hexo開發(fā)自己的博客,這兩篇博文...
摘要:我選擇的是萬(wàn)網(wǎng),阿里下面的。然后在主題配置文件下添加主題配置文件中添加自定義樣式不得不說(shuō)還是很人性化的,你可以個(gè)性化定制你的網(wǎng)站,你所有的改動(dòng)需要放在主題文件的文件中,會(huì) 前言 本篇文章是在已經(jīng)搭建好gitpage+hexo的博客的前提下(不懂怎么搭建的可以參考我的另一篇博文:了解githubPages+hexo搭建博客的原理 或者利用Gitpage+hexo開發(fā)自己的博客,這兩篇博文...
摘要:前言博主之前也有折騰和可對(duì)于一個(gè)前端來(lái)說(shuō),讓人沒法盡興,因?yàn)椴恢涝撊绾翁砑幼约旱拇a。下面記錄博主搭建的整個(gè)過(guò)程。若這兩個(gè)條件滿足,則創(chuàng)建一個(gè)目錄的。 如果時(shí)間可以靜止,我希望就停在此刻。 前言 博主之前也有折騰wordpress和jekyll可對(duì)于一個(gè)前端er來(lái)說(shuō),wordpress讓人沒法盡興,因?yàn)椴恢涝撊绾翁砑幼约旱拇a。而jekyll就太麻煩了每一次都需要重新提交,而且樣式...
摘要:目前比較火的和的文檔都是使用框架實(shí)現(xiàn)的。二的安裝安裝前,確保電腦中已經(jīng)安裝了和??梢詤⒄諄?lái)自定義日期格式。值為時(shí)禁用主題部署參考部署部分的配置五部署上部署安裝中配置部署部分的設(shè)置終端進(jìn)入目錄運(yùn)行 一、什么是hexo Hexo是一個(gè)快速、簡(jiǎn)潔且高效的博客框架,使用Markdown(或其他渲染引擎)解析文章,在幾秒內(nèi),即可利用靚麗的主題生成靜態(tài)網(wǎng)頁(yè)。目前比較火的vue和weex的文檔都是使...
閱讀 3310·2021-10-12 10:12
閱讀 3237·2021-09-22 16:04
閱讀 3443·2019-08-30 15:54
閱讀 2757·2019-08-29 16:59
閱讀 3132·2019-08-29 16:08
閱讀 1012·2019-08-29 11:20
閱讀 3639·2019-08-28 18:08
閱讀 838·2019-08-26 13:43