Next主题进阶教程

本文介绍的是Hexo博客第三方主题Next进阶教程

注意点:

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

当前所在菜单下划线显示

效果图:

  • 打开themes\next\layout\ _partials文件夹中的header.swig
  • 在底部添加一个脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<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文件。插入代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!-- 新增访客统计代码 -->

<div class="busuanzi-count">
<script async="" src="https://busuanzi.ibruce.info/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-->

效果如下:


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

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

如何让百度收录自己的bolg

  • 在百度搜索引擎搜索自己的域名查看是否收录 site:malizhi.cn
  • 如果没有收录,可以到此网站提交申请,验证网站,验证成功网站后,我们可以使用自动推送,让百度可以收录我们博客的所有网页

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

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

    1
    2
    3
    ---
    layout: false
    ---
  • 验证成功后,打开你的hexo博客根目录,分别用下面两个命令来安装针对百度的插件

    1
    2
    npm install hexo-generator-sitemap --save
    npm install hexo-generator-baidu-sitemap --save
  • 安装成功后hexo g,站点根目录中的public目录会自动生成sitemap配置文件,sitemap.xml baidusitemap.xml

  • 在博客站点目录中,添加以下配置
1
2
3
4
5
# 自动生成sitemap
sitemap:
path: sitemap.xml
baidusitemap:
path: baidusitemap.xml
  • 修改主题配置文件
1
2
# 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,添加以下代码(代码来自百度自动推送):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{% 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块中配置:
1
rewrite ^(.*) https://xxx.cn$1 permanent;   #重定向https访问

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

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

在底部增加运行时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- 在网页底部添加网站运行时间 -->
<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>

效果如下:


底部跳动图标实现

  • 注意点:需要到next\layout_partials下的footer.swig文件中,在你所需要调动的图标所对应的span中增加对应的ID
  • 去到主体的css文件(next\source\css_variables) custom.styl ,增加以下代码即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//底部爱心小图标跳动
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中添加依赖:
1
"hexo-blog-encrypt": "2.0.*"
  • 在站点配置文件中开启,没有则添加:

    1
    2
    3
    # Security
    encrypt:
    enable: true
  • 在文章中的头部信息中添加对应的信息即可

    1
    2
    3
    4
    5
    6
    7
    ---
    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 内的代码替换为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
'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"> ,在下面添加对应代码
    1
    2
    3
    4
    5
    6
    7
    <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 %}
    ......

效果:


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

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

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

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

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

效果:


添加文章阴影

  • 去到next\source\css_custom下,修改Custom styles文件,增加一下代码
  • 阴影的透明度、大小等可以在代码中自由调节
1
2
3
4
5
6
7
8
9
 // 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);
}

效果图:


修改网页加载进度条颜色

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

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

  • 确保你拥有一个以NexT为主题的Hexo博客 版本大概任意orz
  • 下载hexo-next-bottomheart.js(可以把链接复制到下载工具中或者直接新建文件然后复制粘贴),并把它保存在/themes/next/source/js/src/目录下。
  • 使用文本编辑器打开/themes/next/layout/_layout.swig,在尾部上方新增一行(line 5),修改后的文件如下
1
2
3
4
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, 在
1
2
3
4
5
<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为

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

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

效果:


相册功能

效果图:

因为篇幅较长,另起一篇文章说明,文章地址: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,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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 发布到服务器即可,可发现访问速度有了改善

建议与帮助

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

如果我的文章对你有很大帮助 那么不妨?
-------------本文结束感谢您的阅读-------------
0%