惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
A
About on SuperTechFans
Apple Machine Learning Research
Apple Machine Learning Research
The Register - Security
The Register - Security
Vercel News
Vercel News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
人人都是产品经理
人人都是产品经理
MyScale Blog
MyScale Blog
云风的 BLOG
云风的 BLOG
博客园_首页
U
Unit 42
T
Tailwind CSS Blog
G
GRAHAM CLULEY
F
Full Disclosure
V
Vulnerabilities – Threatpost
T
Tenable Blog
月光博客
月光博客
P
Privacy & Cybersecurity Law Blog
P
Privacy International News Feed
K
Kaspersky official blog
Scott Helme
Scott Helme
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
N
News and Events Feed by Topic
T
The Exploit Database - CXSecurity.com
N
News and Events Feed by Topic
有赞技术团队
有赞技术团队
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
LINUX DO - 最新话题
Recorded Future
Recorded Future
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Help Net Security
Help Net Security
The GitHub Blog
The GitHub Blog
Cisco Talos Blog
Cisco Talos Blog
SecWiki News
SecWiki News
P
Proofpoint News Feed
Security Latest
Security Latest
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
罗磊的独立博客
S
Security Affairs
M
MIT News - Artificial intelligence
L
LINUX DO - 热门话题
美团技术团队
Simon Willison's Weblog
Simon Willison's Weblog
T
Threat Research - Cisco Blogs
Stack Overflow Blog
Stack Overflow Blog
Forbes - Security
Forbes - Security
Hugging Face - Blog
Hugging Face - Blog
博客园 - Franky
V
Visual Studio Blog

Halo - 强大易用的开源建站工具 | 应用市场

ShaneYu EverUs Ethereal 主题漫游 软件分发管理 Moonlit Playground 山月记 Shortcode 初春图床 AI智能套件 文档 Cosolar 演示站防护 业余无线电 GardMap 通联网格地图 元数据字段管家 评论组件 Next 统一身份认证 Morpho Moesora 全能右键 保险箱插件 Earthquake Aurora InkNest Quiet 项目集 AI回评 AI Foundation Kaze 域名主题路由 代码增强(高亮+折叠+长图折叠) 氢·简 文章组件 Floating Particles Huohuo Weather Glass Vahlok AstraHub 星链 全局私密 业余无线电 QSL卡片管理系统 Bark 推送 微信读书(WeRead)信息展示 自定义社交分享卡片 Halorum 文章加密 KMath 轻言 Navidrome 播放器 家庭私厨 页面转换器 Sky Blog 3(macOS) 在线显示 邀请码注册 安全跳转助手 Cartly 商城主题
日程日历
2026-03-30 · via Halo - 强大易用的开源建站工具 | 应用市场

日程日历 Logo

日程日历

提供前台日历页面、控制台事项管理和编辑器日程卡片的 Halo 插件

Release License CI

在线预览 · 下载发布包 · 反馈问题


✨ 为什么做这个插件

Halo 默认并没有提供一套完整的日程日历能力。这个插件的目标,就是给 Halo 直接补上一套可用的日程系统。

  • 给站点新增可直接访问的公开日历页面
  • 给控制台新增本地事项管理、外部日历订阅、循环规则和备份恢复能力
  • 给编辑器新增可插入文章的日程卡片
  • 给主题和自定义前端新增可直接读取的 Finder、REST API 与公开 iCal 订阅

📸 截图预览

日程日历首页预览

🚀 核心能力

🌐 前台公开页面

  • 提供公开页面路由 GET /schedule-calendar
  • 提供公开 iCal 订阅路由 GET /schedule-calendar.ics
  • 提供单事项卡片页 GET /schedule-calendar/cards/{name}
  • 支持本地事项与外部日历订阅在周视图和事项视图中统一展示
  • 支持当前状态、下一个事项倒计时和当前时间线提示
  • 公开 iCal 订阅仅导出本地事项,不包含外部日历订阅数据

🛠️ 控制台事项管理

  • 提供本地事项新增、编辑、删除
  • 支持本地事项启用/停用
  • 支持每日、每周、每月等循环规则
  • 支持只读/管理权限区分
  • 支持插件设置、本地事项与外部日历订阅的备份导出、导入恢复

📥 外部日历订阅

  • 支持添加 Google Calendar 等工具导出的公开 iCal 地址
  • 支持外部日历订阅新增、编辑、删除、启用/停用
  • 支持手动刷新外部日历订阅缓存
  • 外部日历订阅会显示在后台周历和前台公开页面中
  • 外部日历订阅不写入公开 iCal 订阅

🧩 编辑器日程卡片

  • 在文章内容中插入已有本地事项或外部日历事项
  • 自动展示事项时间、地点、说明和循环摘要
  • 适合做课程表、活动安排、预约说明、固定栏目时间卡片

🔌 主题与自定义前端集成

  • 内置 scheduleCalendarFinder
  • 提供公开 REST API
  • Finder 和 REST 返回的数据围绕同一套周视图、摘要和事项模型组织

⚡ 快速开始

📋 运行要求

  • Halo >= 2.23.0
  • JDK 21

📦 安装

  1. Releases 下载插件 jar
  2. 在 Halo 控制台安装插件
  3. 启用后访问 /schedule-calendar
  4. 打开控制台中的“日程日历”开始维护事项

📖 使用方式

1. 🌍 公开页面

插件启用后即可访问:

/schedule-calendar

如果要订阅本地事项的公开 iCal,可使用:

/schedule-calendar.ics

