小白折腾一个月,手搓了个 Obsidian 自制筛选框
前言
本文通过 dataview 插件实现一个可视化查询面板,可以自定义表头,并可视化根据标签,文件名你,关键字等查询库中笔记,可以通过设置时间间隔,实现类似 anki 卡片的复习效果。
使用流程
注意事项
- 压缩包代码中有两个文件,一个 css 一个 js 文件。
- view.css:装的是 css 调整文件,比如搜索框上的按钮的大小 间距 ,字体颜色
- view.js:就是查询的代码
view
这个名字不能换,你不能换成其他的,就是死的,以上 2 个都是view.css
view.js
是一起放置,放置的路径,你自己改,不是固定的,按需求来- 路径写的时候,注意结尾不要有反斜杠 ,比如
("936_外挂通用版/02代码版_直接搜_存结果"
说的是这个 ” 结果 ” 俩字儿后面没有/
- 查询语法就是说你可以使用 n 次,想粘哪儿就粘哪儿 ;就是类似 一般的 dataviewjs 查询 语法一样;
- 代码在暗色主题下效果最佳
- 全宽显示效果最佳。
设置--显示--缩减栏宽
选项关闭。如果只想对代码文件全宽显示,建议使用Blue Topaz主题 打开3.6.2 中的dataview表格全宽显示,或者直接在文件属性面板中声明cssclasses:fullwidth
文件结构如下图所示:
查询相关语法
查询代码
```dataviewjs
// 定义参数对象
let params = {
headers : ["ctime","mtime","截止日期"], // 动态可定制表头
FolderKey : " ", // 前置过滤 - 文件夹;
TagKey : "", // 前置过滤 - 标签;
filterFileName : " ", // 文件名搜索
filterTags : " ", // 标签搜索
WhichKey : " ", // key搜索 ~ 哪个字段 ?哪几个个字段 ?排除哪些?
KeyValueFilter : " ", // 字段的value值,搜索啥?
dateFilterBy : "file.ctime", // 要筛选的日期基准如 file.ctime;也 是自己定义的字段
DateSearch : " ", // 日期中文搜索; 28 29号当天
Intervalday: " ", // 时间块筛选; -2 0 表示过去的2天
AnkiFrequncey : " " , // anki 复习间隔 ;输入( 13 5 7 10 这样的间隔,+9 表示未来第9天)
ContainerStartDateValue : "", // 日期起点 ,限制格式 yyyy-mm-dd 标准格式
ContainerEndDateValue : "", // 日期截止点,限制格式 yyyy-mm-dd 标准格式
ContainerMonthDateValue : "", // 限定月分 -格式有要求 ,比如 2024-08
ContainerWeekDateValue : "", // 限定周 - 格式有妹,比如 2024-W25 这个w要大写
sortOption : "file.ctime", // 排序区域(file.name file.ctime) 按什么排
sortOrder : "desc", // 排序方式(asc\desc) -全局变量
PageSize : "15", //第3排的, 单页max, 输入框的值
pageNum : 1 , // 当前页
};
// 使用参数对象调用 dv.view
(async () => {
await dv.view("936_外挂通用版/01小白搜索框版", params);
})();
```
参数解释
- 必写 - 表头:
headers ["ctime","mtime","截止日期"],
这个是一个动态表头,里面可以写系统的那些 ,file.name , citme 之类;file
可省去,也可以写自己的字段 key 名 - 必写 - PageSize : 就是一页展示的结果的数量
- 必写 - pageNum : 1 ,这个默认就行,这个是翻页的,当查询结果很多时,超出一页了,就是说每刷新一次数据,自动重置到第 1 页。
- 可选 - sortOption: 就是排序的区域,你按什么排序?创建时间?文件名?修改时间? ;默认的是
file.ctime
即创建时间 - 可选 - sortOrder : 就是排序方向 ,升序,还是降序? asc ,还是 desc
- 前置过滤 -
FolderKey
文件夹: 比如你有一些路径,不想它参与日常搜索,比如日记 ,比如模板;日记 模板
, 就会自动排除带这 2 项的 folder 文件夹了的,可以多个 - 前置过滤 -
TagKey
标签过滤:这个同上 - 常见搜索 -
filterFileName
: 就是文件名搜索,但是做了优化; 可以多关键字,可以多排除,如:obs +插件 -美化
+ 表示 or - 表示排除;每一类可以有 n 个参数 - 常见搜索 -
filterTags
: 就是标签搜索,同上, 不用写#
号,直接写就行了; (一样多关键字, and , or 适用) - 常见搜索 -
filterTags
: 就是对 key 的搜索,排查。 同上,可 and , or ,可排除 - 常见搜索 -
KeyValueFilter
: 就是对键值的搜索 ;优化了的,因为这个是扫描的所有 key 和它对应的 value 值,你大概率可能不记得放哪个 key 了,可以直接搜 value 就行了
查询面板
面板中的日期类跟文件名搜索在逻辑关系是 and
,比如你前面,搜索了文件名带 Obsidian 的笔记,可能有 300 篇,但是,只想筛选近一周,一月,指定时间内的,就是要搭配上时间参数。 但是各种日期类的选择,是相斥的关系; 比如你用 ”月“ 筛选了,再切换到其他 周,那么”月“参数就会清空;具体看下图解释:
日期搜索框的用法
代码的参数 DateSearch
对应日期搜索输入框的值。
比如输入 2024-04-06
,标准的 yyyy-mm-dd 格式 ,就是限定哪一天的文件。
比如输入 1月 2月 3月
或者 一月 二月 三月
或者 01月 02月 09月
,都是限定这 3 月; 没有限定年,就是筛选所有年份
比如输入 1月 1~16号
2月 10~15号
就是限定时间段的
比如输入 2022年 2023年 2024年 1月
就是对比 不同年,相同月的笔记 ,一般用于复盘?或者兴致来了看看那些年的周报总结记录之类的
时间块搜索用法
代码的参数 Intervalday
对应 时间块搜
输入框的值用来表示一定间隔区间。 如同数学上的那个区间 (0 ,9 ) (-3,10) ,就是从时间线上,切出一块儿来展示。
比如输入 (0 ,9 )
表示,限定 第 0 天~9 天的; 0 就是当天
比如输入 (-3 ,10)
表示,限定 过去 3 天 + 未来 9 天; 就是 12 天的笔记
比如输入 (-3 ,10)
这个 10 为什么会有未来 ? 你的时间筛选的基准是 file.ctime,确实 是没有到那一天; 但是有人可能做计划,有一个 Page 的执行时间就是 9 天后; 类似于 Task 的安排的截止时间
比如输入 0
, 就输入一个 0 ,就是表示当天的笔记 ;
比如输入 -3
, 就输入一个 -3 ,会自动补全为 -3 0
即自动补全时间块的另外一边儿为 0 ,就是限定最近 3 天的笔记
比如输入 -16 -14
,就是指 往前数前 16 天, 和前 14 天之间的笔记
比如输入 -10 -5 -4 6 18
; 输入 多个,会计算 min 与 max 值,取最大范围
Anki 复习
代码的参数 AnkiFrequncey
对应 Anki复习
输入框的值用来表示频率。
比如输入 1 3 5 7 10 11 表示复习频率,倒数前一天 前 3 天 前 5 天 ,限定的是那 1 天的笔记 ,用于复习,用过 Anki 的就不解释了的,就是那个里面一样;这样的好处是不用做卡片,频率自己定 ,随时改。
版本说明
压缩包中有两个版本,一个是 小白搜索框版
另一个是 代码版_直接搜_存结果
小白搜索框版
: 带一个可视化查询框,退出当前代码之后 ,那个搜索检索的结果没办法保存。代码版_直接搜_存结果
:就是把复杂的 Dataviewjs 查询语法,提炼成几个参数,修改查询参数即可实现定制化查询结果。
比如我想在 home 页,监控我本月的笔记 ,自动更新 ,那就用这个保存版
视频教程
作为一个小白,也不是程序员,学习了个把月,才完善出这个查询框,至少是符合自己喜欢的,适合自己的,因为一直没有找着别人写的能令自己满意 的,只能自己写了,但是平台 ,还有各个社区,开源的氛围非常的好,很多人分享的有用的知识,非常感谢,我也想把自己的一点儿点儿小心得分享出来。
如果方便还有什么不清楚 的,我也制作了视频讲解
如果哪儿有 bug,也欢迎在文章后留言反馈,我及时修改补充
代码下载
请移步文末的讨论区中下载代码,其中记得把代码中的 "936_外挂通用版/01小白搜索框版"
换成自己的路径。
讨论
若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。
反馈交流
其他渠道
版权声明
版权声明:所有 PKMer 文章如果需要转载,请附上原文出处链接。