基于Hexo+Next的主题优化总结&踩过的坑

初始配置

Next主题的一般性配置,参考NexT 使用文档。其“开始使用”、“主题配置”、"第三方服务"这三个版块的内容,基本上涵盖了所有必要的元素。

附加功能

添加文章版权声明

打开主题配置文件(/themes/next/_config.yml),找到creative_commons标签,将post属性值改为true

creative_commons:
  license: by-nc-sa
  sidebar: false
  post: true
  language:

配置完后,重启服务 ,效果如图:

添加“阅读全文”按钮

设置首页文章以摘要形式显示,打开主题配置文件(/themes/next/_config.yml),找到auto_excerpt标签,进行如下修改:

auto_excerpt:
  enable: true
  length: 150

其中length代表显示摘要的截取字符长度。

设置favicon图标

  • 选择一个favicon制作网站完成制作,例如:比特虫 ,制作一个16*16和一个32*32的;
  • 两个不同尺寸大小的文件,重命名为favicon-16x16-next.png和favicon-32x32-next.png;
  • 将重命名的两个图片文件放到博客目录下的themes/next/source/images中(覆盖原来的两个默认的)

重启服务,效果如图:

添加文章阅读量统计&评论功能

参考Hexo博客Next主题添加统计文章阅读量功能配置LeanCloud端。
设置valine评论框,打开主题配置文件(/themes/next/_config.yml),找到valine标签,进行如下修改:

valine:
  enable: true # When enable is set to be true, leancloud_visitors is recommended to be closed for the re-initialization problem within different leancloud adk version.
  appid:  # your leancloud application appid
  appkey: # your leancloud application appkey
  notify: false # mail notifier, See: https://github.com/xCss/Valine/wiki
  verify: false # Verification code
  placeholder: ヾノ≧∀≦)o来啊,快活啊!  # comment box placeholder
  avatar: mm # gravatar style
  guest_info: nick,mail,link # custom comment header
  pageSize: 10 # pagination size
  language: # language, available values: en, zh-cn
  visitor: true # leancloud-counter-security is not supported for now. When visitor is set to be true, appid and appkey are recommended to be the same as leancloud_visitors' for counter compatibility. Article reading statistic https://valine.js.org/visitor.html
  comment_count: true # if false, comment count will only be displayed in post page, not in home page

其中appidappkey属性填入LeanCloud应用的app-id与app-key。visitor选项若设置为true,则leancloud_visitors标签可以不用配置。
另外建议将自带的CDN改成第三方CDN,提高加载速度。
文件目录:next/layout/_third-party/comments/valine.swig,将//unpkg.com/valine/dist/Valine.min.js改为//cdn.jsdelivr.net/npm/valine/dist/Valine.min.js,还可以去该网址下载js文件,valine.swig中的地址可指向本地。

设置valine评论区头像

注册gravatar账号,上传头像,实现邮箱账号和头像的映射关系。
若收不到确认邮件,并且在垃圾箱也未找到的话,有可能是直接被拦截,QQ邮箱查看被拦截邮件以及添加到白名单的方法为:QQ邮箱-->右键,收信查询-->查看被系统拦截的邮件-->添加到白名单。
注意头像生效所花的时间可能比较长,属于正常情况。

取消分类、标签等页面的评论框

如果有集成评论服务,每个页面都会带有评论。 若需要关闭的话,添加字段 comments 并将值设置为 false,禁用评论示例如下:

title: 标签
date: 2014-12-22 12:39:04
type: "tags"
comments: false

添加字数统计与阅读时长

(1)打开博客目录,运行git bush,安装插件

$ npm install hexo-symbols-count-time --save

(2)修改博客配置文件,添加以下代码

symbols_count_time:
  symbols: true
  time: true
  total_symbols: true
  total_time: true

(3)修改主题配置文件,找到标签symbols_count_time,进行如下修改

symbols_count_time:
  separated_meta: true
  item_text_post: true
  item_text_total: true
  awl: 4
  wpm: 275

(4)重启服务

添加网站访问量

利用busuanzi统计访问量,打开主题配置文件/theme/next/_config.yml,进行如下修改,便可以看到页脚出现访问量:

busuanzi_count:
  enable: true
  total_visitors: true
  total_visitors_icon: user
  total_views: true
  total_views_icon: eye
  post_views: false
  post_views_icon: eye

busuanzi与valine都具有统计阅读次数的功能,若把标签valine下的visitor属性设置为true的话,这里的post_views参数值应修改为false

修改文章底部带#号的标签

将 # 换成标签图标。
[NexT 7.1.0 Released]修改方法为:
打开模板/themes/next/layout/_macro/post.swig,搜索 rel="tag",进行如下修改:

<div class="post-tags">
          {% for tag in post.tags %}
            <a href="{{ url_for(tag.path) }}" rel="tag"><i class="fa fa-tag"></i> {{ tag.name }}</a>
          {% endfor %}
</div>

[NexT 7.2.0 Released]修改方法为:
修改主题配置文件,找到标签tag_icon,进行如下修改:

# Use icon instead of the symblo # to indicate the tag at the bottom of the post
tag_icon: true

定制化css样式

若想自己设置css样式,可添加在/theme/next/source/css/_custom/custom.styl下,如:

// Custom styles.
ul{
    margin-top: -15px;
    margin-bottom: 10px;
}
ol{
    margin-top: -5px;
}
figure.highlight.java{
    margin-top: -15px;
    margin-bottom: 10px;
}
table{
    margin-bottom: 10px;
}

设置文章英文链接

hexo生成的默认文章链接格式为: :year/:month/:day/:title/,这种默认的配置缺点很明显,当文件名是中文的时候url链接里就有中文出现。
可以通过添加urlname字段实现文章的链接为英文,在md文件的Front-matter区域新增urlname属性,值为文章的英文title,参考如下:

