首页

Trilium 首页数据同步控件 2.1:多模块管理 + 弹窗选择

在上一版Trilium 首页数据同步控件 2.0:全标签查询 + 多模块聚的基础上,我们又做了关键升级:模块独立同步 + 弹窗选择界面 + 便捷扩展机制。让您在 Trilium 知识库中维护博客首页数据更加随心所欲。

✨ 2.1 新增亮点

  • 🎚️ 模块独立同步
    一键弹出选择器,可单独同步“推荐阅读”、“最新说说”、“最近发布”、“公告”中的任意模块,也可以一次性同步全部。
  • 🧩 扩展性优化
    核心同步函数 syncByLabels 完全通用,增加新模块只需在 modules 数组中添加一项,弹窗按钮自动生成(需使用动态模板),无需重复编写 SQL 或渲染逻辑。
  • 🌗 深色模式原生适配
    弹窗样式直接使用 Trilium 后端深色主题,与侧边栏、属性面板浑然一体。
  • 🖱️ 轻量交互
    点击主按钮弹出浮动窗口,点击窗口外任意位置自动关闭,不干扰正常笔记操作。

📦 安装与配置

1. 创建前端脚本笔记

在 Trilium 中新建一个笔记,类型选择 JS Frontend,标题可命名为 首页数据同步控件 2.1。将文末完整代码粘贴进去。

2. 添加配置标签(在脚本笔记的属性面板)

标签名说明示例值
saveNoteId推荐阅读的目标笔记ID93RNAkIqi512
shuoShuoSaveId最新说说目标笔记ID7cNdFfTEQCta
lastCreateSaveId最近发布目标笔记IDTcqspsPhsetN
announcementSaveId公告目标笔记IDlBvdQs3eYjct
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=truerecommend=true 两个标签。
  • 最新说说:只需要 shuoshuo=true
  • 最近发布:只需要 article=true
  • 公告:只需要 anno=true

4. 使用控件

  • 保存脚本笔记,刷新 Trilium 界面。
  • 左侧面板底部会出现一个 同步按钮(🔄)。
  • 点击按钮,弹出模块选择窗。
  • 单击任一模块按钮,仅同步该模块;单击“全部同步”按钮更新所有模块;单击外部或“取消”关闭弹窗。

🧠 工作原理

  1. 前端按钮触发,读取脚本笔记自身的配置标签。
  2. 对于每个模块,调用后端 API api.runAsyncOnBackendWithManualTransactionHandling
  3. 后端动态构建 SQL:根据标签列表生成多个 INNER JOIN,执行 ORDER BY dateCreated DESC LIMIT N
  4. notesblobsattributes 表中批量获取数据,去除 HTML 标签、解码实体、生成摘要。
  5. 将结果 JSON 写入目标笔记(setContent)。
  6. 前端接收返回的条数并显示成功消息。

为什么性能优秀?

  • 单次同步执行 4 条 SQL(每个模块一条),没有递归调用。
  • 所有排序、过滤均在数据库层完成。
  • 写入使用 setContent 原子操作,避免事务开销。

🔧 拓展新模块指南

假设您要增加一个“热门文章”模块,需要筛选同时具备 hotarticle 标签的笔记,且只显示 5 条。步骤如下:

  1. 在控件笔记上添加配置标签(可选):
    • autoHot=true(是否启用)
    • hotSaveId=目标笔记ID
    • hotLimit=5
    • 摘要长度复用 contentLens
  2. 修改 modules 数组(在 runSync 方法中):

    {
        name: "热门文章",
        enabled: getLabelBool("autoHot", false),
        labels: ["hot", "article"],
        saveId: getLabel("hotSaveId"),
        limit: getLabelInt("hotLimit", 5),
        lens: getLabelInt("contentLens", 250)
    }
  3. 弹窗按钮自动生成(如果您的代码使用动态模板,则无需手动添加;若当前版本为手动,请同步添加一个 <button data-module="4">🔥 热门文章</button>)。
  4. 运行同步:点击弹窗中的“热门文章”按钮,即可生成 JSON。

当前发布的 2.1 版代码已包含动态生成按钮的能力(见文末代码中的 showModuleDialog 函数——它根据 modules 数组遍历生成按钮),因此新增模块后弹窗会自动出现对应选项,无需手工修改 HTML。

📝 完整代码

将以下代码完整复制到您的 JS Frontend 笔记中即可。

[Code] Trilium 首页数据同步控件 2.1:多模块管理 + 弹窗选择

🎯 总结

2.1 版本让首页数据同步更加灵活、轻量。无论是个人博客还是团队知识库,您都可以通过简单的标签配置和模块扩展,实现一键式内容聚合。如果您需要增加新的展示模块(例如“好物推荐”、“每周精选”),只需在 modules 中添加一项,弹窗会自动生成对应按钮,而无需触碰 SQL 或后端逻辑。

立即升级,享受模块化的同步体验!