Halo 2.0 的 RSS 订阅链接生成插件
从 feed 插件 v1.4.0 版本开始,支持扩展 RSS 功能。
feed
插件提供了扩展点,允许其他插件扩展 RSS 源。
在你的插件项目中添加 feed
插件的依赖:
dependencies {
// ...
compileOnly "run.halo.feed:api:{version}"
}
将 {version}
替换为实际的 feed
插件版本号。
创建一个类实现 run.halo.feed.RssRouteItem
接口,提供自定义的 RSS 数据源。例如:
public class MomentRssProvider implements RssRouteItem {
// 实现具体的 RSS 提供逻辑
}
你可以参考 PostRssProvider 示例。
在 src/main/resources/extensions
目录下,声明你的扩展。你可以参考 ext-definition.yaml 文件来完成此步骤。
在插件中定义一个配置类,使用 @ConditionalOnClass
注解确保只有在 run.halo.feed.RssRouteItem
类存在时才会创建对应的
Bean。同时,定义事件监听器来清理缓存。
@ConditionalOnClass
注解只能使用 name 属性来指定类全限定名,不支持使用 value 属性。
示例代码:
@Configuration
@ConditionalOnClass(name = "run.halo.feed.RssRouteItem")
@RequiredArgsConstructor
public class RssAutoConfiguration {
private final ApplicationEventPublisher eventPublisher;
@Bean
public MomentRssProvider momentRssProvider() {
return new MomentRssProvider();
}
@Async
@EventListener({MomentUpdatedEvent.class, MomentDeletedEvent.class})
public void onMomentUpdatedOrDeleted() {
var rule = CacheClearRule.forExact("/feed/moments/rss.xml");
var event = RssCacheClearRequested.forRule(this, rule);
eventPublisher.publishEvent(event);
}
}
此配置确保了当 RssRouteItem
接口存在时,插件才会自动创建 MomentRssProvider
并监听相关事件来清理缓存。
在 plugin.yaml
文件中声明 feed
插件为可选依赖,确保当 feed
插件存在并启用时,插件能够自动注册 RSS 源。
apiVersion: plugin.halo.run/v1alpha1
kind: Plugin
metadata:
name: moment
spec:
pluginDependencies:
"PluginFeed?": ">=1.4.0"
这样,当 feed
插件可用时,插件会自动注册自定义的 RSS 源。
git clone [email protected]:halo-dev/plugin-feed.git
# 或者当你 fork 之后
git clone [email protected]:{your_github_id}/plugin-feed.git
cd path/to/plugin-feed
# macOS / Linux
./gradlew build
# Windows
./gradlew.bat build
修改 Halo 配置文件:
halo:
plugin:
runtime-mode: development
classes-directories:
- "build/classes"
- "build/resources"
lib-directories:
- "libs"
fixedPluginPath:
- "/path/to/plugin-feed"
- 在 Releases 下载最新的 JAR 文件。
- 在 Halo 后台的插件管理上传 JAR 文件进行安装。
目前提供了以下订阅链接类型:
- 全站订阅:
/feed.xml
或者/rss.xml
- 按照分类订阅(可以在插件设置中关闭):
/feed/categories/{slug}.xml
- 按照作者订阅(可以在插件设置中关闭):
/feed/authors/{name}.xml