NexT主题优化

前言

本篇文章是在已经搭建好gitpage+hexo的博客的前提下(不懂怎么搭建的可以参考我的另一篇博文:极简搭建博客 或者Hexo和Git搭建博客,这两篇博文都教了大家最基础的怎么将博客搭建起来。本篇博文是使用next主题的进击版本,主要是有以下内容

  • 域名绑定,将github博客和你的独有域名绑定
  • 添加更多的menu内容
  • 添加头像
  • 定义网站个性logo
  • 自定义样式,重写默认样式,个性化定制你的博客
  • 炫酷动态背景制作
  • 添加网易云音乐
  • 添加网易云跟帖
  • 添加leancloud阅读次数统计功能
  • 添加wordcount页面字数统计
  • 添加fork me on github功能

要想最快的知道这些功能的效果,请移步我的个人博客:https://rainyxy.github.io/,顺便求个forkヽ(●´ε`●)ノ

首先要说一下我使用的版本,这个是很重要的,好多版本都已经进行了更新,特别是next主题集成了更多的插件,简直不要太爽\(@ ̄∇ ̄@)/

hexo v3.2.2

next v5.1.0

node v4.5.0

在改成自己想要的效果之后,对整体的hexo的next主题我有了一个大概的了解,其实next主题的最新版(5.1)已经集成了大部分我们需要的插件,只需要在主题配置文件中将默认的false改为true即可,但是我们也仍然需要知道都有哪些新的功能,最有效的方法是直接去查看官网的api:next官网这里写图片描述

授之于鱼不如授之于渔
希望我们都能够理解其源码,制作出属于自己专属的个性化博客(•̀ᴗ•́)

我们需要改的文件其实也就那么几个,大部分是不需要更改,next都已经帮我们配置好了~
默认目录结构:

.
├── .deploy
├── public
├── scaffolds
├── scripts
├── source
|   ├── _drafts
|   └── _posts
├── themes
├── _config.yml
└── package.json
  • deploy:执行hexo deploy命令部署到GitHub上的内容目录
  • public:执行hexo generate命令,输出的静态网页内容目录
  • scaffolds:layout模板文件目录,其中的md文件可以添加编辑
  • scripts:扩展脚本目录,这里可以自定义一些javascript脚本
  • source:文章源码目录,该目录下的markdown和html文件均会被hexo处理。该页面对应repo的根目录,404文件、favicon.ico文件,CNAME文件等都应该放这里,该目录下可新建页面目录。
    • drafts:草稿文章
    • posts:发布文章
  • themes:主题文件目录
  • _config.yml:全局配置文件,大多数的设置都在这里
  • package.json:应用程序数据,指明hexo的版本等信息,类似于一般软件中的关于按钮

我们最先修改的应该是在hexo根目录下的配置文件_config.yml文件,这里是配置整个站点的配置信息,在文章的最后贴出我的配置文件,有兴趣的朋友可以参考一下~
其次就是我们的主题配置文件

在对应的主题下的_config.yml 因为我使用的是next主题,所以目录的路径为C:\Hexo\themes\next\_config.yml 这里配置的是使用主题的配置文件,这个配置文件的东西就有点多了,我们大部分的修改也是在这个文件下完成的。比如说使用集成的第三方插件,默认为false,我们需要将其改为true并且配置相应的app_key就可以使用该插件了~有木有很方便(^ ◕ᴥ◕ ^)
然后我们需要修改样式的话是需要设置css和甚至是修改模板,
页面展现的全部逻辑都在每个主题中控制,源代码在hexo\themes\你使用的主题\中,以next主题为例:

├── .github            #git信息
├── languages          #多语言
|   ├── default.yml    #默认语言
|   └── zh-Hans.yml      #简体中文
|   └── zh-tw.yml      #繁体中文
├── layout             #布局,根目录下的*.ejs文件是对主页,分页,存档等的控制
|   ├── _custom        #可以自己修改的模板,覆盖原有模板
|   |   ├── _header.swig    #头部样式
|   |   ├── _sidebar.swig   #侧边栏样式
|   ├── _macro        #可以自己修改的模板,覆盖原有模板
|   |   ├── post.swig    #文章模板
|   |   ├── reward.swig    #打赏模板
|   |   ├── sidebar.swig   #侧边栏模板
|   ├── _partial       #局部的布局
|   |   ├── head       #头部模板
|   |   ├── search     #搜索模板
|   |   ├── share      #分享模板
|   ├── _script        #局部的布局
|   ├── _third-party   #第三方模板
|   ├── _layout.swig   #主页面模板
|   ├── index.swig     #主页面模板
|   ├── page           #页面模板
|   └── tag.swig       #tag模板
├── scripts            #script源码
|   ├── tags           #tags的script源码
|   ├── marge.js       #页面模板
├── source             #源码
|   ├── css            #css源码
|   |   ├── _common    #*.styl基础css
|   |   ├── _custom    #*.styl局部css
|   |   └── _mixins    #mixins的css
|   ├── fonts          #字体
|   ├── images         #图片
|   ├── uploads        #添加的文件
|   └── js             #javascript源代码
├── _config.yml        #主题配置文件
└── README.md          #用GitHub的都知道

公益404页面

GitHub Pages 自定义404页面非常容易,直接在根目录下创建自己的404.html就可以。但是自定义404页面仅对绑定顶级域名的项目才起作用,GitHub默认分配的二级域名是不起作用的,使用hexo server在本机调试也是不起作用的。

其实,404页面可以做更多有意义的事,来做个404公益项目吧。现在,看下我的404页面一个ibruce.info上不存在的页面,做点有意义的事情,也对得起这个域名。
目前有如下几个公益404接入地址,我选择了腾讯的。404页面,每个人可以做的更多。

开启打赏功能

越来越多的平台(微信公众平台,新浪微博,简书,百度打赏等)支持打赏功能,付费阅读时代越来越近,特此增加了打赏功能,支持微信打赏和支付宝打赏。 只需要 主题配置文件 中填入 微信 和 支付宝 收款二维码图片地址 即可开启该功能。

打赏功能配置示例
reward_comment: 坚持原创技术分享,您的支持将鼓励我继续创作!
wechatpay: /path/to/wechat-reward-image
alipay: /path/to/alipay-reward-image

友情链接

编辑 主题配置文件 添加:

友情链接配置示例

# title
links_title: Links
links:
  MacTalk: http://macshuo.com/
  Title: http://example.com/

站点建立时间

这个时间将在站点的底部显示,例如 © 2013 - 2015。 编辑 主题配置文件,新增字段 since。

配置示例
since: 2013

加入站点内容搜索功能

本站点使用的是Local Search。加入站点内容搜索功能步骤如下:

安装hexo-generator-searchdb

$ npm install hexo-generator-searchdb --save

注意:安装时应在站点根目录下,即myBlog目录下

添加search字段

在站点

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
search:
path: search.xml
field: post
format: html
limit: 10000
# 主题颜色
NexT主旨在于简洁优雅且易于使用,主题本身提供了三种样式供用户选择,但色彩过于单一,今天为大家介绍如何修改主题的颜色和增加背景图片。
打开```hexo/themes/next/source/css/_variables/base.styl```找到Colors代码段,如下:
// Colors
// colors for use across theme.
// --------------------------------------------------
$whitesmoke = #f5f5f5
$gainsboro = #eee //这个是边栏头像外框的颜色,
$gray-lighter = #ddd //文章中插入图片边框颜色
$grey-light = #ccc //文章之间分割线、下划线颜色
$grey = #bbb //页面选中圆点颜色
$grey-dark = #999
$grey-dim = #666 //侧边栏目录字体颜色
$black-light = #555 //修改文章字体颜色
$black-dim = #333
$black-deep = #495a80 //修改主题的颜色,这里我已经改成老蓝色了。
$red = #ff2a2a
$blue-bright = #87daff
$blue = #0684bd
$blue-deep = #262a30
$orange = #F39D01 //浏览文章时,目录选中的颜色
其他的可以自行更改,看看效果
# 图床
考虑到博客的速度,同时也为了便于博客的迁移,图床是必须的。我墙裂推荐七牛,访问速度极快,支持日志、防盗链和水印。
免费用户有每月10GB流量+总空间10GB+PUT/DELETE 10万次请求+GET 100万次请求,这对个人博客来说足够,不够的话点这个活动页面,也可通过邀请好友获得奖励,我也求一下七牛邀请。有一点要说明的是,七牛没有目录的概念,但是文件名可以包含/,比如2013/11/27/reading/photos-0.jpg,参考这里关于key-value存储系统。
七牛除了作为图床还可以作为其他静态文件存储空间,比如我的个人站点首页有个字库文件和JS文件下载较慢,有时间会把它弄到七牛上去,以提高首页打开速度。请看这篇Linux中国采用七牛云存储支撑图片访问。
如果非要说不足的话,就是文件管理界面不是很友好,不支持CNAME到分配的永久链接,也不能绑定未备案的自有域名,必须备案才可以。
如果你对七牛web版的文件管理界面不满意,可以用官方的七牛云存储工具。
您还可以使用如下图床服务 FarBox,Dropbox,又拍云。
# 主题背景
打开```hexo/themes/next/source/css/_schemes/Pisces/index.styl```(Pisces为NexT提供的三种主题之一,根据使用的主题选择)修改```body{}```内的值,如下:
背景颜色直接更改即可:```body { background: #F0F0F0; }

添加背景:

{ background: url('/images/background.jpg'); }```(将背景图片放到```hexo/source/images```中即可。
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
# 加入数据统计与分析功能
本站点使用的是百度统计。加入数据统计与分析功能步骤如下:
- 注册站长账号并登陆
在这里注册站长账号,并填写信息,网站域名和网站首页以下图为例来填写,注册完成后并登陆。
![这里写图片描述](https://syd192.github.io/photo/20161115/8.png )
- 在跳转的页面中会显示下图,复制hm.js后的id值
![这里写图片描述](https://syd192.github.io/photo/20161115/9.png )
- 添加baidu_analytics字段
在站点myBlog/_config.yml中添加search字段,值为上步复制的id值
至此,该功能已成功加入,大约过20min后在百度统计上可以看到站点的访问情况,如下图:
![这里写图片描述](https://syd192.github.io/photo/20161115/10.png )
# 隐藏网页底部powered By Hexo / 强力驱动
打开```hexo/themes/next/layout/_partials/footer.swig```,使用”<!— —>”隐藏之间的代码即可(隐藏后代码如下),或者直接删除。
这时,该行信息即被隐藏,但留有空白,如果你开启了网站流量统计,那么在统计和版权之间会有空行,很不美观,以下方法修改网站流量统计的位置。我这里使用的是不蒜子统计,其他统计类似。
打开```hexo/themes/next/layout/_scripts/third-party/analytics/busuanzi-counter.swig```将两个<span>标签的class属性改为“powered-by”和“theme-info”,对这里使用了刚才删除hexo和主题信息标签的CSS属性,修改后代码如下:
{% if theme.busuanzicount.enable %}
{% if theme.busuanzicount.siteuv %}
{{ theme.busuanzicount.siteuvheader }}{{ theme.busuanzicount.siteuvfooter }}
{% endif %}
{% if theme.busuanzicount.sitepv %}
{{ theme.busuanzicount.sitepvheader }}{{ theme.busuanzicount.sitepvfooter }}
{% endif %}
</div>
{% endif %}
修改后效果如下:
![这里写图片描述](http://images2015.cnblogs.com/blog/395235/201611/395235-20161124141926112-883484784.png )
图上有没有发现我的是一个五角星,默认为心型,在刚才footer.swig文件中找到如下代码:
<span class="with-love">
<i class="fa fa-star"></i>
</span>
修改i标签的class属性fa-love,我这里改成了fa-star,有兴趣的朋友可以试试。
# 绑定域名
绑定域名的思路如下:
- 在万网购买自己喜欢的域名(.com的会贵一点,.site和.xyz的相对便宜一些,有的只需要几块钱一年就可以)
- 解析DNS
- 在hexo中添加CNAME文件
## 购买域名
之前没有买域名的时候我想使用网易云跟帖,发现在注册网易云跟帖的时候使用原来的域名提示“url已被使用”,这是因为网易云跟帖不认可二级域名,所以要自己买域名。
我选择的是[万网](https://wanwang.aliyun.com/),阿里下面的。我选择了一个`.site`的域名,原价8元,使用阿里云app支付还优惠5元,等于3元到手一个域名(一年)~
按照官网的步骤一步一来就可以了~
## 解析DNS
购买完域名之后我们需要解析DNS地址,在管理控制台中的左侧有域名选项,然后找到你的域名,点击后面的“解析”
![这里写图片描述](http://img.blog.csdn.net/20170409132041051?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast )
点击添加解析,记录类型选A或CNAME,
> A记录的记录值就是ip地址,github(官方文档)提供了两个IP地址,192.30.252.153和192.30.252.154,这两个IP地址为github的服务器地址,两个都要填上,
> 解析记录设置两个www和@,线路就默认就行了,CNAME记录值填你的github博客网址。如我的是rainyxy.github.io。
## 在hexo中添加CNAME文件
接下来在你的hexo文件夹下source文件夹下新建一个CANME文件,里面加上你刚刚购买的域名比如我的`cherryblog.site`
![这里写图片描述](http://img.blog.csdn.net/20170409141726073?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast )
然后你就可以`hexo clean`,`hexo g`,`hexo d` 发布你的博客看看效果啦~
![这里写图片描述](http://img.blog.csdn.net/20170409142438270?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast )
**在这里我出现一个问题,就是单独输入域名是可以访问的,但是前面加上www之后就访问不了了**
# 添加菜单页
添加菜单页的思路(添加菜单页就是添加一个页面,有两种方式):第一种是使用git命令`hexo new page "photo"` 就直接创建了` C:\Hexo\source\photo\index.md
`文件,然后编辑index.md 文件就可以了~
![这里写图片描述](http://img.blog.csdn.net/20170409165246422?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
第二种:手动创建上面的文件= =
- 在主题的配置文件添加menu索引路径(根路径是hexo/source),所以你如果想要更改页面的内容就去hexo/source下找到对应的文件夹,默认内容是在其index.md文件下
- 在hexo的source文件下添加对应的文件夹
- 在主题的配置文件添加menu_icon字段设置对应的icon
- 修改language文件下zh-hans语言包
- 在发表文章的时候添加对应的menu字段就可以看到
刚开始的时候不理解怎么添加分类页和添加文章的区别,公司有一个项目用到了wordpress,然后发现两者有相似的地方,不同的就是wordpress是有可视化的操作后台,而hexo是需要git bash自己创建**首先我们要分清什么是页面,什么是文章,**
**在hexo中menu下的内容都是新的页面**我们可以通过`hexo new page "pagename"` 创建,hexo默认的页面只有`home`,`archives`,`tags` 三个,之后我们写的博文就是文章,通过`hexo new "name"` 创建的`name.md` 文件在根目录的`source\_posts` 下,在每一个文章的头部,我们可以配置其tags或者categories内容,相当于文章是页面的下一级
## 在配置文件中添加menu索引路径
我们可以在主题配置的_config文件下找到相应的字段,字段前加`#` 表示被注释掉,我们也可以自己添加menu的内容,比如我又新增了两个menu`life` 和`photo`
![这里写图片描述](http://img.blog.csdn.net/20170409143920151?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast )
这里添加的字段其实是加上文件索引的路径,这里hexo设置的根路径是`hexo/source` 接下来我们在这个根路径下建立相应的文件夹就可以实现点击mune跳转到相应的页面上了
![这里写图片描述](http://img.blog.csdn.net/20170409151941047?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast ),
没有明白什么意思的同学看下图
## 在source文件添加menu文件夹
我们需要在这个路径下自己建立对应的页面,比如说我新建了menu`life` 和`photos`,然后再source文件夹下面新建两个名字为`life` 和`photo` 的文件夹,里面添加一个`index.md` markdown文件,内容是类似这样的
---
title: photo
date: 2017-04-04 22:14:07
type: "photo"
comments: false
---
啦啦啦~
![这里写图片描述](http://img.blog.csdn.net/20170409152554707?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast )
这是一个markdown文件,你可以自己编写
## 给menu添加icon
如果只是上面的步骤,那么你可能会创建出一个新的页面,但是显示的效果会是这样:![这里写图片描述](http://img.blog.csdn.net/20170409153513929?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast )
怎么icon没有换???其实hexo中换icon是一个很简单的事情,因为hexo集成了`FontAwsome` 所以我们只需要在主题的配置文件中加入相应的icon名字即可
![这里写图片描述](http://img.blog.csdn.net/20170409153837056?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast )
## 查找`FontAwsome` icon
这时候你想要换一个自己喜欢的icon怎么办,这就需要自己动手,丰衣足食了,你需要自己到[FontAwsome官网](http://www.bootcss.com/p/font-awesome/#),然后鼠标往下拉,在图标集中选择自己喜欢的icon,然后记住名字,保存在上面的menu_icon字段中就可以啦~
![这里写图片描述](http://img.blog.csdn.net/20170409154335951?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)tips :在字段中只需要填写icon-name后面跟的name即可,不需要加上前面的"icon-"
## 在language添加zh-hans翻译字段
上面的步骤完成之后你会发现,在你的博客首页显示的仍然是英文名,而我们想要有一个中文的名字,并且想要个性化定制我们的页面,我们可以在主题的language文件下的zh-hans(中文)语言包下增加相应的字段(做过翻译的童鞋应该都知道什么意思~)还可以修改其他的字段,这样就可以定制我们的博客了呢~
![这里写图片描述](http://img.blog.csdn.net/20170409171442363?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
## 在发表文章的时候添加对应的menu字段
在我们写文章的时候只要在头部信息添加相应的字段就在tags页面和categories中显示相应的分类,例如:
---
title: Git使用中的报错情况
date: 2017-03-11 23:54:11
tags: [git,实战经验]
categories: git
---
tags、categories都是支持数组的形式的,可以添加多个tags、categories。这样我们在tags、categories页面就可以看见相应的分类了
![这里写图片描述](http://img.blog.csdn.net/20170409172519879?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
# 添加头像
我使用的主题头像是位于侧边栏,显示的效果如下,
![这里写图片描述](http://img.blog.csdn.net/20170409172733268?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)要添加一个这个的头像要怎么操作呢,其实思路就是将你要上传的头像放在你的文件夹中,然后再配置文件中引用正确的路径即可,当然也可以上传绝对路径。在你的主题配置文件找到avatar字段,然后将你得图片路径写在后面,我是新建了一个uploads文件夹,将图片放在下面
# Sidebar Avatar
# in theme directory(source/images): /images/avatar.jpg
# in site directory(source/uploads): /uploads/avatar.jpg
avatar: /uploads/avatar.png
![这里写图片描述](http://img.blog.csdn.net/20170409173222538?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
或者是一种比较简单的方法
在主题下的```source/images/```下放置头像文件```avatar.gif```即可。
# 设置网站logo
跟设置头像其实是一个思路,都是在配置文件中引入正确的地址就可以了,不过网站的logo是对图片有要求的,我们需要在[Favicon在线制作](http://tool.lu/favicon/)工具中制作32*32的.ico图片,然后放在source/images下面。然后在主题配置文件下添加主题配置文件中添加:`favicon: images/favicon.ico`
# 自定义样式
不得不说next还是很人性化的,你可以个性化定制你的网站,你所有的改动(css)需要放在主题文件的source/css/_costum/costum.styl文件中,会覆盖原来的css,所以只要你不想要你修改的样式,只需要删除这个文件夹就可以了,再也不用担心还原不回去了~
![这里写图片描述](http://img.blog.csdn.net/20170409174107213?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
# 炫酷动态背景
之前做过一个类似的canvas-nest的效果。新版本的next已经支持canvas-nest了,但是效果不怎么样,就不用了,但是也介绍一下,毕竟简单,只有两步就可以了。
添加修改代码`next/layout/_layout.swig`在`</body>`之前加上
{% if theme.canvas_nest %}
<script type="text/javascript" src="//cdn.bootcss.com/canvas-nest.js/1.0.0/canvas-nest.min.js"></script>
{% endif %}
打开`next/_config.yml`,添加以下代码就可以了:
# Canvas-nest
canvas_nest: true
这种虽然简单,但是我认为效果不够好,于是我决定添加原生的js来仿知乎的登录界面做背景,这就需要修改模板来实现了。首先我们要知道next文件的结构,这样我们想改什么就知道在什么位置了~
![这里写图片描述](http://img.blog.csdn.net/20170409180317491?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
所以我们需要在layout下面的`_layout.swig` 添加一个canvas
然后使用原生js写一个仿知乎页面,详情script代码可以从github上
- clone:
- https://github.com/sunshine940326/canvas-nest
内容我放在附录2里了,大家可以去看最下面(*^__^*)
# 添加网易云音乐
## HTTP环境
这次主要分两类来讲,一类是http环境
也就是网址格式为"http://www.xxx.com"或"http://xxx.com"的网站
在知道了页面的结构之后,你就可以将你的播放器添加在页面的任意位置,开始我是放在了首页,然后发现一上来就自动播放太吵了,于是就放在了侧边栏,想要听得朋友可以手动点击播放,
我们可以直接在网易云音乐中搜索我们想要插入的音乐,然后点击生成外链播放器
![这里写图片描述](http://img.blog.csdn.net/20170409181717791?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
然后可以根据你得设置生成相应的html代码,将获得的html代码插入到你想要插入的位置即可
![这里写图片描述](http://img.blog.csdn.net/20170409181941920?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
我放在了`layout/_macro/sidebar.swig` 文件下
<div id="music163player">
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=280 height=86 src="//music.163.com/outchain/player?type=2&id=38358214&auto=0&height=66">
</iframe>
</div>
然后就可以在侧边栏看见我的播放器了~
![这里写图片描述](http://img.blog.csdn.net/20170409191354574?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2hpbmU5NDAzMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
但是上面介绍的方法,都只能在某一个页面播放,如某一篇文章或者留言板等。
一旦页面跳转则没有了…不像WP可以全站背景音乐
## HTTPS环境
现在使用https的网站越来越多,像百度、淘宝等等都是如此
另外使用github搭建hexo的同学们,现在gh-pages已经强制要求全站https啦
这种网站格式一般为"https://xxx.github.io"
然后…发现网易云音乐已经不能正常使用了
由于网易云目前并不支持https,所以我们只能通过插件来实现音乐播放
这里需要使用到163music-APlayer-you-get-docker项目
在github项目文档上我们可以看见,参数实在是太多,再加上版本迭代和英文介绍,我一脸懵逼…
但是在iframe用法里面,我发现有一个demos
https://music.daoapp.io/iframe?song=287749&qnarrow=1&qssl=1
格式非常像上文介绍的网易云外链,于是我尝试直接替换为

<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="https://music.daoapp.io/iframe?song=287749&qssl=1&qlrc=0&qnarrow=0&autoplay=1"></iframe>

```


也就是把src=””里面的链接换掉,其他保持不变
接着来分析这段代码

width和height是播放器的宽度和高度
287749这串数字是网易云音乐的歌曲编号
qlrc=0代表不显示歌词
autoplay=1代表自动播放

这样如果没有特殊要求的话,每次只需在网易云找好歌曲编号,然后替换这串数字即可
粘贴到.md文件里面

这个项目的玩法非常多,如果需要显示歌词的话
修改qlrc=1为再调整下播放器宽度(width)高度(height)数值

网易云跟帖

之前用的是多说,但是多说在2017年6月1日就关闭评论服务了= =,很忧伤,于是转到了网易云跟帖。由于最新版(5.1)版本的next已经集成了网易云跟帖,所以只需要在主题的设置文件中配置你的productKey就可以了。获取productKey也很简单,在官网网易云跟帖中注册,然后在获取代码>通用代码中拿到productKey,之后在你的主题配置文件中的gentie_productKey字段后添加即可~

#添加Fork me on GitHub
去网址https://github.com/blog/273-github-ribbons 挑选自己喜欢的样式,并复制代码,添加到themes\next\layout_layout.swig的body标签之内即可
记得把里面的url换成自己的!

hexo-wordcount实现统计功能

这里写图片描述
wordcount可以实现字数统计,阅读时常还有总字数的统计功能
只需要npm install hexo-wordcount --save 就可以安装wordcount插件,
主要功能
字数统计:WordCount
阅读时长预计:Min2Read
总字数统计: TotalCount
安装完插件之后在主题的配置文件中开启该功能就可以~

# Post wordcount display settings
# Dependencies: https://github.com/willin/hexo-wordcount
post_wordcount:
  item_text: true
  wordcount: true
  min2read: true

leancloud阅读次数统计

next也集成了leancloud,在leancloud官网
中注册账号等一步一步的操作就不说了哈~,我们主要是为了拿到app_key和app_id,然后在主题配置文件做一下配置

# Show number of visitors to each article.
# You can visit https://leancloud.cn get AppID and AppKey.
leancloud_visitors:
  enable: true
  app_id: yourapp_id
  app_key: yourapp_key

然后再leancloud的控制台中的存储添加一个counter的class就可以检测到我们的浏览量了,同时在你文章的副标题也可以看到有阅读次数的显示
这里写图片描述

个人网站地址:https://rainyxy.github.io/,顺便求个fork

致谢

在这里我聚集了很多人的教程,也希望能让能多的人知道如何去做,还有NexT官网可以参照,希望大家能美化好自己的博客♪(^∇^*)

附录1:站点配置文件

# Hexo Configuration
## Docs: https://hexo.io/docs/configuration.html
## Source: https://github.com/hexojs/hexo/

# Site                  站点信息
title: Rainy's Blog     #站点名字 
subtitle:               #副标题
description: 奔跑不单是一种能力,更是一种态度,决定你人生高度的态度。                   #站点描述,在侧边栏显示
author: Rainy           #博主名字
language: zh-Hans       #使用的语言包,语言包在主题文件的language文件夹下,可以更改网站显示出的文案
timezone:

# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: http://RainyXY.github.io
root: /
permalink: :year/:month/:day/:title/
permalink_defaults:

# Directory
source_dir: source
public_dir: public
tag_dir: tags
archive_dir: archives
category_dir: categories
code_dir: downloads/code
i18n_dir: :lang
skip_render:

# Writing
new_post_name: :title.md # File name of new posts
default_layout: post
titlecase: false # Transform title into titlecase
external_link: true # Open external links in new tab
filename_case: 0
render_drafts: false
post_asset_folder: true         #新建一个页面后自动生成一个同名文件夹(默认为false)
relative_link: false
future: true
highlight:
  enable: true
  line_number: true
  auto_detect: false
  tab_replace:

# Category & Tag
default_category: uncategorized
category_map:
tag_map:

# Date / Time format
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: YYYY-MM-DD
time_format: HH:mm:ss

# Pagination
## Set per_page to 0 to disable pagination
per_page: 10
pagination_dir: page

# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: next

search:
  path: search.xml
  field: post
  format: html
  limit: 10000

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
  type: git
  repo: git@github.com:RainyXY/RainyXY.github.io.git
  branch: master

附录2:背景脚本

<script>
class Circle {
    //创建对象
    //以一个圆为对象
    //设置随机的 x,y坐标,r半径,_mx,_my移动的距离
    //this.r是创建圆的半径,参数越大半径越大
    //this._mx,this._my是移动的距离,参数越大移动
    constructor(x, y) {
        this.x = x;
        this.y = y;
        this.r = Math.random() * 10 ;
        this._mx = Math.random() ;
        this._my = Math.random() ;

    }

    //canvas 画圆和画直线
    //画圆就是正常的用canvas画一个圆
    //画直线是两个圆连线,为了避免直线过多,给圆圈距离设置了一个值,距离很远的圆圈,就不做连线处理
    drawCircle(ctx) {
        ctx.beginPath();
        //arc() 方法使用一个中心点和半径,为一个画布的当前子路径添加一条弧。
        ctx.arc(this.x, this.y, this.r, 0, 360)
        ctx.closePath();
        ctx.fillStyle = 'rgba(204, 204, 204, 0.3)';
        ctx.fill();
    }

    drawLine(ctx, _circle) {
        let dx = this.x - _circle.x;
        let dy = this.y - _circle.y;
        let d = Math.sqrt(dx * dx + dy * dy)
        if (d < 150) {
            ctx.beginPath();
            //开始一条路径,移动到位置 this.x,this.y。创建到达位置 _circle.x,_circle.y 的一条线:
            ctx.moveTo(this.x, this.y);   //起始点
            ctx.lineTo(_circle.x, _circle.y);   //终点
            ctx.closePath();
            ctx.strokeStyle = 'rgba(204, 204, 204, 0.3)';
            ctx.stroke();
        }
    }

    // 圆圈移动
    // 圆圈移动的距离必须在屏幕范围内
    move(w, h) {
        this._mx = (this.x < w && this.x > 0) ? this._mx : (-this._mx);
        this._my = (this.y < h && this.y > 0) ? this._my : (-this._my);
        this.x += this._mx / 2;
        this.y += this._my / 2;
    }
}
//鼠标点画圆闪烁变动
class currentCirle extends Circle {
    constructor(x, y) {
        super(x, y)
    }

    drawCircle(ctx) {
        ctx.beginPath();
        //注释内容为鼠标焦点的地方圆圈半径变化
        //this.r = (this.r < 14 && this.r > 1) ? this.r + (Math.random() * 2 - 1) : 2;
        this.r = 8;
        ctx.arc(this.x, this.y, this.r, 0, 360);
        ctx.closePath();
        //ctx.fillStyle = 'rgba(0,0,0,' + (parseInt(Math.random() * 100) / 100) + ')'
        ctx.fillStyle = 'rgba(255, 77, 54, 0.3)'
        ctx.fill();

    }
}
//更新页面用requestAnimationFrame替代setTimeout
window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;

let canvas = document.getElementById('canvas');
let ctx = canvas.getContext('2d');
let w = canvas.width = canvas.offsetWidth;
let h = canvas.height = canvas.offsetHeight;
let circles = [];
let current_circle = new currentCirle(0, 0)

let draw = function () {
    ctx.clearRect(0, 0, w, h);
    for (let i = 0; i < circles.length; i++) {
        circles[i].move(w, h);
        circles[i].drawCircle(ctx);
        for (j = i + 1; j < circles.length; j++) {
            circles[i].drawLine(ctx, circles[j])
        }
    }
    if (current_circle.x) {
        current_circle.drawCircle(ctx);
        for (var k = 1; k < circles.length; k++) {
            current_circle.drawLine(ctx, circles[k])
        }
    }
    requestAnimationFrame(draw)
}

let init = function (num) {
    for (var i = 0; i < num; i++) {
        circles.push(new Circle(Math.random() * w, Math.random() * h));
    }
    draw();
}
window.addEventListener('load', init(60));
window.onmousemove = function (e) {
    e = e || window.event;
    current_circle.x = e.clientX;
    current_circle.y = e.clientY;
}
window.onmouseout = function () {
    current_circle.x = null;
    current_circle.y = null;

};
</script>
Fork me on GitHub