Trilium 首页数据同步控件 2.1:多模块管理 + 弹窗选择
在上一版Trilium 首页数据同步控件 2.0:全标签查询 + 多模块聚的基础上,我们又做了关键升级:模块独立同步 + 弹窗选择界面 + 便捷扩展机制。让您在 Trilium 知识库中维护博客首页数据更加随心所欲。
✨ 2.1 新增亮点
- 🎚️ 模块独立同步
一键弹出选择器,可单独同步“推荐阅读”、“最新说说”、“最近发布”、“公告”中的任意模块,也可以一次性同步全部。 - 🧩 扩展性优化
核心同步函数syncByLabels完全通用,增加新模块只需在modules数组中添加一项,弹窗按钮自动生成(需使用动态模板),无需重复编写 SQL 或渲染逻辑。 - 🌗 深色模式原生适配
弹窗样式直接使用 Trilium 后端深色主题,与侧边栏、属性面板浑然一体。 - 🖱️ 轻量交互
点击主按钮弹出浮动窗口,点击窗口外任意位置自动关闭,不干扰正常笔记操作。
📦 安装与配置
1. 创建前端脚本笔记
在 Trilium 中新建一个笔记,类型选择 JS Frontend,标题可命名为 首页数据同步控件 2.1。将文末完整代码粘贴进去。
2. 添加配置标签(在脚本笔记的属性面板)
| 标签名 | 说明 | 示例值 |
|---|---|---|
saveNoteId | 推荐阅读的目标笔记ID | 93RNAkIqi512 |
shuoShuoSaveId | 最新说说目标笔记ID | 7cNdFfTEQCta |
lastCreateSaveId | 最近发布目标笔记ID | TcqspsPhsetN |
announcementSaveId | 公告目标笔记ID | lBvdQs3eYjct |
autoShuoShuo | 是否启用最新说说模块 | true |
autoLastCreate | 是否启用最近发布模块 | true |
autoAnnouncement | 是否启用公告模块 | true |
ssLimit | 说说返回条数(默认7) | 7 |
lastCreateLimit | 最近发布条数(默认1) | 1 |
announcementLimit | 公告条数(默认1) | 1 |
recommendLimit | 推荐阅读条数(默认10) | 10 |
contentLens | 摘要长度(全局,默认250) | 250 |
syncInterval | 自动同步间隔(小时,可选) | 24 |
3. 给笔记打上目标标签
- 推荐阅读:需要同时拥有
article=true和recommend=true两个标签。 - 最新说说:只需要
shuoshuo=true。 - 最近发布:只需要
article=true。 - 公告:只需要
anno=true。
4. 使用控件
- 保存脚本笔记,刷新 Trilium 界面。
- 左侧面板底部会出现一个 同步按钮(🔄)。
- 点击按钮,弹出模块选择窗。
- 单击任一模块按钮,仅同步该模块;单击“全部同步”按钮更新所有模块;单击外部或“取消”关闭弹窗。
🧠 工作原理
- 前端按钮触发,读取脚本笔记自身的配置标签。
- 对于每个模块,调用后端 API
api.runAsyncOnBackendWithManualTransactionHandling。 - 后端动态构建 SQL:根据标签列表生成多个
INNER JOIN,执行ORDER BY dateCreated DESC LIMIT N。 - 从
notes、blobs、attributes表中批量获取数据,去除 HTML 标签、解码实体、生成摘要。 - 将结果 JSON 写入目标笔记(
setContent)。 - 前端接收返回的条数并显示成功消息。
为什么性能优秀?
- 单次同步执行 4 条 SQL(每个模块一条),没有递归调用。
- 所有排序、过滤均在数据库层完成。
- 写入使用
setContent原子操作,避免事务开销。
🔧 拓展新模块指南
假设您要增加一个“热门文章”模块,需要筛选同时具备 hot 和 article 标签的笔记,且只显示 5 条。步骤如下:
- 在控件笔记上添加配置标签(可选):
autoHot=true(是否启用)hotSaveId=目标笔记IDhotLimit=5- 摘要长度复用
contentLens。
修改
modules数组(在runSync方法中):{ name: "热门文章", enabled: getLabelBool("autoHot", false), labels: ["hot", "article"], saveId: getLabel("hotSaveId"), limit: getLabelInt("hotLimit", 5), lens: getLabelInt("contentLens", 250) }- 弹窗按钮自动生成(如果您的代码使用动态模板,则无需手动添加;若当前版本为手动,请同步添加一个
<button data-module="4">🔥 热门文章</button>)。 - 运行同步:点击弹窗中的“热门文章”按钮,即可生成 JSON。
当前发布的 2.1 版代码已包含动态生成按钮的能力(见文末代码中的
showModuleDialog函数——它根据modules数组遍历生成按钮),因此新增模块后弹窗会自动出现对应选项,无需手工修改 HTML。
📝 完整代码
将以下代码完整复制到您的 JS Frontend 笔记中即可。
[Code] Trilium 首页数据同步控件 2.1:多模块管理 + 弹窗选择
🎯 总结
2.1 版本让首页数据同步更加灵活、轻量。无论是个人博客还是团队知识库,您都可以通过简单的标签配置和模块扩展,实现一键式内容聚合。如果您需要增加新的展示模块(例如“好物推荐”、“每周精选”),只需在 modules 中添加一项,弹窗会自动生成对应按钮,而无需触碰 SQL 或后端逻辑。
立即升级,享受模块化的同步体验!