小白折腾一个月,手搓了个 Obsidian 自制筛选框

小白折腾一个月,手搓了个 Obsidian 自制筛选框

前言

本文通过 dataview 插件实现一个可视化查询面板,可以自定义表头,并可视化根据标签,文件名你,关键字等查询库中笔记,可以通过设置时间间隔,实现类似 anki 卡片的复习效果。

小白折腾一个月,手搓了个 Obsidian 自制筛选框--前言

使用流程

注意事项

  • 压缩包代码中有两个文件,一个 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

文件结构如下图所示:

小白折腾一个月,手搓了个 Obsidian 自制筛选框--使用流程

查询相关语法

查询代码

```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 篇,但是,只想筛选近一周,一月,指定时间内的,就是要搭配上时间参数。 但是各种日期类的选择,是相斥的关系; 比如你用 ”月“ 筛选了,再切换到其他 周,那么”月“参数就会清空;具体看下图解释:

小白折腾一个月,手搓了个 Obsidian 自制筛选框--查询面板

日期搜索框的用法

代码的参数 DateSearch 对应日期搜索输入框的值。

比如输入 2024-04-06 ,标准的 yyyy-mm-dd 格式 ,就是限定哪一天的文件。

比如输入 1月 2月 3月 或者 一月 二月 三月 或者 01月 02月 09月 ,都是限定这 3 月; 没有限定年,就是筛选所有年份

比如输入 1月 1~16号 2月 10~15号 就是限定时间段的

比如输入 2022年 2023年 2024年 1月 就是对比 不同年,相同月的笔记 ,一般用于复盘?或者兴致来了看看那些年的周报总结记录之类的

小白折腾一个月,手搓了个 Obsidian 自制筛选框--日期搜索框的用法

时间块搜索用法

代码的参数 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 值,取最大范围

小白折腾一个月,手搓了个 Obsidian 自制筛选框--时间块搜索用法

Anki 复习

代码的参数 AnkiFrequncey 对应 Anki复习 输入框的值用来表示频率。

比如输入 1 3 5 7 10 11 表示复习频率,倒数前一天 前 3 天 前 5 天 ,限定的是那 1 天的笔记 ,用于复习,用过 Anki 的就不解释了的,就是那个里面一样;这样的好处是不用做卡片,频率自己定 ,随时改。

版本说明

压缩包中有两个版本,一个是 小白搜索框版 另一个是 代码版_直接搜_存结果

  • 小白搜索框版: 带一个可视化查询框,退出当前代码之后 ,那个搜索检索的结果没办法保存。
  • 代码版_直接搜_存结果:就是把复杂的 Dataviewjs 查询语法,提炼成几个参数,修改查询参数即可实现定制化查询结果。

比如我想在 home 页,监控我本月的笔记 ,自动更新 ,那就用这个保存版

小白折腾一个月,手搓了个 Obsidian 自制筛选框--版本说明

视频教程

作为一个小白,也不是程序员,学习了个把月,才完善出这个查询框,至少是符合自己喜欢的,适合自己的,因为一直没有找着别人写的能令自己满意 的,只能自己写了,但是平台 ,还有各个社区,开源的氛围非常的好,很多人分享的有用的知识,非常感谢,我也想把自己的一点儿点儿小心得分享出来。

如果方便还有什么不清楚 的,我也制作了视频讲解

如果哪儿有 bug,也欢迎在文章后留言反馈,我及时修改补充

代码下载

请移步文末的讨论区中下载代码,其中记得把代码中的 "936_外挂通用版/01小白搜索框版" 换成自己的路径。

讨论

若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。



反馈交流

其他渠道

版权声明