---
title: 基于Hexo+Next的主题优化总结
urlname: summary-of-theme-optimization-based-on-hexo&next
date: 2019-07-12 20:01:26
categories:
  - 工具
tags: 
  - Hexo
---

再将博客配置文件下的permalink值改为:

permalink: :year/:month/:day/:urlname/

设置首页背景图片

/theme/next/source/css/_custom/custom.styl中添加如下代码:

// 添加背景图片
body {
  background: url(https://source.unsplash.com/random/1600x900?wallpapers);
  background-size: cover;
  background-repeat: no-repeat;
  background-attachment: fixed;
  background-position: 50% 50%;
}

// 修改内容区域的透明度
.main-inner {
  background: #fff;
  opacity: 0.8;
}

// 修改菜单栏透明度
.header-inner {
  opacity: 0.8;
}

其中background的url也可写成本地的路径,如background: url(/images/background.jpg);

修改内容区域的宽度

NexT 对于内容的宽度的设定如下:

  • 700px,当屏幕宽度 < 1600px
  • 900px,当屏幕宽度 >= 1600px
  • 移动设备下,宽度自适应

如果你需要修改内容的宽度,同样需要编辑样式文件。 编辑主题的 source/css/_variables/custom.styl 文件,新增变量:

// 修改成你期望的宽度
$content-desktop = 700px

// 当视窗超过 1600px 后的宽度
$content-desktop-large = 900px

此方法不适用于 Pisces Scheme,关于如何修改 Pisces Scheme 的宽度请参看 这个 Issue

ps:我按照这个方法修改...是没有成功的...是在base.styl中修改才成功...

md文档相关

实现文章多级分类

在文章的categories字段中,写入多个类别,示例如下:

categories:
  - 工具
  - hexo

“工具”为“hexo”的上一级。

在Markdown中合并单元格

Markdown语法本身不包含复杂表格的插入,但是可以使用html语法来实现。

  • 水平单元格的合并:基于colspan属性,即使一个单元格占多列的空间
  • 纵向单元格的合并:基于rowspan属性,即使一个单元格占多行的空间

先在word或excel中把表格做好,然后复制到No-Cruft Excel to HTML Table Converter转化为标记对形式,最后删除空标记对,并设置colspan和rowspan属性即可。
如下所示:

<table>
   <tr>
      <td colspan="6"><b>用于定义数据类型的关键字</b></td>
   </tr>
   <tr>
      <td>class</td>
      <td>interface</td>
      <td>byte</td>
      <td>short</td>
      <td>int</td>
      <td>long</td>
   </tr>
</table>

注意,通过html插入表格,可能浏览器页面中会出现过多空白的情况,解决方法是在表格前加上{% raw %},表格后加上{% endraw %}
其实通过Html语言可以使页面显示出很多Markdown语法不支持的功能。
如使字体为红色:

<font color="#FF0000">XXX</font>

使字体高亮:

<span style="background-color:#FFF000">XXX</span>

Markdown转义字符

md中用到的主要可能有语法意义的非空白符号有:\ ` * _ { } [ ] ( ) # + - . !
在正常段落中要原样输出以上符号,一般需要加反斜杠\在前(连续两个反斜杠输出一个反斜杠。)

Markdown首行缩进

在段落开头,输入以下字符,然后紧跟着输入文本即可。

&#160; &#160; &#160; &#160;

自定义阅读全文

在文章任意想添加的位置添加以下代码即可。

<!--more-->

取消“文章目录”对标题的自动编号

修改主题配置文件,找到标签toc,进行如下修改:

toc:
  enable: true
  # Automatically add list number to toc.
  number: false
  # If true, all words will placed on next lines if header width longer then sidebar width.
  wrap: false
  # If true, all level of TOC in a post will be displayed, rather than the activated part of it.
  expand_all: false
  # Maximum heading depth of generated toc. You can set it in one post through `toc_max_depth` in Front-matter.
  max_depth: 6

踩过的坑

接下来是在配置过程中遇到的问题:

修改不了博客配置文件中的author名

原因:从github上clone的Next主题最新版,不稳定,改为了release版。

执行hexo clean命令报错

报错:FATAL can not read a block mapping entry
原因:配置文件中少写了空格,每一个配置项都是<font color="#FF0000">名称+冒号+空格+设置参数</font>组合而成(血的教训...千万注意

社交链接图标中知乎的font awesome图标无法获取

原因:NexT不同版本对应着不同版本的font awesome,下载的NexT版本中所对应的font awesome版本可能没有知乎图标)。

版权声明中本文链接显示错误

链接显示为:http://yoursite.com/2019/03/14/Blog-test/
原因:未修改博客配置文件/ _config.yml中的url,需要修改为域名。

执行hexo g报错

生成文章的时候,报错:

FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html
Template render error: (unknown path) [Line 31, Column 21]
expected variable end

原因:当文章中有}}时,且这两个括号未被代码块包含,解析会出问题
解决方法:

{% raw %}
 含有双大括号的内容
{% endraw %}

主题升级

用Beyond Compare工具将官方的上个版本与自己配置过的主题比较,查看更改的内容,以免遗漏。

待解决

1、由[NexT 7.1.0 Released]升级为[NexT 7.2.0 Released]后每篇文章的本文字数未统计到。
2、图片点击放大效果
3、相关文章功能,参考https://zuiyu1818.cn/posts/NexT_codewidth.html
4、歌单页面,参考https://www.zhangshenghai.com/playlist/

参考资料

1、为 Hexo 主题 next 添加图片背景
2、Next常见问题

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

推荐阅读更多精彩内容