该订阅地址仅包含本地事项,不包含外部日历订阅数据。

如果要嵌入单个事项卡片,可使用:

/schedule-calendar/cards/{name}

2. 🔎 主题 Finder

主题模板可直接使用以下 Finder:

  • scheduleCalendarFinder.week(start)
  • scheduleCalendarFinder.summary()
  • scheduleCalendarFinder.day(date)
  • scheduleCalendarFinder.range(start, end)
  • scheduleCalendarFinder.upcoming(limit)
  • scheduleCalendarFinder.get(name)
  • scheduleCalendarFinder.listAll()

示例:

<div th:with="week=${scheduleCalendarFinder.week('2026-04-01')}">
  <div th:text="${week.weekStart}"></div>
  <div th:text="${week.summary.current.text}"></div>
</div>

<div th:each="item : ${scheduleCalendarFinder.upcoming(5)}">
  <span th:text="${item.title}"></span>
  <time th:text="${item.startTime}"></time>
</div>

<div th:with="summary=${scheduleCalendarFinder.summary()}">
  <span th:text="${summary.next.text}"></span>
</div>

Finder 适合直接在 Halo 主题中读取:

  • 当前周完整周视图
  • 当前状态与下一个事项摘要
  • 指定日期的时间块
  • 指定区间内展开后的事项发生记录
  • 单事项卡片或全量事项列表

3. 📡 REST API

如果你更习惯在主题外部、独立前端或脚本里消费 JSON,可使用这些公开接口:

GET /apis/api.schedule.calendar.sunny.dev/v1alpha1/weeks?start=2026-04-01
GET /apis/api.schedule.calendar.sunny.dev/v1alpha1/summary
GET /apis/api.schedule.calendar.sunny.dev/v1alpha1/days?date=2026-04-01
GET /apis/api.schedule.calendar.sunny.dev/v1alpha1/occurrences?start=2026-04-01&end=2026-04-07
GET /apis/api.schedule.calendar.sunny.dev/v1alpha1/upcoming?limit=10
GET /apis/api.schedule.calendar.sunny.dev/v1alpha1/entrycards
GET /apis/api.schedule.calendar.sunny.dev/v1alpha1/entrycards/{name}

其中:

  • weeks 返回周视图,并附带 serverTimezoneIdsummary
  • summary 返回当前状态和下一个事项摘要
  • days 返回单日占用时间块与空闲时间块
  • occurrences 返回区间内展开后的实际发生记录
  • upcoming 返回未来事项
  • entrycards 返回基础事项卡片数据

🧠 功能细节

🗓️ 周历体验

  • 周视图和事项视图可切换
  • 本地事项和外部日历订阅会在同一套周历中展示
  • 会根据服务端时间计算当前状态
  • 会显示下一个事项距离开始还有多久
  • 会在当天列中标出当前时间线

📝 事项模型

  • 支持标题、时间、地点、说明
  • 支持启用/停用状态
  • 支持循环频率、循环间隔、截止日期
  • 循环事项会在周视图、区间查询和未来事项列表中按真实发生时间展开

📦 备份恢复

  • 支持导出插件设置、本地事项和外部日历订阅
  • 支持恢复时新增、更新、删除本地事项
  • 支持恢复时新增、更新、删除外部日历订阅
  • 恢复完成后会提示本地事项和外部日历订阅各自的新增、更新、删除数量

🔐 权限与维护

  • 匿名访客可访问公开页面和公开 API
  • 控制台支持查看权限与管理权限区分
  • 管理权限可进行本地事项和外部日历订阅的新增、编辑、删除、刷新、备份和恢复

🧱 技术栈

  • 运行平台:Halo >= 2.23.0
  • 后端:Java 21、Gradle、Halo Plugin API
  • 控制台前端:Vue 3、TypeScript、Vite、Halo UI Components
  • 编辑器集成:Halo Rich Text Editor 扩展
  • 对外集成:Finder API、REST API、iCal/ICS 订阅
  • 构建方式:Gradle 多模块构建,ui/ 前端产物打包进插件控制台资源

🗂️ 项目架构

halo-plugin-schedule-calendar/
├─ src/main/java/run/halo/schedule/calendar/  # 插件后端、公开页面、REST API、Finder、查询与备份逻辑
├─ src/main/resources/                        # plugin.yaml、插件资源和 Halo 扩展配置
│  └─ extensions/                             # 权限模板、插件设置 schema 等扩展定义
├─ ui/                                        # 控制台前端与编辑器扩展源码
│  └─ src/
│     ├─ views/                               # 控制台页面
│     ├─ editor/                              # 编辑器日程卡片扩展
│     ├─ utils/                               # 前端工具函数
│     └─ types/                               # TypeScript 类型声明
├─ gradle/                                    # Gradle Wrapper 支持文件
├─ build.gradle                               # 后端依赖、Halo 插件构建和前端资源打包配置
├─ gradle.properties                          # 插件版本等 Gradle 属性
└─ settings.gradle                            # Gradle 多模块设置

👨‍💻 本地开发

🧰 环境

  • JDK 21+
  • Node 20+
  • pnpm 9

🔨 构建插件

./gradlew.bat build

构建产物默认输出到:

build/libs

🎨 前端开发

cd ui
pnpm install
pnpm build
pnpm test:unit

🔐 安全报告

如果发现安全问题,请不要公开披露细节。请优先参考仓库中的 SECURITY.md 提交安全报告。

📄 许可证

本项目基于 GPL-3.0 开源。

⭐ 星标历史

Star History Chart

Built with ❤️ by Sunny