这篇文章添加几个适用于yilia主题的功能
快速导航:
yilia主题添加本地头像
添加字数统计
安装全局搜索功能
yilia主题添加博客文章置顶功能和置顶标签
hexo文章加密功能
yilia主题移动端添加页面进度条
hexo代码块复制功能
代码区块高亮
添加文章更新时间
yilia主题添加aplayer播放器
yilia主题添加本地头像
如果你的头像是引用网络的,那就要注意了,网络上的图片随时都有可能被删除,删除之后,头像就没有了
头像的图片一般不是很大,完全可以进行本地引用(你要深刻意识到,本地引用图片是会影响到网页加载速度的)
补充:近期不知你有没有发现小贱贱图床登录说明
登录说明
问:为什么突然要登录了?
答:因为顶不住咯。估计被xx瞄上了吧。换了N的多账号去维持了,已经被逼去买xx小号了。
问:没有注册入口,怎么样获取账号?
答: 老用户请加wx:dashu007hao,(请备注说明图床,否则不通过)
碎碎念:还能维护多久我也不知道,说不准哪天就不维护了。且用且珍惜吧。珍惜最后的时光
实现方法
- 将自己的头像图片放在
themes\yilia\source\img
路径下(路径可以更换),我的图片名为avatar.png
- 修改主题配置文件
themes\yilia\_config.yml
,在里面找到#你的头像url
,添加路径
1 | #你的头像url |
- 本地预览
hexo s
看效果
添加字数统计
字数统计需要安装插件实现
实现方法
- 安装hexo-wordcount插件
npm i --save hexo-wordcount
- 找到想添加的位置,以文章标题的下方为例(参看本博客显示效果)
- 定位文件
themes\yilia\layout\_partial\article.ejs
,在里面添加
1 | <% if (post.link || post.title){ %> |
这里div添加了颜色属性,适配主题
div标签的样式可以自己修改,添加style属性即可,也可以添加class,在css中美化
- 添加了判断条件,修改主题配置文件
themes\yilia\_config.yml
,添加
1 | # 字数统计 |
hexo s
本地预览查看效果
安装全局搜索功能
yilia博客拥有一个搜索功能,这个功能只能匹配到标题和标签,不是很强大,接下来介绍一个能匹配到文章内容关键字的搜索功能
这个功能的实现,感谢:
全局搜索功能的开发者:
jQuery-based Local Search Engine for Hexo
hexo-theme-matery主题开发者:
https://blinkfox.github.io/
没有他们的贡献,我自己实现不了这个功能,本功能实现效果与hexo-theme-matery主题类似
效果图(具体效果可参看本主题)
pc页面
手机页面
实现方法
本功能的实现需要导入jquery,我用的版本是jquery-3.4.1.js
(可以在线引用)
本功能的实现还需要安装插件hexo-generator-searchdb
- 博客的根目录下,
git bash here
,输入命令:npm install hexo-generator-searchdb --save
- 根目录配置文件(不是主题配置文件)
_config.yml
中添加以下内容
1 | search: |
测试插件是否安装成功
- 输入本地预览命令
hexo s
,在浏览器输入预览网址
在网址后添加search.xml
,比如我的预览网址是localhost:4000/
,那就在浏览器导航栏输入localhost:4000/search.xml
查看是否有页面显示,出现页面,插件安装成功(这一步决定全局搜索功能是否会实现) - 在主题路径
themes\yilia\layout\_partial
下创建search.ejs
文件 - 上jquery官网下载jquery,将
jquery-3.4.1.js
放在themes\yilia\source
路径下(这里在线引用)
在search.ejs
中添加以下内容(粘贴到search.ejs
中即可)
1 | <% if (theme.local_search && theme.local_search.enable){ %> |
- 在主题
themes\yilia\source
路径下创建一个js
文件夹,里面创建search.js
文件,将以下内容(jQuery-based Local Search Engine for Hexo)粘贴到此文件中(路径和文件名根据自己需要在上面的内容中修改)
1 | var searchFunc = function (path, search_id, content_id) { |
- 定位文件
themes\yilia\layout\_partial\tools.ejs
,在里面找到搜索图标的i标签,在标签里添加一个id:js-icon-search
(添加搜索弹窗事件)
这里实现的是点击搜索图标出现搜索框
1 | <div class="search-wrap"> |
- 修改搜索弹窗的样式,主题
themes\yilia\source\main.0cf68a.css
文件中添加
1 | /* 全局搜索样式 */ |
- 定位文件
themes\yilia\layout\layout.ejs
,在里面的body标签下添加内容:<%- partial('_partial/search') %>
(添加位置可以根据需求更改)
注意:不要添加在body标签内的最后,即主题导入js之后,这样会导致主题的部分js失效
建议在以下位置添加
1 | <body> |
- 最后一步,在
themes\yilia\_config.yml
中添加判断配置
1 | #是否开启全局搜索 |
简单说明一下原理:通过获取搜索图标的id,添加点击事件,通过点击事件弹出全局搜索框,添加一个背景层(这里的背景层类似于开启分享显示微信二维码时的背景层样式),并将body固定在当前位置(禁止背景层下的内容滚动),在背景层添加一个关闭搜索弹窗的点击事件,关闭全局搜索,移除body固定
主题配置文件全局搜索的开关通过search.ejs
文件中的第一行判断语句进行判断
这里对main.0cf68a.css
文件的修改可以根据自己的需求更改
yilia主题有一个气泡上浮的动画效果,在搜索弹窗中没有实现(添加了搜索弹窗淡入淡出效果)
每个人都应有自己的思路,根据需要修改相关内容
最后,再次感谢以上的杰出贡献者,使我在yilia主题中实现了全局搜索功能
yilia主题添加博客文章置顶功能和置顶标签
注:yilia主题内置文章置顶功能,只需在Front-matter中添加top: true
即可,支持置顶多个文章,置顶的文章会再次以时间进行排序
请先在Front-matter中添加top: true
,然后查看文章是否置顶,如果没有实现请继续看实现方法
目前已经有了博客文章置顶的插件,觉得这个功能很好用,在这里分享一下
参考链接
hexo博客优化之文章置顶+置顶标签
感谢插件的制作者
hexo-generator-index-pin-top
实现方法
- 安装插件(博客根目录git安装)
npm uninstall hexo-generator-index --save
npm install hexo-generator-index-pin-top --save
安装完成后 - 在需要置顶的文章中加上
top: true
即可
1 | --- |
- 本地预览
hexo s
,你会看到yilia主题自带置顶标签,不需要进行额外的添加 - 到此,功能实现完成
还有一种方法,修改Hexo文件夹下的node_modules/hexo-generator-index/lib/generator.js
文件,个人感觉没有这个简单,这里不进行介绍。
感兴趣的话,点击新增Hexo博客文章置顶功能
hexo文章加密功能
阅读文章的密码验证功能,文章的密码是通过SHA256
加密
此功能通过JavaScript实现,如果浏览器中有是否启用JavaScript选项,选否后,加密功能失效(Pure浏览器)
此功能适用于yilia主题
实现效果
在主页访问文章详细内容时,会在文章详细页出现弹窗,输入相应的密码进入详细页,密码输入错误跳回主页
实现方法
- 将以下内容添加到
themes\yilia\layout\_partial\article.ejs
文件的顶部<script src="<%=config.root%>./js/crypto-js.min.js"></script>
是本地引入js的路径,根据需要更改
这里提供的是云端引用(即联网才可用)page.password
控制只在有password的文章导入下面的代码,如果不添加此项,会使所有文章都导入下面代码(效果一样,但是代码量不一样)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<% if (theme.verifyPassword.enable && page.password) { %>
<!-- 本地引入js -->
<!-- <script src="<%=config.root%>./js/crypto-js.min.js"></script> -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>
<script>
(function() {
let pwd = '<%- page.password %>';
if (pwd && pwd.length > 0) {
if (pwd !== CryptoJS.SHA256(prompt('<%- theme.verifyPassword.promptMessage %>')).toString(CryptoJS.enc.Hex)) {
alert('<%- theme.verifyPassword.errorMessage %>');
location.href = '<%- url_for("/") %>';
}
}
})();
</script>
<% } %> - 在
themes\yilia\_config.yml
中添加如下配置
1 | # 阅读文章的密码验证功能,如要使用此功能请激活该配置项,并在对应文章的Front-matter中写上'password'的键和密码加密后的密文即可. |
说明
在Front-matter
中添加password: SHA256
,SHA256
是密码加密后的密文,访问文章时输入加密前的密码即可
如果要对文章设置阅读验证密码的功能,不仅要在 Front-matter 中设置采用了 SHA256 加密的 password 的值,还需要在主题的 _config.yml
中激活了配置。有些在线的 SHA256 加密的地址,可供你使用:
开源中国在线工具
chahuo
站长工具
感谢
这个功能是hexo-theme-matery主题开发者实现的
https://blinkfox.github.io/
在此表示感谢!
yilia主题移动端添加页面进度条
移动端隐藏了滚动条,加一个网页进度条可以更清楚了解到当前页面在网页的位置
说明
此网页进度条只在移动端页面出现,pc端进度条宽度始终为0
网页进度条在页面最下方,样式可根据自己的需要更改
实现方法
需要用到scrollprogress.js,这里云端引用
themes\yilia\layout\_partial\script.ejs
文件中添加
1 | <!-- 页面进度条 --> |
- 在
themes\yilia\layout\layout.ejs
添加滚动条<div class="progress-bar"></div>
的位置,我是在<%- partial('_partial/footer') %>
下面添加
1 | <%- partial('_partial/footer') %> |
themes\yilia\source\main.0cf68a.css
添加样式
1 | /* 进度条 */ |
yilia主题pc页面与移动端页面布局不同,pc端不会显示进度条,上面的js在pc端页面返回值始终是0,即进度条的宽度始终为0
感谢
hexo代码块复制功能
此功能应该适用于所有的hexo主题
说明
代码块复制功能是在代码块部分显示复制按钮,点击复制按钮,实现代码块复制功能
本功能实现需要引入jquery
运用clipboard.js实现复制代码块功能
实现方法(更新)
前提:
本功能依据hexo配置文件_config.yml
(不是主题那个)中highlight.enable
值为true所生成的代码区块标签实现。
如果你的highlight.enable
值为false,那么复制按钮的位置要做相应改变
主题中添加js代码
本js中clipboard.js使用网络引用,可以将其下载到本地引用
如果主题中没有引入jquery,请将jquery引入
1 | <!-- 复制代码块 --> |
主题中添加css样式(本样式根据yilia主题美化)
1 | /* 代码块复制 */ |
样式根据自己的主题需要进行更改,重点更改自己主题中复制按钮的样式
实现效果
点击复制按钮,复制按钮变成复制成功
更新说明
美化复制按钮样式(模仿CSDN),添加代码块复制失败提示,修改click事件传参形式
感谢
本功能实现参照
hexo+yilia添加复制代码块的功能
蒋振飞的博客 - 网站搭建 (第23天) 代码块复制功能
重点应用
clipboard.js
对以上杰出贡献者表示感谢
代码区块高亮
yilia主题自带高亮
分享一下这篇文章hexo+yilia修改代码块等样式
两种实现方法
第一种:使用主题自带代码区块高亮实现
方法一
前提:
hexo配置文件_config.yml
(不是主题那个)中highlight.enable
值为true
1 | highlight: |
在代码块标签后面声明代码区块语言(这里以css为例)
1 | ```css |
效果:
1 | figure:hover .js-btn-copy{ |
方法二
通过修改hexo配置文件实现
将highlight.auto_detect
值设为true
即开启代码区块语言自动检测功能
1 | highlight: |
注:修改hexo配置文件后需要重启hexo服务才能生效
如果依然没有生效,请尝试使用hexo clean
高亮样式通过主题css样式文件进行实现(可以根据需要自行修改main.0cf68a.css
文件)
第二种:通过highlight.js实现代码区块高亮
highlight.js是实现代码区块高亮的js
此js会自动检测页面中<pre><code>..</code></pre>
的代码区块(这是重点)
实现方法:
改变hexo代码区块标签结构(可选)
hexo配置文件_config.yml
(不是主题那个)中highlight.enable
值为false
true和false的值会改变代码区块的标签结构
如果不想修改highlight.enable
值为false,请看下面的补充说明
1 | highlight: |
在主题中引入highlight.js
,这里引用网络(可以下载到本地)
具体实现可以观看官方文档https://highlightjs.org/usage/
1 | <script src="https://highlightjs.org/static/highlight.site.pack.js"></script> |
主题中引入css(官网下载highlight.js
压缩包),里面有很多css样式,引入自己喜欢的一种即可
补充说明:
如果代码区块没有高亮,请观看一下你的代码区块的标签是不是<pre><code>..</code></pre>
格式highlight.enable
值为false的标签结构
1 | <pre> |
先说一下我遇到的问题
我的这个页面中,代码区块的标签格式
1 | <figure> |
可以明显看到代码区块的标签并不是<pre><code>..</code></pre>
格式(highlight.enable
值为true导致)
进行jquery手动修复
在hljs.initHighlightingOnLoad();
添加
1 | $("figure table").wrap("<code></code>"); |
将table标签用code标签包裹起来,再用pre标签将code标签包裹起来,实现上面的代码结构(很显然,这个方法有些麻烦)
1 | <script> |
添加文章更新时间
在发布时间后面添加更新时间
实现方法
修改主题文件themes\yilia\layout\_partial\post\date.ejs
添加如下内容:
1 | <% if(!index && post.updated && post.updated > post.date){ %> |
说明一下原理:if
判断页面是否文章详细页面,判断文章.md
文件中是否有updated
参数,updated
参数时间是否大于date
参数时间
如果均成立,添加时间标签
修改后的date.ejs
1 | <a href="<%- url_for(post.path) %>" class="<%= class_name %>"> |
如果文章md
文件中有updated
参数,且updated
参数有时间,则文章显示参数时间
写文章的时候可以直接在文章开头设置更新时间
1 | updated: 2020-02-09 21:05:00 |
如果参数为空,显示md文件的修改日期(updated
参数可有可无)
感谢
hexo添加文章更新时间(简书):https://www.jianshu.com/p/ae3a0666e998
hexo添加文章更新时间(CSDN):https://blog.csdn.net/ganzhilin520/article/details/79053399
yilia主题添加aplayer播放器
yilia主题添加音乐播放器,想了很久,但是一直没有实现
本主题属于自适应主题,但是pc端和移动端的智能菜单完全是两个页面,因此考虑添加两个播放器,一个用于pc页面,另一个用于移动端,当然,这只是我的方法
两个播放器都是存在的,只不过不会同时显示
pc页面时(根据屏幕宽度判断),移动端音乐播放器不显示,移动端页面时,pc播放器隐藏(当然这与音乐播放器添加的位置有很大关系)
至于效果,如果你看到这个页面,应该是可以看到效果,因此,我就不贴图片了
实现方法
aplayer播放器的实现,需要运用APlayer,下载github压缩包(不到300k,可以耐心等等),解压后把dist文件夹中的js与css文件复制到自己要引用的主题文件夹中,在代码中进行引用即可。
这里提供引用的网址,不需要下载文件
添加pc页面音乐播放器
定位主题文件themes\yilia\layout\_partial\left-col.ejs
在<nav class="header-nav">
标签中的div
标签后面添加
1 | <% if (theme.music.enable && site.data && site.data.musics) { %> |
添加后的样子
1 | <nav class="header-nav"> |
在themes\yilia\layout_partial文件夹中创建一个music文件夹(与上面引入的代码相匹配)
在music文件夹中创建aplayer.ejs
(pc页面播放器js)和mobile-aplayer.ejs
(移动端页面)两个文件aplayer.ejs
添加,仿照https://blinkfox.github.io/
1 | <% var audiosJson = JSON.stringify(site.data.musics); %> |
添加移动端页面音乐播放器
定位主题文件themes\yilia\layout\_partial\mobile-nav.ejs
在header标签中最后一个nav标签后面添加
1 | <% if (theme.music.mobile_enable && site.data && site.data.musics) { %> |
添加后的样子
1 | <nav class="header-menu js-header-menu"> |
在music文件夹中创建的mobile-aplayer.ejs
文件中添加
1 | <% var audiosJson = JSON.stringify(site.data.musics); %> |
下载好的js和css文件只需要在pc播放器引用一次即可,不需要在移动端播放器重复引用
配置主题文件_config.yml
定位主题文件themes\yilia\_config.yml
在里面添加如下配置(几乎完全参照hexo-theme-matery主题进行配置):
1 | # aplayer音乐播放器 |
上面的内容根据自己需要更改
aplayer中文文档有详细的参数说明
最后的配置
博客文件夹(不是主题文件夹)里的 source 中创建 _data 文件夹,在 _data 文件夹中创建 musics.json 文件
文件内容如下所示(如果上面歌词格式配置为0,则歌词lrc一行可以去掉):
1 | [{ |
播放器中有标题,简单配置一下标题样式
定位文件themes\yilia\source\main.0cf68a.css
,在里面添加css(同时适用两个播放器,根据需求自行修改)
1 | /* music player title */ |
补充说明:
1.APlayer.min.css与APlayer.min.js只在pc播放器中添加,并没有在移动页面添加,如果关闭pc播放器,移动端播放器会因为缺失相应的css和js而无法显示
这里提供一个解决办法
在主题的css与script文件中添加如下代码
1 | /*css中添加*/ |
把pc页面引入的js与css删除即可
2.隐藏滚动条两端的按钮和外层轨道,此样式只适用于pc页面,解决实际歌曲列表长度大于设置长度出现滚动条时播放器自带样式对滚动条设置与主题滚动条样式设置冲突问题,如果移动端出现样式冲突问题,请手动添加(移动端可能不会出现滚动条)
3.截至1.10.1版本发现1.9.1之后的版本会使部分浏览器锚点跳转失效(本页面引入的是1.10.1),解决办法就是将传统的#位置
修改为?id=#位置
。
4.移动端preload音频预加载属性不受关闭pc播放器影响
到此,yilia主题添加aplayer播放器完成
分享
既然谈到了添加音乐播放器,自然是需要音乐的直链,分享一个网易云获取音乐直链的方法(一般不会失效,除非歌曲下架)
1 | https://music.163.com/song/media/outer/url?id= |
id后面输入歌曲的id
分享一个音乐直链搜索工具,通过此工具可以快速获取到网易云音乐歌曲id,自然网易云音乐歌曲直链就获取到了
此搜索工具获取到的音乐直链有时间限制,超过一定时间直链失效,目前只知道获取网易云音乐直链这一种方法,分享给大家
补充:
发现了一个音乐下载神器:全网音乐免费下载神器,这个获取的音乐地址仿佛没有时间限制(切记,复制input文本框链接的地址,点击下载后获取的地址是有时间限制的)
获取酷我mp3外链地址
首先,获取要获得外链歌曲的id,在酷我歌曲页面上就有
其次,将id拼接到player.kuwo.cn/webmusic/st/getNewMuiseByRid?rid=MUSIC_
后面,即http://player.kuwo.cn/webmusic/st/getNewMuiseByRid?rid=MUSIC_76446978
出现的是该音频的xml信息
1 | <Song> |
提取<mp3path>
和<mp3dl>
中的内容,创建url: http://+<mp3dl>
内容+<mp3path>
内容
以上面信息为例,url如下:
1 | http://antiserver.kuwo.cn/anti.s?useless=&format=mp3&rid=MUSIC_76446978&response=res&type=convert_url& |
此url为该歌曲的外链(仅适用于酷我音乐)
感谢
yilia主题添加aplayer播放器的实现,参照以下网站进行完成,在此表示感谢
Hexo全局添加APlayer音乐播放器
Hexo增加APlayer音乐播放功能
Hexo博客主题之hexo-theme-matery的介绍
aplayer中文文档
最后
最近又看到了许多有用的功能
随时更新,可以在所有文章中查询想要的功能