为hexo博客Fluid主题添加相册功能
引用
- 一开始我也觉得,一个教你怎么用的文章,连一个配图都没没有,全是文字,搞毛线?本身对代码又不是特别懂,后来发现,有些东西沉下心来,对文章细嚼慢咽一下,很多看起来困难的事情其实也能迎刃而解的。加上现在
ChatGPT
的帮助,很多不会的都可以问问它,再不济自己bing
搜索一下也可以的。 - 然后在开始前,一定要理清楚路径的关系,同级路径、上一级路径、下一级路径,这个基本的概念,因为我在这里踩了很多次坑。
创建导航菜单
- 进入
hexo-theme-fluid
文件夹,找到Fluid的配置文件_config.yml
注意:这个是Fluid的配置文件。 - 按下
Ctrl+F
找到导航菜单条目menu
- 找到导航栏,在第六行后添加一个菜单(顺序自定不一定要在第六行),用于相册的,这是我自己的导航菜单结构样式。
1 |
|
- 关于这个菜单的解释:
1 |
|
- 然后在Fluid的配置文件中找到
自定义页
更改首页图片为你需要的。
创建相册页面
- 手动进入
Blog(你的博客)
-source
目录下,新建一个photo
文件夹,这是相册页路径, - 新建一个
index.md
文件,这是相册页面, - 编辑
index.md
,前面的引导配置,不能少一定要有,关于<Style>
里的代码是相册展示样式,可以自行改,我用的是 HBulder X 编辑这些内容,更方便和专业一些。 - 一定要注意这个文件类型
layout: photo
如果你创建的是photos,在后面的injector.js
也要一并修改,这样layout
为你修改的photos
的时候才会导入这些 js 与 css ,这里我就用的photo
1 |
|
图片设置
- 目前采用的是本地加载,主要有 Github 和 Gitee 两个位置托管博客,暂不考虑 Github+picgo搭建图床 ,Github搭建的图床对国内没有梯子的用户不友好,当然有 云对象存储COS 最好了,反正我是走白嫖路线,自己的博客目前用不上。
- 把你需要展示的相册文件复制到
photo/images-
目录下,用来存放图片,没有就在photo
文件夹中新建一个images-
文件夹(photo里新建的文件夹不能有空的文件夹)。这样做的目的是因为博客中有在很多图片是不需要展示到照片墙中的,所以我们要手动筛选出自己喜欢的图片放上去,这样不仅不会额外占用存储空间也更有意义。 - hexo注入器的工作原理是渲染后,在将自行添加的代码注入到博客中的,也就是会说你的相册路径要用渲染后的路径位置。
创建phototool.js文件处理图片
- 这是一个生成图片大小,名称,参数信息的文件,内容代码如下:
1 |
|
将这个
phototool.js
代码复制到你的photo
相册目录。接下来要生成
json
文件,别紧张,这里并不难,你需要找到你的Blog
的目录,然后右键选择Git Bash Here
,这样会弹出一个控制台窗口,这时候控制台就加载到了你当前的Blog
的目录,这个控制台可以输入命令,你能搭建这个博客相信你对这个控制台也有一定的了解。现在需要获取图片尺寸,这个是第三方包,需要手动安装一个,用来获取第三方文件大小包。
1
npm install image-size --save
接下来输入
node source/photo/phototool.js
这样就会运行这个文件,注意哈,你的路径如果改了这里也要改。1
node source/photo/phototool.js
如果你运行时出现了如下的报错信息的话,可以看一下第7步,没出现错误的话则直接看第7步。
1
2
3
4
5
6
7$ node source/photo/phototool.js
node:internal/modules/cjs/loader:1078
throw err;
^
Error: Cannot find module 'fs-extra'
Require stack:这个错误意味着在运行脚本
phototool.js
的过程中,Node.js 无法找到名为fs-extra
的模块。fs-extra
是一个第三方模块,用于提供比内置的 Node.jsfs
模块更多功能。要解决这个问题,你需要确保在你的项目中安装了fs-extra
模块。你可以使用npm
包管理器来安装它,比如运行以下命令:1
npm install fs-extra
现在重新运行
node source/photo/phototool.js
就正常了然后,在你的
photo
目录中,就会多出photos.json
和photosInfo.json
这个
photos.json
文件主要是用来记录图片宽高信息,以及图片的展示顺序,如果你按照我的操作新建了一个images-
文件夹,那么name
里的名称就和我的一样(name这个是分类名称,可自行修改。),这是我的图片元数据示例,你的图片名称和我的是不一样的,这段无需复制,仅做展示说明:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24[{
"name": "images-",
"children": [
"1280.3630 Watch_detail_page_display.png",
"1000.1500 Watch_detail_page_display3.png",
"1000.1500 Watch_detail_page_display4.png",
"1000.1500 Watch_detail_page_display6.png",
"1000.1500 Watch_detail_page_display9.png",
"800.800 暗影头盔_EV.png",
"1280.540 龙斧_终了2.png",
"1920.1080 Snipaste_2023-11-30_14_EV_2.png",
"1920.1080 Snipaste_2023-11-30_13.png",
"1920.1080 木桶渲染_4.png",
"1920.1080 Snipaste_2023-11-30_5.png",
"1920.1080 202310262210568.png",
"2560.1080 blender_blue_1.png",
"1080.1352 A03魔法球_渲染.png",
"540.676 渲染-火焰.png",
"1920.1012 【8】最终渲染-夜景+台灯.png",
"1920.1012 【8】最终渲染-夜景.png",
"1920.1012 【8】最终渲染-白天.png"
]
}]
编写相册js文件
- 在
/source/js/
目录下创建photoWall.js
,路径一定要对得上哈,千万别搞错了。(没有js
文件夹就新建一个)
1 |
|
创建injector.js文件
- 在
Blog
目录中新建一个scripts
文件夹,在文件夹内部在新建一个injector.js
这是 hexo 注入器,一定要在Blog
目录新建,这个文件夹和文件不能放到别的目录 ,在injector.js
输入以下内容:
1 |
|
- 在你的
Git
控制台中输入hexo clean && hexo g && hexo s
快速清除缓存,并生成静态文件,然后运行博客 - 现在你的相册已经配置完成了。
后期添加图片怎么操作?照片墙图片和img共用一个路径?
如果你不嫌麻烦可以重新将需要的图片复制到
photo/images-
目录下,然后重新执行获取图片大小信息,这样操作我不太喜欢,而且我需要的是照片墙和博客图片路径保持一样的位置,这样有利于减少博客空间占用。找到
/photo/Phtotos.json
图片配置文件,用 HBuilder 等代码编辑工具,重新整理代码格式。例如我要添加图片,则在
"1920.1080 复古音箱-渲染2.png",
的上方添加即可,注意规律:宽高中间有一个英文的点
.
宽高的数值要和图片的宽高保持一致
再按下空格空格
接下来是图片的名称和它的格式:复古音箱-渲染2.png
用英文引号 “” 作为包裹数据段落
然后你新加的图片在第一个位置,则要在尾部继续加一个英文,
逗号
注意:一个分类(这个分类是指:Blender、其它)的图片的最后一张是没有逗号的,如果你在其中调整了顺序别搞错了,逗号也别少加。
这里的name
里的参数可自行修改,这个是分类显示的名称。
然后有多个分类,则如示范所展示参考:
值得注意的是,这里的分类并不是按文件夹分类,它们都是指向同一个图片目录(路径),也就是说在这个配置文件中修改的分类只会影响渲染后注入网页的效果;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19[{
"name": "Blender",
"children": [
"宽.高 图片名称.png",
"1920.1080 复古音箱-渲染2.png",
"1920.1080 复古音箱-渲染白膜.png",
"1280.3630 Watch_detail_page_display.png",
"1000.1500 Watch_detail_page_display3.png"
]
},
{
"name": "其它",
"children": [
"800.800 foot1.jpg",
"800.800 foot2.jpg",
"1000.1500 13445.jpg"
]
}
]接下来是将相册的图片和img公用一个路径,我们只需要找到
source/js/photoWall.js
修改图片访问路径即可。1
var imgPath = "/img/images/"; //图片访问路径,填入你需要的路径,注意修改。
最后看看实际运行效果吧。
如果你的 hexo注入器 一直加载没反应,注意用 F12 审查元素,看看有没有一个
<
符号的,我之前是这样的问题,一直困扰了很久,最后发现是aplayer
的锅,于是在 npm 中卸载并删除了aplayer
和hexo-tag-aplayer
这两个文件夹,重新执行hexo clean && hexo g && hexo s
后就可以跑起来了,最后aplayer
也是用 hexo注入器 执行的。
直接套用
- 如果你也是 Fluid 主题,你可以直接套我改好的这个,然后复制到博客的根目录,再稍作修改即可。
- 或者你也是在路径关系这里踩了坑,也可以直接参考我改的源码,为避免你的博客配置被覆盖,所以没有提供
_config.yml
文件,你至少需要修改Fluid的导航栏配置
在这里下载文件 | 文件路径树参考
1 |
|
相册页鸣谢:
四维树的博客 - Fluid主题添加相册功能
何十七 - hexo的fluid主题添加相册功能及自定义页面
GISHAI - hexo的fluid主题添加瀑布流懒加载相册功能
魏超 - 为 Hexo + Fluid 博客添加承载相册的页面