Halo 图库插件实现随机图功能

Halo 图库插件实现随机图功能

Halo 图库插件实现随机图功能 我用的这个主题有一个随机封面图功能,可以设置一个API,每次加载页面的时候自动调用这个API获取图片当成封面。正好Halo还有一个图库插件,就想着试试能不能整合在一起 前置准备 首先安装图库插件GitHub - halo-sigs/plugin-photos 安装之

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日更新:

  1. 因为spring框架的更新,现在需要补齐 @PathVariable 的参数

  2. 修改更新版本号方式

LICENSED UNDER CC BY-NC-SA 4.0
Comment