前一段时间将博客迁移到了Hexo,并切换了icarus主题,并花了一些时间修改,于是写篇博客记录一下中途遇到的问题。
一、前言
Hexo有很多主题,看了很多主题,像占比最高的Next,但是个人不是很喜欢那个风格,总觉得两栏不是那么好看。
找了不少,最终看到了icarus,感觉很简洁、很清爽。三栏的设计,整体白色的基调,看着很舒服。
但是刚切换过来发现很多地方还可以再改改,于是也折腾了一段时间,因为上班比较忙,加上对node不怎么熟,中途也遇到了不少坑。
在这里得感谢i蝸居年華_谢谢谢,因为icarus比较小众,网上的教程也不多,基本是参考他的博文修改的。
自己修改完成后也要做个记录,也可以给别人以参考。
二、改动记录
1、配置文件_config.yml
配置文件整体请参考官方文档,非常全,基本什么都有。
2、网站左上角logo
之前大学在实验室的时候让美工帮忙设计过一个logo,但是现在看着已经不喜欢那样的风格了,于是也去阿里矢量库找了不少小图像然后给我女朋友看,选出来一个两个人都觉得萌萌哒小考拉,加上汉字,就看起来很像logo啦。
源码中改动如下:
- themes/hexo-theme-icarus/layout/common/navbar.ejs
1
2
3第8行
<img src="<%- url_for(logo) %>" alt="<%= title %>" height="36">
<span style="font-size:16px;display:inline-block;vertical-align:top;font-weight:600">旺阳</span>
3、个人信息表的social_links
之前给女朋友搭过一个网站,于是也想加在social_links里面,配置文件中使用的是fontawesome。我想找一个心形,heart-o或者heart都可以。但是试了试显示不出来。后面受到启发,直接不使用这个图标字体库了,改为img格式,引入图片。
配置文件改动如下:
1 | social_links: |
源码中改动如下:
- themes/icarus/layout/widget/profile.ejs
1
2第88行
<img src="<%= link.icon %>" style="height: 20px;width: 20px;"></img>
4、文章页配置
1、文章添加摘要
在文章的摘要后添加标签,之前的文本就会显示成摘要啦,后面出现阅读更多按钮。
2、文章发表时间修改
如果文章发布时间较早,那么默认会显示一年前两年前等,看着不是很美观,于是全部修改为发表的年月日。
源码中改动如下:
- themes/icarus/layout/common/article.ejs
1
2第14行
<span class="level-item has-text-grey">写于<%= date(post.date) %></span>
3、添加版权声明
源码中改动如下:
- themes/icarus/layout/common/article.ejs
1
2
3
4
5
6
7
8
9
10
11
12第51行添加
<% if (!index) { %>
<div>
<ul class="post-copyright">
<li><strong>本文标题:</strong><a href="<%- url_for(post.link ? post.link : post.path) %>"><%= post.title %></a></li>
<li><strong>本文作者:</strong><a href="https://xiefayang.com">旺阳</a></li>
<li><strong>本文链接:</strong><a href="<%- url_for(post.link ? post.link : post.path) %>">https://www.lqwang.net/<%- post.path %></a></li> <!-- 这里替换成你自己的网址-->
<li><strong>发布时间:</strong><%= date(post.date) %></li>
<li><strong>版权声明:</strong>本博客所有文章除特别声明外,均采用 <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh" rel="external nofollow" target="_blank">CC BY-NC-SA 4.0</a> 许可协议。转载请注明出处!</li>
</ul>
</div><br>
<% } %>
4、添加分享工具
配置文件改动
1 | share: |
主题里有很多种的分享配置,详情可以看官方文档。
5、添加图片默认主图
在写文章的时候在顶部添加 thumbnail:图片路径 即可。
我觉得麻烦于是直接替换了默认的图片。
- themes/icarus/source/images/thumbnail.svg
5、添加评论系统
之前的WordPress用的是内置评论系统,现在主题里支持很多第三方的评论系统。我采用的是valine,具体配置详见官方文档。
6、目录添加粘性布局
文章页面主要想显示文章的主要内容,所以想在文章页里一直显示目录,这样阅读体验会更好。具体的改动如下:
- themes/icarus/layout/widget/toc.ejs
1
2第26行添加一个样式即可
style="position: sticky;position: -webkit-sticky;top: 0"
7、目录修改为不显示默认序号
主题的目录是自动添加序号的,但是我在写文章的时候更习惯自己添加好目录序号,所以需要去掉默认的序号。具体改动如下:
- themes/icarus/layout/widget/toc.ejs
1
2删除第6行代码即可
<span class="has-mr-6">${toc.index}</span>
8、文章页三栏变两栏
主题默认是三列排列,第一列是个人信息,第二列是文章的简介或者内容,第三列是标签云等组件。在首页的时候阅读体验也很好,但是在文章页面查看全文的时候就感觉文章内容显示有些太少。
于是打算在文章页面隐藏掉右边的侧边栏。这个在可能是我搜索的关键词不对,没有找到教程,于是就打算自己来😂。
首先找到了控制侧边栏的代码文件在
- themes/icarus/layout/layout.ejs
三栏分别为:
- <%- _partial(‘common/widget’, { position: ‘left’ }) %> 左
- <div class=”column <%= main_column_class() %> has-order-2 column-main”><%- body %></div> 中
- <%- _partial(‘common/widget’, { position: ‘right’ }) %> 右
那能不能逻辑改为只有主页才显示右边侧栏呢?
修改逻辑如下:
1 | <%- _partial('common/widget', { position: 'left' }) %> |
只有在主页,才显示右边栏。OK。
那只需要判断一下,如果不是主页,那么中间栏宽度为80%就好了吧。修改逻辑如下:
1 | <% if (page.path === 'index.html') { %> |
OK啦!
结果在手机打开博客发现有问题。因为手机默认是隐藏掉左右的侧栏的,只保留中间文章内容,宽度为100%,但是我的内容设置为80%了,就显示的有问题。那么说明我们不能粗暴的把中间栏的宽度设置为80%,还需要改。
那么判断一下,如果是不是手机模式再修改宽度?否则不变?理论上是可以的,但是对ejs不太熟,网上找到的通过js判断是否是前端页面的方法贴进来失效,我还咨询了一下实验室下一届前端大哥,他也没怎么用过ejs,最后只能放弃这个方法了😂。
那我通过调试模式,发现icarus采用的是响应式布局,我能不能通过css来判断是不是手机模式,然后来修改中间框的大小呢?
修改逻辑如下:
1 | <% if (page.path === 'index.html') { %> |
如果不是主页则添加一个class twoLine,然后css修改如下:
- themes/icarus/source/css/style.styl
1 | @media screen and (min-width: screen-widescreen) |
屏幕宽度大于 screen-widescreen = 1280px,那么使用这些样式,也可以理解为使用这些样式的最小宽度为1280px。我们的逻辑为如果不是主页,就添加一个class,但是只有宽度在>=1280px的时候才把宽度设置为80%,完美解决在电脑版三栏变两栏的问题~
9、添加网站访客统计
主题是默认支持BuSuanZi,只需要在配置文件中把busuanzi 改为true即可。
在本机通过http://localhost/访问会发现访客数很大,我百度后说是发布到服务器上就好了。确实是。
初步感觉应该是按照IP为维度来分的,大家本机访问域名都是localhost,所以访客数不断累积。放到自己服务器就重新计算了。
10、页面添加图片
之前的WordPress是内置了资源管理系统的,hexo是没有的。是可以使用图库,然后博客外链图库的功能,比如七牛云、阿里云、腾讯云等等。但是比较麻烦,七牛云是有免费的空间,个人使用够了,但是阿里云、腾讯云是收费的。如果想本地负责图片直接上传是需要搭配其他插件使用的,我是觉得有点太麻烦了。
搜索了一下,hexo是有资源库的插件的。具体操作如下:
- 配置文件中post_asset_folder设置为true
- 到博客的根目录下执行 npm install https://github.com/CodeFalling/hexo-asset-image –save 命令来进行插件的安装
- 在使用hexo n “测试”的命令后,_posts下就会生成 测试.md和测试文件夹,在文章中使用测试/XXX.png就可以引用本地文件了
在hexo g打包的时候,插件会自动更新文章内引用的地址,还是很方便的。
11、修改文章访问路径
默认的访问路径是permalink: :year/:month/:day/:title/,在配置文件的18行。看着有点臃肿而且不美观,于是我改为permalink: :id.html。
文章markdown文件中添加id: 1,文章的访问路径就为XXX.1.html了。看着舒服了很多。
但是也会遇到一个问题,就是图片脚本的自动替换路径会有问题。具体的问题我记得当时研究了一会。好像是替换的文件夹路径为1.htm/,但是正确的路径应该为1/。
- node_modules/hexo-asset-image/index.js
1
257行 添加一行代码即可
link=link.replace(".htm","");
12、页面底部样式优化
我在页面底部添加了备案号,然后把logo也修改为顶部的图标+汉字的样子。同时去掉了busuanzi的访问量数据,只保留了访客数据。并把样式进行了优化,具体改动代码就不放出来了,自己按照喜好修改吧~
- themes/icarus/layout/common/footer.ejs
三、总结
折腾之前其实有点迷的,不知道怎么下手,nodejs不太懂。但是真的上手去改以后感觉其实都一样。没有什么太大的区别,技术都是想通的,ejs跟js还有styl跟css其实本质是一样的。
折腾好之后看着是舒服多啦哈哈。在修改的过程中参考了很多的文章,所以自己修改完后也做个记录。可以给其他人以参考,有问题可以邮件联系我。