本网站的主题修改主要参照这位大佬的博客,但其边缘波动的部分配置是无效的,下文有详细介绍。
1 站点基本优化
1.1 基本信息配置
NexT主题默认风格为Muse
,可以在主题目录的配置文件_config.yml
,注意这不是根目录下网站的配置文件
1 | # Schemes |
而根目录下的_config.yml
文件负责站点的相关配置包括了网站标题、网站描述、网站语言等
1 | # Site |
1.2 生成标签、分类、归档页面
主题首页的默认页面中是没有标签、分类、归档页面的,需要手动生成一下。先在博客根目录下打开git-bash
或终端,然后键入以下命令
1 | hexo new page tags && hexo new page categories && hexo new page archives |
然后打开新增的source/tags/index.md
,修改如下
1 | title: 标签 |
同理再修改另外两个新增文件夹下的index.md
。
最后修改主题配置文件的menu
字段
1 | menu: |
效果如下
1.3 首页显示文章摘要
默认的主题配置里,首页会显示每一篇文章的全文,如果想只显示文章摘要,对主题配置文件做如下更改
1 | auto_excerpt: |
此时文中的前150个字符将作为摘要。
用户可以在文章中通过<!-- more -->
标记来精确划分摘要信息,标记之前的段落将作为摘要显示在首页。
如果在文章的 Front-Matter 中有非空的 description
字段,则该字段的内容会被作为摘要显示在首页。
1.4 修改站点页脚
在主题配置文件中修改网站页脚信息
1 | footer: # 底部信息区 |
更改后效果如本站底部,但字数统计和访问统计等在后续配置中。
1.5 修改网站 Favicon
Favicon 即浏览器标签左侧的图标。下载自己喜欢的图标置于 themes\next\source\images\
目录下,命名方式参考主题配置文件中的 favicon
字段。 这里介绍一个在线制作 favicon
的网站,可以上传喜欢的图片制作成favicon
。
1 | favicon: |
1.6 添加友情链接
在主题配置文件中修改相应的字段,可以加入一些朋友的网站。
1 | links_icon: link |
1.7 添加社交链接
默认可选选项中,国内能用的基本只有github,邮箱,微博,当然其他只要有账号就可以放上去。
1 | social: |
1.8 添加版权协议
先在主题配置文件中开启相关字段
1 | creative_commons: by-nc-sa |
2 网站逻辑优化
2.1 点击头像回到首页
修改侧边栏模板代码
1 | {% if theme.avatar.url %} |
2.2 文章页优化
取消文章目录中的数字编号,因为一般我写markdown文档的时候都是自己为章节编号,所以需要取消主题中的文章目录的数字编号,否则就会有两个数字很别扭。
1 | toc: |
默认情况下文章的多级目录会被折叠,需要点击才能触发下级菜单的展开,并且同时只能展开一个目录分支,这会造成看文章点击目录很不方便,所以本站点设置了展开全部目录层级,这里需要新建一个自定义样式文件themes\next\source\css\_custom\custom.styl
,然后添加以下代码。
1 | //TOC目录默认全部展开 |
因为这里是第一次新建自定义样式文件,还需要做如下修改,在 themes\next\layout\_layout.swig 文件中引入刚才新建的文件
1 | ... |
另外如果文章不长,就没必要展示目录了,否则侧边文章目录栏空荡荡的也有点别扭。这里需要修改侧边栏的布局模板相关逻辑代码
1 | - {% set display_toc = is_post and theme.toc.enable %} |
2.3 修改文章 meta 信息
默认主题下, 标题下方会显示文章的创建时间、文章的修改时间、文章分类信息等元数据,用户可以在主题配置文件中自定义设置需要显示的 meta 元信息:
1 | post_meta: |
3 主题定制优化
3.1 修改博客字体
在 Google Fonts 上找到心仪的字体,然后在主题配置文件中为不同的应用场景配置字体:
1 |
|
3.2 为标签添加图标
默认情况下标签前缀是 #
字符,用户可以通过修改主题源码将标签的字符前缀改为图标前缀
1 | <footer class="post-footer"> |
Next 中使用 FontAwesome 作为图标库,用户可以在 FontAwesome 上找到心仪的图标来替换标签的字符前缀。
3.3 添加结束标记
在文末添加结束标记,效果如下:
新建布局模板文件 post-end-tag.swig,添加如下代码:
1 | <div> |
在文章布局模板中添加如下代码
1 | {#####################} |
在站点配置文件末尾添加如下代码
1 | post_end_tag: |
3.4 页面加载进度条
当网络不好的时候可能会在打开站点或跳转文章时出现短暂的白屏,此时如果能有加载进度提示将会提高用户操作体验。
在根目录下执行以下命令安装相关依赖:
1 | $ git clone https://github.com/theme-next/theme-next-pace themes/next/source/lib/pace |
在主题配置文件中设置 pace: true
。
默认提供了多种主题的进度条加载样式,有顶部提示的,有中间提示的,还有全页面遮挡提示的,默认进度条就非常合适。
3.5 侧边栏放左边
Next 主题的各种主题风格中只有 Pisces 和 Gemini 支持通过主题配置文件来将侧边栏置于左侧或右侧,而 Muse 和 Mist 则需要深度修改源码才能实现改变侧边栏位置。
在上文新建的自定义样式文件中添加如下代码
1 | .sidebar-toggle { |
修改动效脚本代码
1 | $(document) |
如此以来就可以将侧边栏放置在左边了,但当窗口宽度缩小到 991px 之后会出现样式错误:侧边栏收缩消失但是页面左侧仍留有空白间距,此时修改如下代码即可:
1 | body { |
4 添加个性特效
4.1 边缘摆动效果
个人一直认为,博客是给人阅读的,而添加一些花里胡哨的动态背景,实在有违博客初衷。可是过于朴素又失去了趣味性,故而加入了一个边缘摆动效果,个人觉得还有点小俏皮,效果如下。
但上文提到的博客中的教程有点小问题,添加的代码路径出错了,导致无法成功显示特效。个人亲测有用,修正如下。
首先下载脚本,置于 themes\next\source\js\ 目录下 ,然后将以下代码添加到 themes\next\layout\_layout.swig,原教程中是添加到 themes\next\layout_custom\custom.swig ,亲测无效。
1 | {# wobble窗口摆动特效 #} |
然后在自定义样式文件中添加一下样式,注意是在themes\next\source\css\_custom\custom.styl
文件中添加,这里的代码也与原教程中稍有不同。
1 | //窗口波动效果相关样式 |
主要是因为 Next.Muse 主题方案中 Header 和 Footer 是没有背景色的,所以需要添加背景色后才能看出边缘摆动效果。另外,实现边缘摆动效果所需的 z-index
属性可能会导致元素堆叠异常,需要添加以上样式来矫正。
最后在主题配置文件中添加以下代码
1 | # window woblle |
4.2 使用小猫咪回到顶部
就像本站一样,使用右侧的小猫咪来回到顶部,还蛮可爱的,建议添加。
原理就是将 back-to-top
按钮添加图片背景,然后添加CSS3
动效。这里用的图片素材就是一个小猫上吊的图片,点这里下载,然后放置到 source\images\ 目录下 。
然后在自定义样式文件中添加如下代码
1 | //自定义回到顶部样式 |
4.3 鼠标点击特效
鼠标点击特效常用的有礼花特效、爆照特效、浮出特效、浮出文字,礼花特效如下图所示,个人比较中意礼花特效,可以点击下方按钮下载相应脚本 并置于 themes\next\source\js\cursor\ 目录下
礼花特效 爆炸特效 浮出爱心 浮出文字然后在主题自定义布局文件照片那个添加如下代码
1 | {# 鼠标点击特效 #} |
若该文件不存在则新建后见步骤2.2。
然后在主题配置文件中添加以下代码
1 | # mouse click effect: fireworks | explosion | love | text |
4.4 打字特效
这里的特效是为评论输入文字时添加的特效,关于如何添加评论功能见步骤6.4。
点击这里 下载相应脚本,并置于 themes\next\source\js\ 目录下。
然后在主题自定义布局文件中添加以下代码
1 | {# 打字特效 #} |
如果 custom.swig 文件不存在则需要新建,然后见步骤2.2。最后在主题配置文件中添加以下代码
1 | # typing effect |
5 站点数据统计
5.1 站点访问量统计
使用不蒜子来实现, 由于不蒜子是基于域名来进行统计计算的,所以通过 localhost:4000 端口访问的时候统计数据 PV 和 UV 都会异常的大,属于正常现象。
在页脚布局模板文件首行添加如下代码:
1 | <script |
在主题配置文件中做如下修改
1 | busuanzi_count: |
可选:自定义统计文案,如本站所示,需要做如下修改
1 | {% if theme.busuanzi_count.total_visitors %} |
在自定义样式文件中添加如下样式
1 | //修改不蒜子数据颜色 |
然后修改表述文案
1 |
|
5.2 站点运行时间统计
效果如下:
在自定义布局文件中添加以下代码:
1 | {# 页脚站点运行时间统计 #} {% if theme.footer.ages.enable %} |
如果该文件不存在,则手动新建,见步骤2.2。
然后修改主题配置文件
1 | footer: |
然后补全对应文案
1 | footer: |
5.3 文章访问量统计
这里需要借助LeanCloud来提供后端数据服务。
在 LeanCloud 上注册账号并创建应用,应用名称可以为ForBlog
,然后在该应用中,新建一个名为 Counter 的 Class,ACL 权限设置为 无限制:
在 LeanCloud 中的 Class 可以理解为数据库中的数据表。Counter 用于存储记录文章访问量,记录是以 url 作为唯一依据的,所以根据默认的 permalink 组成结构,如果你更改了文章的发布日期和标题中的任意一个,都会造成文章阅读数值的清零重计。
在控制台的 设置 -> 应用 Key 中获取 App ID 和 App Key 填入到主题配置文件中:
1 | leancloud_visitors: |
站点上线后可以在 设置 -> 安全中心 中添加博客域名到 Web 安全域名中,设置后仅可在该域名下通过 JavaScript SDK 调用服务器资源,借以保护 LeanCloud 应用的数据安全。
如果想要自定义 PV 表述文案,可以修改文章布局模板中的相关代码:
1 | {# LeanCould PageView #} |
修改统计表述文案
1 | post: |
如遇到报错,在主题配置中设置security: false
。
5.4 站点及文章字数统计
目前由 hexo-symbols-count-time 提供的字数统计功能需要NexT主题的版本在v7.5或更高才能有效,否则会出现站点总字数比文章总字数更少的bug,留待有空的时候再解决吧。
6 部分功能扩展
6.1 搞怪网页标题
离开和进入页面时动态修改 Tab 标签中的标题。 效果如下
在主题自定义布局文件中添加以下代码
1 |
|
如果首次新建该文件的话,见步骤2.2。
然后在主题配置文件中添加以下代码
1 | # a trick on website title |
6.2 添加站内搜索
该功能由 hexo-generator-searchdb 提供 ,在根目录下执行以下命令
1 | npm install hexo-generator-searchdb --save |
在主题配置文件中修改相关字段:
1 | local_search: |
在站点配置文件中添加以下字段:
1 | search: |
在自定义样式文件中添加如下样式规则来增加搜索弹窗的页边距:
1 | //增加搜索弹窗的页边距 |
如果你同时在站点内启用了 wobblewindow 边缘摆动效果,则有可能会出现背景蒙版叠加在弹窗之前的问题,这种层级叠加异常的问题主要是因为 wobblewindow 中修改了弹窗父元素的 position
定位和 z-index
优先级,目前只能通过修改 localsearch 源码来修复该 Bug:
1 | $.ajax({ |
6.3 热门文章排行
该功能是基于 LeanCloud 提供的后端服务支持,原博客教程中的脚本在我这里有点问题没有效果,参考了别的博客的代码。
具体实现方案如下:
在站点目录下执行以下命令新建页面
1 | $ hexo new page top |
在主题配置文件中新增一项菜单入口:
1 | menu: |
在语言包中新增菜单中文:
1 | menu: |
然后在新增的排行榜页面内添加以下内容,注意要替换掉LeanCloud的appId、appKey和你的博客地址:
1 | --- |
6.4 添加评论功能
在此使用valine
,简洁美观,支持Markdown
语法。同样需要 LeanCloud 的 App ID 和 App Key。在主题的配置文件中修改如下。
1 | valine: |
6.5 文末版权声明
效果如图
在主题配置文件中开启文章底部的版权声明,版权声明默认使用 CC BY-NC-SA 4.0 许可协议,用户可以根据自身需要修改 licence
字段变更协议。
1 | post_copyright: |
默认版权声明中只有 本文作者、本文链接、版权声明 三项,如果你想添加更多内容,如 创建时间、修改时间、引用链接 等,需要修改版权声明的相关代码:
1 | <!-- JS库 clipboard 拷贝内容到粘贴板--> |
在版权样式文件中添加如下样式:
1 | background-color: transparent; |
补全版权信息文案
1 | post: |
在实际使用过程中,并非每篇文章都需要版权声明,如果转载了别人的文章,文末再出现个人版权声明就不太合适。此时可在 Front-Matter 中设定变量 copyright
用于控制是否显示版权信息。修改文章布局模板中相关代码,使得只有当主题配置文件中 post_copyright.enable
字段和 page.copyright
字段同时为 true
时才会插入版权声明:
1 | - {% if theme.post_copyright.enable and not is_index %} |
为了批量为每篇新文章设定该变量并赋默认值,可以修改草稿模板内容,这样以来每篇草稿发布为正文后都会默认显示底部版权信息:
1 | title: {{ title }} |
或者在每次发布文章时,设定该变量。
6.6 添加打赏功能
启用主题配置文件中的打赏相关字段,并将个人收款码图片置于 themes\next\source\images\ 目录下,注意保持图片命名与配置文件中一致:
1 | reward_comment: |
关闭悬停收款码上的文字抖动效果,可以在自定义样式文件中添加以下代码:
1 | //关闭打赏收款码的文字抖动效果 |
注意原博客中,添加reward
字段来控制 是否在本文章中添加打赏信息,然后修改文章布局模板中相关的判定条件将会导致网站首页变成归档,生成静态文件也会报错,故而在此没有采用。
6.7 添加图片灯箱
添加灯箱功能,实现点击图片后放大聚焦图片,并支持幻灯片播放、全屏播放、缩略图、快速分享到社交媒体等,该功能由 fancyBox 提供,效果如下
在根目录下执行以下命令安装相关依赖:
1 | git clone https://github.com/theme-next/theme-next-fancybox3 themes/next/source/lib/fancybox |
在主题配置文件中设置 fancybox: true
即可。
6.8 相关文章推荐
该功能由 hexo-related-popular-posts 插件提供,会在文末出现本站相关的博客。
在站点根目录中执行以下命令安装依赖:
1 | npm install hexo-related-popular-posts --save |
在主题配置文件中开启相关文章推荐功能:
1 | related_posts: |
此时会在每篇文章结尾根据标签相关性和内容相关性来推荐相关文章。
6.9 文章评分功能
Next 主题中已经集成了 widgetpack 的星级评分系统,用户无须再安装或引入插件脚本,只需在 widgetpack 中注册账号并修改主题配置即可,应用效果如下:
(刚刚还给自己打了个2分。。。。。。)
在 widgetpack 中注册账号(这个网站经常注册没反应,应该是网络差或者墙的问题,过段时间多试几次就好了),根据引导填写应用名称和域名创建应用,创建后可在页面左上角看到应用 id。
在主题配置文件中开启评分功能,填写应用 id,并设置评分颜色:
1 | # Star rating support to each article. |
在控制台中点击左上角展开菜单,在 Rating -> Setting 中将 Vote via 选项改为 Device(cookie) 以开启匿名评分,该选项将基于设备认证访问者身份,如果不开启这个选项,那么就需要登录 facebook、twitter 等墙外的社交软件 才能评分,在国内就没啥用了。
7 提交网址&&购买域名
7.1 向搜索引擎提交网址
这里主要是向谷歌、百度提交网址,以使得可以在搜索引擎中搜到本博客网站的内容。
在站点根目录下执行以下命令安装相关依赖并重新生成静态文件:
1 | $ npm install hexo-generator-sitemap --save-dev |
此时即可在 public 目录下找到 sitemap.xml 和 baidusitemap.xml 两个文件,将该文件提交到搜索引擎站长后台即可帮助搜索引擎分析收录站点内容,各个搜索引擎收录效率不同,可能需要耐心等上几天。
在 Google Search Console 中提交站点域名,此时会提供几种验证网站所有权的方法,建议使用HTML文件验证方法,非常简单,把给的HTML文件下载下来保存到根目录下source文件夹下,然后hexo g && hexo d
返回终端点击验证即可。
注意这个HTML文件之后也不能删除。然后等一天左右就可以了。
7.2 购买域名
购买域名建议去阿里云或者腾讯云,貌似一些域名腾讯云会比阿里云便宜1块钱。至于后缀是选择.com
还是别的看个人喜好就行,理论上不影响站点网速。价格上当然.com
最贵啦,然后一般网址越短越贵,也越容易已经被人注册过了,已经被人注册了的域名需要回购,而阿里云的代理回购价格是2000起步。。。所以尽量选没人注册的域名吧。
根据网站提示,购买完以后根据相应的网站的提示进行操作和配置就可以了,绑定域名的方法选择CNAME
,然后在根目录下的source文件夹中新建一个名为CNAME
的文件,文件内容为你购买的域名。然后
1 | hexo g && hexo d |
基本过一小会就可以通过你购买的域名来访问自己的博客了。