Hexo博客第三方主题next进阶教程

注意点:

  • 下面的教程,每个教程点都是用水平线分割,防止混乱
  • 教程针对NexT主题设置,此教程为进阶教程,基础配置主题的教程可以查阅相关资料,以下改变的效果可以到此博客预览

当前所在菜单下划线显示

效果图:


image
  • 打开themes\next\layout_partials文件夹中的header.swig
  • 在底部添加一个脚本
<script>
    
    window.onload = function(){
        var path = 'https://malizhi.cn'; //这里要改成你博客的地址
        var localhostItem = String(window.location).split(path)[1];
        var LiNode = document.querySelectorAll('#menu > li > a')
        
        for(var i = 0; i< LiNode.length;i++){
            var item = String(LiNode[i].href).split(path)[1];
            if(item == localhostItem && item != undefined){
                LiNode[i].setAttribute('style','border-bottom:1px solid black');
            }
        }
    };

</script>
  • 重新部署发布即可 命令:hexo cl && hexo g && hexo d

统计站点的总访问量,即统计浏览了多少次;有多少人访问,在footer显示

  • 找到站点的themes/next/layout/_partials目录下的footer.swig文件。插入代码如下
<!-- 新增访客统计代码 -->

<div class="busuanzi-count">
    <script async="" src="https://dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script>
    <span class="site-uv">
      <i class="fa fa-user"></i>
      访问用户: <span class="busuanzi-value" id="busuanzi_value_site_uv"></span> 人
    </span>
    <div class="powered-by"></div>
    <span class="site-uv">
      <i class="fa fa-eye"></i>
      访问次数: <span class="busuanzi-value" id="busuanzi_value_site_pv"></span> 次
    </span>
    <!-- 博客字数统计 -->
    <span class="site-pv">
      <i class="fa fa-pencil"></i>
      博客全站共: <span class="post-count">{{ totalcount(site) }}</span> 字
    </span>
</div>
<!-- 新增访客统计代码 END-->

效果如下:


Alt text

关于博客获取文章阅读数量或者评论消息时获取失败这种情况不用担心,有时候所处的网络是机房或者一些有限制访问leancloud的网络会造成访问不了leancloud,可以换一个网络试试。

  • 访问不了时,网页显示错误如下:
    api.leancloud.cn/1.1/classes/Comment:1 Failed to load resource:net::ERR_CONNECTION_RESET

如何让百度收录自己的bolg

  • 在百度搜索引擎搜索自己的域名查看是否收录 site:malizhi.cn

    enter image description here

  • 如果没有收录,可以到此网站提交申请,验证网站,验证成功网站后,我们可以使用自动推送,让百度可以收录我们博客的所有网页

  • 百度收录验证时如果选择第一种方式验证就是把 baidu_verify_6j6lLVHSN7.html放在blog的根目录


    enter image description here

    但是放在根目录会有一个问题,hexo会为此html自动渲染,添加了不必要的东西,此时,百度验证会不通过,我们要在此html中顶部添加以下内容,hexo才不会为此html自动渲染。

        ---
        layout: false
        ---
  • 验证成功后,打开你的hexo博客根目录,分别用下面两个命令来安装针对百度的插件
npm install hexo-generator-sitemap --save
npm install hexo-generator-baidu-sitemap --save
  • 安装成功后hexo g,站点根目录中的public目录会自动生成sitemap配置文件,sitemap.xml baidusitemap.xml
  • 在博客站点目录中,添加以下配置
# 自动生成sitemap
sitemap:
  path: sitemap.xml
baidusitemap:
  path: baidusitemap.xml
  • 修改主题配置文件
# Enable baidu push so that the blog will push the url to baidu automatically which is very helpful for SEO
baidu_push: true
  • 修改baidu_push.swig,位置是themes\next\layout_third-party\seo,添加以下代码(代码来自百度自动推送):
{% if theme.baidu_push %}
<script>
(function(){
    var bp = document.createElement('script');
    var curProtocol = window.location.protocol.split(':')[0];
    if (curProtocol === 'https') {
        bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
    }
    else {
        bp.src = 'http://push.zhanzhang.baidu.com/push.js';
    }
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(bp, s);
})();
</script>
{% endif %}

这样子的话每次访问博客中的页面会自动向百度提交。


如何把www.xxx.cn xxx.cn 转换成https://xxx.cn

  • 去到nginx的配置文件中,在80端口的server块中配置:
