博客魔改教程总结(五)
魔改前必看(我当你们都懂了,太细节的就不写在教程中了🤣🤣🤣)
- 博客魔改有风险,如果博客魔改出问题了又没有备份,可通过此项目查看基础源码进行 回滚: jerryc127/hexo-theme-butterfly、 ccknbc-actions/blog-butterfly。
- 这部分魔改基本上都是大佬们造好的轮子,我按照大佬们的轮子结合自己的喜好进行魔改的,具体见我友人帐第一个栏目大佬们的网站,本处仅做一个总结,如有侵权请联系删除。
- 鉴于每个人的根目录名称都不一样,本帖 博客根目录 一律以
[BlogRoot]
指代。 - 本帖涉及魔改源码的内容,会使用 diff代码块 标识,复制时请 不要忘记删除 前面的
+、-
符号。 - 因为
.pug
和.styl
以及.yml
等对缩进要求较为严格,请尽量 不要使用记事本等无法提供语法高亮的文本编辑器 进行修改。 - 本帖基于
Butterfly主题
进行魔改方案编写,因此请读者优先掌握 Butterfly主题官方文档 的内容后再来进行魔改。 - 魔改会过程常常引入 自定义的css与js文件,方法见 Hexo博客添加自定义css和js文件(太懒了不想自己写)
网站恶搞标题
点击查看教程
效果预览
- 新建文件
[BlogRoot]\source\js\title.js
,写入以下内容:
1 | //动态标题 |
- 在主题配置文件
_config.butterfly.yml
引入该文件:
1 | inject: |
- 重启项目:
1 | hexo cl; hexo s |
导航栏魔改增强版(LYX)
点击查看教程
PS:修复了滚动后显示标题不居中的问题
效果预览
- 重构导航栏:修改
[blogRoot]\themes\Butterfly\layout\includes\header\nav.pug
,替换成下面的代码,其中图标啥的自己改一下:
1 | nav#nav |
- 标题增强:在
custom.css
加入如下代码,其中var(--theme-color)
替换成你自己的主题色:
1 | /* 标题增强 */ |
- 顶栏常驻:在
custom.css
加入如下代码:
1 | .nav-fixed #nav{ |
- 显示标题:新建
[BlogRoot]\source\js\nav.js
,并写入如下代码:
1 | document.addEventListener('pjax:complete', tonav); |
然后还要在 custom.css
添加以下css,其中 --theme-color
换为你自己的主题色:
1 | /* 导航栏显示标题 */ |
- 重启项目:
1 | hexo cl; hexo s |
配置文件CDN替换
点击查看教程
主题默认的CDN有:local、cdnjs、jsdelivr、unpkg等,但是速度偶读比较一般,要想提高部分标准静态资源的响应速度,走CDN是最好的办法,最好是在国内的CDN。
参考教程:
修改教程,我分享一下我目前在用的方案:
修改主题配置文件 _config.butterfly.yml
的 CDN
配置项:
1 | # CDN |
修改完成后可以 f12
-> 源代码
-> 网页
看看是否已经加载到对应的资源
右边滚动栏样式
点击查看教程
效果预览
- 在
custom.css
中加入以下代码,其中var(--theme-color)
换成你自己的主题色:
1 | /* 滚动条样式 */ |
哔哔部署
点击查看教程
参考教程:
效果预览
你可以完全按照leonus的来,但是我没有在首页加上轮播的哔哔条,仅仅在哔哔页有,在其基础上又自己加了一些样式,都是些前端的东西,替换掉原来的 bb.js
1 | let svg = '<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" class="is-badge"><path d="m512 268c0 17.9-4.3 34.5-12.9 49.7s-20.1 27.1-34.6 35.4c.4 2.7.6 6.9.6 12.6 0 27.1-9.1 50.1-27.1 69.1-18.1 19.1-39.9 28.6-65.4 28.6-11.4 0-22.3-2.1-32.6-6.3-8 16.4-19.5 29.6-34.6 39.7-15 10.2-31.5 15.2-49.4 15.2-18.3 0-34.9-4.9-49.7-14.9-14.9-9.9-26.3-23.2-34.3-40-10.3 4.2-21.1 6.3-32.6 6.3-25.5 0-47.4-9.5-65.7-28.6-18.3-19-27.4-42.1-27.4-69.1 0-3 .4-7.2 1.1-12.6-14.5-8.4-26-20.2-34.6-35.4-8.5-15.2-12.8-31.8-12.8-49.7 0-19 4.8-36.5 14.3-52.3s22.3-27.5 38.3-35.1c-4.2-11.4-6.3-22.9-6.3-34.3 0-27 9.1-50.1 27.4-69.1s40.2-28.6 65.7-28.6c11.4 0 22.3 2.1 32.6 6.3 8-16.4 19.5-29.6 34.6-39.7 15-10.1 31.5-15.2 49.4-15.2s34.4 5.1 49.4 15.1c15 10.1 26.6 23.3 34.6 39.7 10.3-4.2 21.1-6.3 32.6-6.3 25.5 0 47.3 9.5 65.4 28.6s27.1 42.1 27.1 69.1c0 12.6-1.9 24-5.7 34.3 16 7.6 28.8 19.3 38.3 35.1 9.5 15.9 14.3 33.4 14.3 52.4zm-266.9 77.1 105.7-158.3c2.7-4.2 3.5-8.8 2.6-13.7-1-4.9-3.5-8.8-7.7-11.4-4.2-2.7-8.8-3.6-13.7-2.9-5 .8-9 3.2-12 7.4l-93.1 140-42.9-42.8c-3.8-3.8-8.2-5.6-13.1-5.4-5 .2-9.3 2-13.1 5.4-3.4 3.4-5.1 7.7-5.1 12.9 0 5.1 1.7 9.4 5.1 12.9l58.9 58.9 2.9 2.3c3.4 2.3 6.9 3.4 10.3 3.4 6.7-.1 11.8-2.9 15.2-8.7z" fill="#1da1f2"></path></svg>' |
然后直接在bb页面的md文件写上如下的样式:
1 | <style> |
朋友圈配置
点击查看教程
参考教程: 友链朋友圈
效果预览
后端部署都是固定的了,请看上面的参考教程。前端部署我比较喜欢Heo的样式,见 友链朋友圈5 - 我的部署历程与主题样式分享
在Heo样式的基础上,重新换了一些CDN以及一些细节微调,看完Heo的教程并配置好前端后,可以将 fcircle.md
文件的内容覆写为以下形式,记住填上你的 API
以及 error_img
:
1 | <style> |
雪花飘落特效
点击查看教程
逛别人的博客看见有款雪花特效挺不错的,和我的冬日主题很搭配,于是就f12过来了。
效果预览
- 新建
[BlogRoot]\source\js\snow.js
,并写入以下代码,其中雪花的参数是可以自行调节的:
1 | if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) { |
- 在自定义css文件
custom.css
写入如下代码,我这里设置只在白天模式显示,你可以自行设置,这里比较简单,本质就是调节画布的显示参数:
1 | /* 雪花特效 */ |
- 引入画布元素:在主题配置文件
_config.butterfly.yml
文件的引入js文件和一个canvas
画布:
1 | inject: |
- 重启项目即可看到效果,注意:我的设置只在白天模式显示:
1 | hexo cl; hexo s |
导航栏和风天气
点击查看教程
详见: Hexo在顶部增加天气小部件
效果预览
- 在 和风天气插件 中创建一个模板,点击生成代码:
- 创建文件
[BlogRoot]\source\js\weather.js
,将生成的代码写入,例如:
1 | WIDGET = { |
- 在主题配置文件
_config.butterfly.yml
的inject
的bottom
处引入:
1 | inject: |
- 接下来要挂载到导航栏:在
[BlogRoot]\themes\butterfly\layout\includes\header\nav.pug
中加入一个元素,这个元素就是用来放天气组件的:
1 | nav#nav |
- 上述操作可以将天气组件成功展示在导航栏中间,如果想要调整该组件位置到
blog_name旁
,可以直接修改weather.js
中的padding
项(不推荐),当然推荐在nav.pug
中添加一个占位组件:
1 | nav#nav |
- 然后在
[BlogRoot]\themes\butterfly\source\css\_layout\head.styl
中将#blog_name
替换为#none_space
:
1 | - #blog_name |
- 重启项目即可看到效果:
1 | hexo cl; hexo s |
侧边栏新年倒计时(Leonus)
点击查看教程
参考教程: Leonus:博客新年倒计时卡片
效果预览
- 添加侧边栏:新建文件
[BlogRoot]\source\_data\widget.yml
,建议查看butterfly官方文档: 自定义侧边栏
1 | # top: 创建的 widget 会出现在非 sticky 区域(即所有页面都会显示) |
- 在
custom.css
中添加如下代码:
1 | /* 新年侧边栏 */ |
- 新建文件
[BlogRoot]\source\js\newYear.js
,并写入如下代码,注意最后的Pjax适配,如果没开Pjax直接是newYear()
即可,如果是开启了Pjax就用我的即可:
1 | let newYearTimer = null; |
- 引入依赖:在主题配置文件
_config.butterfly.yml
中添加如下代码:
1 | inject: |
- 重启项目:
1 | hexo cl; hexo s |
Twikoo评论系统部署(Vercel方式)
点击查看教程
Twikoo自定义表情与适配
点击查看教程
该教程需要你配置完Twikoo评论系统并能进管理界面!
效果预览
- 输入暗号进入评论系统管理界面
选择
配置管理
->插件
->EMOTION_CDN
,这里就是填自定义表情的json文件,我们看到json文件的结构是一个花括号然后中间填入多组表情数据,我们只需要将中间的的改成我们的表情数据即可:进入 Github:Twikoo-Magic 或者 小康表情速查,按照下图的方法即可获取对应表情的json信息,要复制的信息我已经标记出来,这些就相当于步骤2中的红框信息,替换或者增添上你们喜欢的表情信息即可:
然后将改完的json命名为
owo.json
(最好是这个名字),然后托管到静态部署网站,例如对象存储或者Cloudflare这种托管,把对应的文件链接写到EMOTION_CDN
,保存后刷新页面即可看到新的表情!如果你不想麻烦或者直接用我的可不可以?当然可以!这里直接贴出我的CDN:
https://source.fomal.cc/json/owo.json
,写到EMOTION_CDN
即可,到这里就有了表情了,为了让表情显示更加好看,我还做了大小和响应式布局的优化,在custom.css
中写入以下代码(注意:该代码仅适用于我的表情数据,你的表情不一定适用!):
1 | /* twikoo评论美化 */ |
- 重启项目即可看到效果
1 | hexo cl; hexo s |
Twikoo邮件回复模板(绿野仙踪款)
点击查看教程
参考教程: Guole:自定义 Twikoo 访客通知邮件模板
我的邮件模板是基于Guole大佬的模板改的,一些细节改成自己喜欢的样子了
当然你还可以参考Heo的回复模板,也挺好看的: HEO:Twikoo评论回复邮件模板:Acrylic Mail 粉
该模板的使用基于你已经完成Twikoo评论邮件通知!如果还不知道怎么配置邮件通知,参考这篇文章: CSDN:部署Twikoo评论系统及其邮件推送(Vercel)
效果预览
- 进入Twikoo评论系统的管理界面,
配置管理
->邮件通知
->MAIL_SUBJECT_ADMIN
和MAIL_TEMPLATE_ADMIN
,这两个分别是通知博主和通知访客的模板: - 然后替换成以下代码即可:
1 | <div> |
1 | <div> |
这两段代码分别填入步骤1的两个红框当中,一个是站长回复别人评论时别人看到的,另一个是网站有评论通知站长的,里面的信息和样式可以根据自己的实际情况微调,改完了之后可以在这里 HTML代码压缩工具 进行压缩,然后再复制进去步骤1的两个红框里,保存即可生效!
- 自定义字段见下表,在生成实际回复邮件时会替换成对应的值:
参数 | 含义 |
---|---|
${SITE_URL} | 网站链接 |
${SITE_NAME} | 网站名字 |
${PARENT_NICK} | 被回复人昵称 |
${PARENT_COMMENT} | 被回复人的评论内容 |
${NICK} | 回复人昵称 |
${COMMENT} | 回复人评论内容 |
${POST_URL} | 文章链接 |
${IMG} | 回复人头像 |
${PARENT_IMG} | 被回复人头像 |
${MAIL} | 回复人邮件 |
${MAIL} | 回复人 IP 地址 |
- 到这步就基本完成了,现在随便用另一个邮箱发表评论测试一下,看看模板是否能正常工作吧!
Hexo博客如何迁移到新电脑
点击查看教程
参考教程: CSDN:Hexo博客迁移到新电脑
在新电脑行进行环境准备工作,具体的步骤和 Hexo博客搭建基础教程(一) 的第1-7步一模一样,大家在新电脑上跟着做即可(注意千万不要做第8步,
hexo init blog-demo
这一步会覆盖并还原你原本的的源码文件)这时候新建一个文件夹
new-blog
,用来装你的新博客源码的,进入这个文件夹,准备复制我们旧的博客源码进来,我们可以看到旧的博客项目结构是如下样子的:
这里红框内的都是需要复制迁移到新的博客的,具体的要不要保留见下表:
需要复制的 | 需要删除的 |
---|---|
_config.yml:站点配置文件 | .git:无论是在站点根目录下,还是主题目录下的.git文件,都可以删掉 |
_config.butterfly.yml:主题配置文件,为了方便主题升级剥离出来的配置文件 | node_modules: npm install 会根据package.json生成 |
package.json:说明使用哪些依赖包 | public: hexo g 会重新编译生成 |
scaffolds:文章的模板 | .deploy_git:在使用 hexo d 时也会重新生成 |
source:自己写的博客源码 | db.json文件: hexo s 快速启动所需的数据库 |
themes:主题文件夹(魔改都在里面啦) | package-lock.json:记录依赖之间的内部依赖关系,可以根据 package.json 重新生成 |
.gitignore:说明在提交时哪些文件可以忽略 |
- 复制所需的文件到新电脑的文件夹之后,在
git bash
中切换目录到新拷贝的文件夹里,使用npm install
命令,进行模块安装。这里绝对不能使用hexo init
初始化,因为有的文件我们已经拷贝生成过来了,所以不必用hexo init
去整体初始化,如果不慎用了,则站点的配置文件_config.yml
里面内容会被重置,所以这一步一定要慎重:
1 | npm i |
- 执行以下命令情况并启动项目,进入
localhost:4000
进行验证:
1 | hexo cl; hexo g; hexo s |
- 当本地能成功启动,之后就可以部署到Github,执行以下代码:
1 | hexo d |
如果出现 Deploy done
,则说明部署成功,稍等两分钟,打开浏览器访问之前的域名就可以看到之前的博客,以后你可以在这台新电脑上魔改和写文章了~
打赏按钮菜单(店长微调)
点击查看教程
参考教程: 糖果屋微调合集
教程参考自店长的糖果屋微调集合,但是做完之后发现有些bug,悬浮鼠标显示的二维码是竖向的,于是做了一些调整,还有更换了一些旧的CDN等,可以放心食用。
效果预览
- 修改
[BlogRoot]\themes\butterfly\layout\includes\post\reward.pug
,整体替换为以下内容:
1 | link(rel='stylesheet' href=url_for(theme.CDN.option.coin_css) media="defer" onload="this.media='all'") |
- 新建
[BlogRoot]\themes\butterfly\source\css\coin.css
,并写入如下代码:
1 | .tip-button { |
- 新建
[BlogRoot]\themes\butterfly\source\js\coin.js
,并写入如下代码:
1 | var tipButtons = document.querySelectorAll('.tip-button') |
- 修改主题配置文件
_config.butterfly.yml
,添加音频文件配置项以及CDN配置项:
1 | # Sponsor/reward |
- 修改
[BlogRoot]\themes\butterfly\source\css\_layout\reward.styl
,整体替换为以下内容:
1 | .post-reward |
- 到这里基本就完成了,这里需要微调的是步骤5中的第16、24和28行,根据自己的二维码宽度进行调节,然后重启项目:
1 | hexo cl; hexo s |
gulp压缩全局资源(店长)
点击查看教程
参考教程: 使用gulp压缩博客静态资源
Github Action自动部署(店长)
点击查看教程
参考教程: 使用Github Action实现全自动部署
新版Aplayer(安知鱼)
点击查看教程
参考教程: butterfly魔改aplayer音乐
首页飞只因(tzy)
点击查看教程
参考教程: 飞只因太美,给你的首页装上吧!
Hexo + Butterfly 一些常见问题(tzy)
点击查看教程
参考教程: Hexo + Butterfly 一些常见问题
Vercel被墙导致Twikoo评论失败的解决方案(tzy)
点击查看教程
Algolia搜索系统
点击查看教程
当网站数据多了,建议用搜索系统,会使得网站加载速度更快!
参考教程:
搜索显示内容一定要装 hexo-algoliasearch
,并且卸载 hexo-algolia
,两者会冲突,还要指定一个插件项:
1 | # 新版的搜索插件 |