Halo 图库插件实现随机图功能
我用的这个主题有一个随机封面图功能,可以设置一个API,每次加载页面的时候自动调用这个API获取图片当成封面。正好Halo还有一个图库插件,就想着试试能不能整合在一起
前置准备
首先安装图库插件GitHub - halo-sigs/plugin-photos
安装之后先往附件库上传一些图片备用,然后在后台图库
页新建分组,并把图片都添加进去
准备好之后就发现一个尴尬的问题: 主题使用的API接口需要直接302重定向到图片地址,但是图库插件只支持渲染thymeleaf页面
修改图库插件
那就只能自己修改一下图库插件了,开放一个获取随机图片的API接口
首先clone一下仓库
git clone https://github.com/halo-sigs/plugin-photos
cd ./plugin-photos
根据Halo的开发教程,自写一个RandomPhotoController类,我的代码如下:
package run.halo.photos;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Mono;
import run.halo.app.plugin.ApiVersion;
import run.halo.photos.finders.PhotoFinder;
import java.util.Random;
@ApiVersion("v1alpha1")
@RequestMapping("/randomPhoto")
@Controller
public class RandomPhotoController {
@Autowired
private PhotoFinder photoFinder;
private final Random random = new Random();
@GetMapping("/{groupId}")
public Mono<String> redirect(@PathVariable(value="groupId") String groupId) {
return photoFinder.listBy(groupId).collectList().map(
photoVos -> "redirect:"+photoVos.get(random.nextInt(photoVos.size())).getSpec().getUrl()
);
}
}
注意这里修改好之后,需要构建并更新插件,如果你已安装的图库插件和你修改之后的图库插件版本号一致,点更新是没有效果的
所以我们需要在gradle.properties里修改一下版本号,或者是直接删除原先的图库插件,再安装修改过的
修改完后构建:
gradlew build
产物就在build/libs
文件夹里,上传到服务器后台即可
使用API
这段代码可以开放一个API接口,访问可以直接重定向到图片,地址为
https://www.XXXXX.net/apis/api.plugin.halo.run/v1alpha1/plugins/PluginPhotos/randomPhoto/{图片组ID}
注意这里的图片组ID
是你图库中分组的ID,在后台点击图库
页面后,此时的URL大致为:
https://www.XXXXX.net/console/#/photos?group=photo-group-XXXXX
这里的 photo-group-XXXXX 就是你的图片组ID
配置主题
配置主题就很简单了,直接进入对应的设置API接口的位置,我用的theme-butterfly的设置位置为主题 -> Butterfly -> 加载 -> 随机图片链接
填入上文中的API接口即可
2024.3.14日更新:
因为spring框架的更新,现在需要补齐
@PathVariable
的参数修改更新版本号方式