rewrite ^(.*) https://xxx.cn$1 permanent;   #重定向https访问

如何把https://www.xxx.cn 转成https://xxx.cn

  • 去到nginx的配置文件中,(前提是你的bolg已经有安全验证证书) 在配置文件中增加多一个server
server {
        listen 443;
        server_name www.xxx.cn;
        rewrite ^(.*) https://xxx.cn$1 permanent;   #重定向https访问
    }
  • 然后在原来验证bolg的443端口后面增加一小段代码default_server ssl
   server {
        listen 443 default_server ssl;

在底部增加运行时间

<!-- 在网页底部添加网站运行时间 -->
<span id="timeDate">载入天数...</span><span id="times">载入时分秒...</span>
<script>
    var now = new Date();
    function createtime() {
        var grt= new Date("07/21/2018 00:00:00");//此处修改你的建站时间或者网站上线时间
        now.setTime(now.getTime()+250);
        days = (now - grt ) / 1000 / 60 / 60 / 24; dnum = Math.floor(days);
        hours = (now - grt ) / 1000 / 60 / 60 - (24 * dnum); hnum = Math.floor(hours);
        if(String(hnum).length ==1 ){hnum = "0" + hnum;} minutes = (now - grt ) / 1000 /60 - (24 * 60 * dnum) - (60 * hnum);
        mnum = Math.floor(minutes); if(String(mnum).length ==1 ){mnum = "0" + mnum;}
        seconds = (now - grt ) / 1000 - (24 * 60 * 60 * dnum) - (60 * 60 * hnum) - (60 * mnum);
        snum = Math.round(seconds); if(String(snum).length ==1 ){snum = "0" + snum;}
        document.getElementById("timeDate").innerHTML = "Run for "+dnum+" Days ";
        document.getElementById("times").innerHTML = hnum + " Hours " + mnum + " m " + snum + " s";
    }
setInterval("createtime()",250);
</script>

效果如下:


Alt text

底部跳动图标实现

  • 注意点:需要到next\layout_partials下的footer.swig文件中,在你所需要调动的图标所对应的span中增加对应的ID
  • 去到主体的css文件(next\source\css_variables) custom.styl ,增加以下代码即可
//底部爱心小图标跳动
keyframes heartAnimate {
    0%,100%{transform:scale(1);}
    10%,30%{transform:scale(0.9);}
    20%,40%,60%,80%{transform:scale(1.1);}
    50%,70%{transform:scale(1.1);}
}

//图标所对应的span中的ID
#heart {
    animation: heartAnimate 1.33s ease-in-out infinite;
}
.with-love {
    color: rgb(255, 113, 113);
}

文章加密,对应的插件文档可以参考

https://github.com/MikeCoder/hexo-blog-encrypt/blob/master/ReadMe.md

  • 在根目录中package.json中添加依赖:
 "hexo-blog-encrypt": "2.0.*"
  • 在站点配置文件中开启,没有则添加:
# Security
encrypt:
    enable: true
  • 在文章中的头部信息中添加对应的信息即可
---
title: testPass
date: 2018-07-26 00:00:00
password: 123456
abstract: 这是一篇加密的文章。
message: enter password to read.
---

文章置顶:

  • 修改 hero-generator-index 插件,把文件:node_modules/hexo-generator-index/lib/generator.js 内的代码替换为:
'use strict';
var pagination = require('hexo-pagination');
module.exports = function(locals){
  var config = this.config;
  var posts = locals.posts;
    posts.data = posts.data.sort(function(a, b) {
        if(a.top && b.top) { // 两篇文章top都有定义
            if(a.top == b.top) return b.date - a.date; // 若top值一样则按照文章日期降序排
            else return b.top - a.top; // 否则按照top值降序排
        }
        else if(a.top && !b.top) { // 以下是只有一篇文章top有定义,那么将有top的排在前面
            return -1;
        }
        else if(!a.top && b.top) {
            return 1;
        }
        else return b.date - a.date; // 都没定义按照文章日期降序排
    });
  var paginationDir = config.pagination_dir || 'page';
  return pagination('', posts, {
    perPage: config.index_generator.per_page,
    layout: ['index', 'archive'],
    format: paginationDir + '/%d/',
    data: {
      __index: true
    }
  });
};
  • 添加置顶标志:去到next\layout_macro下的post.swig,找到<div class="post-meta"> ,在下面添加对应代码
