Trilium 推荐阅读同步控件:一键聚合多源文章摘要
在日常知识管理中,我们经常会在不同的笔记本中收藏有价值的文章、笔记,并为它们打上统一的标签(如 recommend)。当标签分散在多个文件夹(甚至跨多个根目录)时,如何快速生成一份汇总的阅读清单?手动复制显然太低效。
本文介绍一款为 Trilium Notes 设计的自定义 Widget,它可以通过点击按钮,自动扫描多个根目录下带有指定标签的笔记,提取标题、摘要、日期等信息,并以 JSON 格式保存到你指定的笔记中。所有配置都通过标签完成,无需修改代码,灵活且易于分享。
最终效果
- 在左侧面板(或你指定的位置)出现一个 同步按钮。
- 点击按钮后,控件会:
- 读取当前控件笔记上的配置标签(scanId、scanLabel、saveNoteId、contentLens)。
- 在后端递归扫描所有符合要求的笔记。
- 将收集的结果(JSON 格式)写入目标笔记。
- 全程自动化,一次点击即可完成跨文件夹聚合。


功能特点
✅ 多根目录支持:通过添加多个 scanId 标签,可以同时扫描多个文件夹及其子笔记。
✅ 多标签筛选:通过添加多个 scanLabel 标签,只要笔记拥有其中任意一个标签,且标签值为 "true",即被收录。
✅ 可调节摘要长度:通过 contentLens 标签控制提取的纯文本摘要字符数(默认 100)。
✅ 安全处理受保护笔记:自动解除目标笔记的临时保护,确保写入成功。
✅ 前后端分离:扫描和保存逻辑运行在后端,避免前端异步限制,性能更稳定。
✅ 零代码配置:所有参数都通过 Trilium 原生标签机制设定,方便修改和迁移。
安装与配置步骤
创建前端 Widget 笔记
在 Trilium 中新建一个笔记,类型选择 JS Frontend,标题可以命名为 推荐阅读同步控件。
将以下完整代码复制到该笔记的内容中:
[Code] Trilium 推荐阅读同步控件:一键聚合多源文章摘要
保存该笔记。
为控件所在笔记添加配置标签
打开刚刚创建的控件笔记,在右侧 属性(Attributes) 面板中添加以下标签:
| 标签名 | 可重复 | 说明 | 示例 |
|---|---|---|---|
| scanId | ✅ 允许多个 | 每个标签值 = 一个根笔记ID(支持多个) | rNdtx5Rm6dHE |
| scanLabel | ✅ 允许多个 | 每个标签值 = 一个目标标签名(只要笔记拥有其中任意一个且值为 "true" 即收录) | recommend |
| saveNoteId | ❌ 单个 | 存放 JSON 结果的笔记ID | 93RNAkIqi512 |
| contentLens | ❌ 可选 | 摘要截取字符数,默认 100 | 200 |
添加多个同名的标签:在属性面板中,点击 “Add label” 后,多次输入相同的标签名即可。
刷新并测试
保存笔记后,按 Ctrl+R 或 F5 刷新 Trilium 前端。
查看左侧面板底部(默认位置),会出现一个带同步图标的按钮。
点击按钮,稍等片刻,会提示同步成功的数据条数。
打开你指定的 saveNoteId 笔记,可以看到生成的 JSON 数组。
使用示例
假设你的知识库结构如下:
- 根文件夹 A(ID: aaa111)
- 笔记 1(标签 recommend=true, date=2026-04-01)
- 笔记 2(标签 star=true)
- 根文件夹 B(ID: bbb222)
- 笔记 3(标签 recommend=true)
配置:
- 添加两个 scanId:aaa111 和 bbb222
- 添加两个 scanLabel:recommend 和 star
- saveNoteId 指向一个空笔记(类型为 text 或 code)
- contentLens = 80
点击按钮后,控件会扫描两个文件夹,只要笔记带有 recommend 或 star 标签且值为 "true",就会被收录(笔记2虽然只有 star=true,也会被包含)。最终输出 JSON 结构如下:
[
{
"id": "noteId1",
"title": "笔记1的标题",
"summary": "提取的前80个字符的纯文本摘要...",
"date": "2026-04-01"
},
{
"id": "noteId2",
"title": "笔记2的标题",
"summary": "摘要内容...",
"date": ""
},
{
"id": "noteId3",
"title": "笔记3的标题",
"summary": "...",
"date": ""
}
]注意:日期字段只有在笔记有 date 标签时才会填充,否则为空字符串。
工作原理简述
- 前端按钮触发:点击按钮后,控件读取当前笔记(即控件所在笔记)的标签,获取配置参数。
- 后端执行扫描:通过 api.runAsyncOnBackendWithManualTransactionHandling 将扫描逻辑发送到后端执行,避免前端 save 方法不可用的问题。
- 递归遍历:对每一个 scanId 根节点,递归获取所有子笔记(await note.getChildNotes())。
- 标签匹配:使用 note.hasLabel() 和 note.getLabelValue() 判断是否包含任一目标标签且值为 "true"。
- 内容提取:调用 note.getContent() 获取原始 HTML,去除标签后截取指定长度的纯文本作为摘要。
- 写入结果:将收集到的数据 JSON 化,通过 targetNote.setContent() 保存到目标笔记。
扩展建议
- 自定义输出字段:你可以在 results.push 中增加更多字段,例如 noteId、标签列表、更新时间 等。
- 匹配不同标签值:目前硬编码要求标签值等于 "true"。你可以修改 targetLabelNames.some 中的判断条件,例如改为 note.getLabelValue(labelName) !== "" 或比较其他字符串。
- 更改按钮位置:修改 parentWidget 属性(如 "left-pane"、"right-pane")和 position 数值可以调整按钮在界面中的位置。
- 定时自动同步:结合 Trilium 的 api.runOnBackend 和 setInterval,可以实现后端定时自动扫描。
结语
这款推荐阅读同步控件充分利用了 Trilium 强大的标签系统和后端 API,让知识聚合变得轻松愉快。你不再需要记住哪些文件夹有推荐文章,只需统一打上 recommend 标签,然后点击一个按钮,所有精华内容就会自动汇聚到一处。
如果你有任何改进建议或遇到了问题,欢迎在评论区交流。Happy Knowledge Managing!😀