注意:如果你只打算写写日记,对一些查询等的高级功能没有兴趣,可以不用关心这篇文章提到的内容。
如果你不在意的话,那么 2.11.1 版的更新对你旧有的 daily note 写作不会构成任何干扰,完全可以无视。
新的 daily note 属性
从 2.11.1 开始, 思源在创建日记的时候会自动为文档添加 custom-dailynote-yyyymmdd
属性, 以方便将日记文档同普通文档区分。
详情请见 Github Issue #9807
具体来说,你现在每次点击菜单或者按下 Alt + 5 创建 daily note 后,都会在文档中添加一个标识属性
例如这里 dailynote-20231205 属性就代表了这篇文档是 2023 年 12 月 05 日的日记。
本方案对于月记、周记等把好几天的日记写在一个文档里有有一定的适配性。比如对于一个写月记的人来说,最后他的月文档里会有从 dailynote-20231001 到 dailynote-20231031 一整个月的时间标识(前提是你天天写日记)。
这个属性有什么用?
增加这个属性,带来而最直接的好处就是,以后你可以用非常简单的方式来查找指定日期的日记了,比如如下的 SQL 代码:
select distinct B.* from blocks as B join attributes as A
on B.id = A.block_id
where A.name like 'custom-dailynote-202312%'
order by A.value desc;
使用 custom-dailynote-202312%
就能匹配到 2023 年 12 月所有的日记,又或者你想要匹配 2023 年 10 月 10 号到 13 号的日记,可以这么查询
select distinct B.* from blocks as B join attributes as A
on B.id = A.block_id
where A.name like 'custom-dailynote-%'
and A.value >= '20231010' and A.value <= '20231013'
order by A.value desc;
更进一步的好处是,此后关于日记相关的插件开发起来会简单不少。
注:用户自定义属性会有一个隐藏的 custom- 前缀,比如在自定义面板里,你看到一个名叫 X 的属性,实际上在底层这个属性的名称是 custom-X
如何兼容过去的日记
目前,这个新的属性只会在 2.11.1 版后的思源中生效——也就意味着你之前的日记是没有这个属性的。
为了兼容过去的日记,本人在今日笔记插件中开发了为过去的日记添加日记属性的功能。源代码在这里 https://github.com/frostime/siyuan-dailynote-today/blob/v1.3.0/src/func/dailynote/past-dn.ts。如果有插件开发者需要,可以参考这里的代码。
在插件本体中,你也可以在「设置-日记」一栏点击「为过去的 Daily Note 补充文档属性」按钮
当弹窗提示「ALL Done」的时候,就说明已经完成了。
开发者守则
- 打开日记并自动添加属性的功能,是在后端接口
/api/filetree/createDailyNote
当中内置实现的,也就是说如果你调用了这个接口,那么文档就会自动添加这个属性 - 如果开发者要通过别的方法,例如
createDocWithMd
接口创建日记 (例如日历插件),请手动为文档添加该属性,参考代码如下/* * Copyright (c) 2023 by frostime. All Rights Reserved. * @Author : frostime * @Url : https://github.com/frostime/siyuan-dailynote-today/blob/v1.3.0/src/func/dailynote/dn-attr.ts */ export function formatDate(date?: Date, sep=''): string { date = date === undefined ? new Date() : date; let year = date.getFullYear(); let month = date.getMonth() + 1; let day = date.getDate(); return `${year}${sep}${month < 10 ? '0' + month : month}${sep}${day < 10 ? '0' + day : day}`; } /** * 对 DailyNote 的自定义属性进行设置, custom-dailynote-yyyyMMdd: yyyyMMdd * https://github.com/siyuan-note/siyuan/issues/9807 * @param doc_id 日记的 id */ export function setCustomDNAttr(doc_id: string, date?: Date) { let td = formatDate(date); let attr = `custom-dailynote-${td}`; // 构建 attr: td let attrs: { [key: string]: string } = {}; attrs[attr] = td; serverApi.setBlockAttrs(doc_id, attrs); }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于