<div class="post-meta">
          {% if post.top==100 %}
            <i class="fa fa-thumb-tack"></i>
            <font color=808080>置顶</font>
            <span class="post-meta-divider">|</span>
          {% endif %}
     ......

效果:
Alt text

减少背景线条(默认线条数可以看官方插件)

https://github.com/hustcc/canvas-nest.js

  • 对应的js在next\source\lib\canvas-nest下,修改js的count数量即可,默认是99条

在头部菜单中,显示有多少篇数

  • 在next\layout_partials\header.swing 修改对应的代码
  • 找到对应的位置
.......
{{ __('menu.' + name) | replace('menu.', '') }}
.......
  • 可以按照我这种方法添加篇数


    enter image description here

效果:


image

添加文章阴影

  • 去到next\source\css_custom下,修改Custom styles文件,增加一下代码
  • 阴影的透明度、大小等可以在代码中自由调节
 // Custom styles.
// 主页文章添加阴影效果
 .post {
   margin-top: 60px;
   margin-bottom: 60px;
   padding: 25px;
   -webkit-box-shadow: 0 0 5px rgba(202, 203, 203, .5);
   -moz-box-shadow: 0 0 5px rgba(202, 203, 204, .5);
  }

效果图:


image

修改网页加载进度条颜色

  • 到next\source\lib\pace,找到自己加载条对应的样式,进行修改即可

底部小心心增加点击动画功能

  • 确保你拥有一个以NexT为主题的Hexo博客 版本大概任意orz
  • 下载hexo-next-bottomheart.js(可以把链接复制到下载工具中或者直接新建文件然后复制粘贴),并把它保存在/themes/next/source/js/src/目录下。
  • 使用文本编辑器打开/themes/next/layout/_layout.swig,在尾部</body>上方新增一行(line 5),修改后的文件如下
...
{% include '_components/algolia-search/assets.swig' %}
  <script type="text/javascript" src="/js/src/hexo-next-bottomheart.js"></script>
</body>
</html>
  • 使用文本编辑器打开/themes/next/layout/_partials/footer.swig, 在
<span itemprop="copyrightYear">{{ current }}</span>
<span class="with-love">
  <i class="fa fa-{{ theme.authoricon }}"></i>
</span>
<span class="author" itemprop="copyrightHolder">{{ config.author }}</span>

line5处,修改line 5为

<div id="bottomheart" style="cursor:pointer;"><i class="fa fa-{{ theme.authoricon }}"></i></div>

这时候,重新部署你的博客,就可以疯狂点击小心心啦

效果:
Alt text

相册功能

效果图:


image

因为篇幅较长,另起一篇文章说明,文章地址:https://malizhi.cn/HexoAlbum/


如何利用 Gulp 来压缩你的 Hexo 博客的静态文件( html / css / js ),达到提高访问速度的目的

  • 在blog站点目录下打开git
  • 首先安装gulp $ npm install gulp
  • 继续安装依赖包
    • $ npm install --save-dev babel-cli
    • $ npm install --save-dev babel-preset-es2015
    • $ npm install gulp-minify-css gulp-babel gulp-uglify gulp-htmlmin gulp-htmlclean --save-dev
  • 在博客的根目录创建文件 gulpfile.js,代码如下:
var gulp = require('gulp');
var minifycss = require('gulp-minify-css');
var babel = require('gulp-babel');
var uglify = require('gulp-uglify');
var htmlmin = require('gulp-htmlmin');
var htmlclean = require('gulp-htmlclean');

gulp.task('minify-css', function () {
return gulp.src('./public/**/*.css')
.pipe(minifycss())
.pipe(gulp.dest('./public'));
});

gulp.task('minify-html', function () {
return gulp.src('./public/**/*.html')
.pipe(htmlclean())
.pipe(htmlmin({
removeComments: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
}))

.pipe(gulp.dest('./public'))
});

gulp.task('minify-js', function () {
return gulp.src(['./public/**/*.js', '!./public/**/*.min.js'])
.pipe(babel({ presets: ['es2015'] }))
.pipe(uglify())
.pipe(gulp.dest('./public'));
});

gulp.task('default', ['minify-html', 'minify-css', 'minify-js']);   
  • 压缩方法:执行完hexo g 产生编译文件后,执行gulp
  • 看到以下信息代表压缩成功,接下来使用hexo d 发布到服务器即可,可发现访问速度有了改善
image

建议与帮助

有小伙帮有好的建议或者其他问题可以及时联系我

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容