我现在日志上的项目内容(关键节点)是通过 dataview 动态从项目文件里面抓的,主要是回顾今天有哪些项目更新过内容(关键节点)。
如果是在一个多项目的会议,我可能会另外建一个meeting note. 在这个meeting note里面通过连接,或者 dataview 将相关项目抓过来展示。这样会议期间的展示以meeting note 为主,需要讨论具体的项目时,就点击项目链接进入。
我现在日志上的项目内容(关键节点)是通过 dataview 动态从项目文件里面抓的,主要是回顾今天有哪些项目更新过内容(关键节点)。
如果是在一个多项目的会议,我可能会另外建一个meeting note. 在这个meeting note里面通过连接,或者 dataview 将相关项目抓过来展示。这样会议期间的展示以meeting note 为主,需要讨论具体的项目时,就点击项目链接进入。
好了,我知道了,你的文件名的年是 4 位数,所以没检索出文件
```dataviewjs
let files = dv.pages().filter(p=>/日志-\d{2,4}年\d{1,2}月\d{1,2}日/.test(p.file.name))
let projects = {}
for(let i of files) {
let content = await app.vault.readRaw(i.file.path)
content = content.match(/#### \[\[(.*?)\]\] ?情况跟进 #工作\/进展/g)
content = content.map(p=>/\[\[(.*?)\]\]/.exec(p))
content.map(p=>projects[p[1]]?projects[p[1]].push(i.file.name):projects[p[1]]=[i.file.name])
}
for(let i in projects) {
dv.paragraph('## '+i)
dv.paragraph('### 情况跟进')
dv.list(projects[i].map(p=>`[[${p}#${i}情况跟进 工作/进展]]`))
}
```
能不能理解为本来在我日志笔记中的会议内容,单独成为了一个新的以会议为主的笔记?
在笔记头部设置Dataview的YAML信息,实现内容的抓取?
对Dataview了解不深刻,感觉特别像是把一个block变成了一个笔记。
诶,原来不是所有日志里都有这样的标题啊
```dataviewjs
let files = dv.pages().filter(p=>/日志-\d{2,4}年\d{1,2}月\d{1,2}日/.test(p.file.name))
let projects = {}
for(let i of files) {
let content = await app.vault.readRaw(i.file.path)
content = content.match(/#### \[\[(.*?)\]\] ?情况跟进 #工作\/进展/g)
if(!content) continue
content = content.map(p=>/\[\[(.*?)\]\]/.exec(p))
content.map(p=>projects[p[1]]?projects[p[1]].push(i.file.name):projects[p[1]]=[i.file.name])
}
for(let i in projects) {
dv.paragraph('## '+i)
dv.paragraph('### 情况跟进')
dv.list(projects[i].map(p=>`[[${p}#${i}情况跟进 工作/进展]]`))
}
```
对的。
我的理解,每个笔记应该尽量围绕同一个/同一类目的来记录或展示内容。比如:
我现在在 Obsidian 写的笔记,基本可以做到在一个笔记文件记录,在其他笔记文件按需要连接/dataview 抓取过来展示
可以试下这个,看能否实现需求。用途:汇总【指定小标题下的全部内容】,包括task、列表、普通文本等
```dataviewjs
//输入目标小标题(含#),例如:#### 项目进度条
const header = '#### 小标题名称'
// 按【路径或文件夹、文件名、标签】筛选并按修改时间降序排列
const pages = dv.pages('"00数据管理" or ""').filter(p => p.file.name.includes("") && !p.file.path.includes("template")).filter(p => p.file.name.includes("") || p.file.name.includes("")).sort(p=>p.file.mtime,"desc");
// This regex will return text from the Summary header, until it reaches
// the next header, a horizontal line, or the end of the file
const regex = new RegExp(`\n${header}\r?\n(.*?)(\n#+ |\n---|$)`, 's')
for (const page of pages) {
const file = app.vault.getAbstractFileByPath(page.file.path)
// Read the file contents
const contents = await app.vault.read(file)
// Extract the summary via regex
const summary = contents.match(regex)
//显示全部包括空结果if (summary) {
//不显示空结果if (summary && summary[1].trim()) {
if (summary && summary[1].trim()) {
// Output the header and summary
dv.header(2, page.file.link)
//或者dv.header(2, '[[' + file.basename + ']]')
dv.paragraph(summary[1].trim())
}
}
```
抱歉昨天回复次数超限了,这个代码能够列出带链接的列表了,我对代码做了简单的修改,把具体项目筛选出来后,还是有2个小问题想再请教一下:
你为啥要把标签删了嘞。。。
```dataviewjs
let files = dv.pages().filter(p=>/日志-\d{2,4}年\d{1,2}月\d{1,2}日/.test(p.file.name))
let projects = {}
for(let i of files) {
let content = await app.vault.readRaw(i.file.path)
content = content.match(/#### \[\[(.*?)\]\] ?情况跟进 #工作\/进展/g)
if(!content) continue
content = content.map(p=>/\[\[(.*?)\]\]/.exec(p))
content.map(p=>projects[p[1]]?projects[p[1]].push(i.file.name):projects[p[1]]=[i.file.name])
}
for(let i in projects) {
dv.paragraph('## '+i)
dv.paragraph('### 情况跟进')
dv.list(dv.array(projects[i])
.sort(p=>moment(/\d{2,4}年\d{1,2}月\d{1,2}日/.exec(p)[0],'YYYY年MM月DD日').valueOf(),'desc')
.map(p=>`[[${p}#${i} 情况跟进 工作/进展]]`))
}
```
另外我才发现标题里的链接在引用时和其他文本之间是有空格的,不管原文本里有没有空格
[[日志-2022年11月08日#ABC情况跟进 工作/进展]] #我以为的
[[日志-2022年11月08日#ABC 情况跟进 工作/进展]] #实际的
```dataviewjs
let files = dv.pages().filter(p=>/日志-\d{2,4}年\d{1,2}月\d{1,2}日/.test(p.file.name))
let projects = {}
for(let i of files) {
let content = await app.vault.readRaw(i.file.path)
content = content.match(/#### \[\[ABC\]\] ?情况跟进 #工作\/进展/g)
if(!content) continue
content = content.map(p=>/\[\[(.*?)\]\]/.exec(p))
content.map(p=>projects[p[1]]?projects[p[1]].push(i.file.name):projects[p[1]]=[i.file.name])
}
for(let i in projects) {
dv.paragraph('### 情况跟进')
dv.list(dv.array(projects[i])
.sort(p=>moment(/\d{2,4}年\d{1,2}月\d{1,2}日/.exec(p)[0],'YYYY年MM月DD日').valueOf(),'desc')
.map(p=>`[[${p}#${i} 情况跟进 工作/进展]]`)) }
最后还有一个问题想请教一下:
图片中我在测试时项目ABC的子标题中也有日期(右下角①位置),有没有什么方法能够将链接定位至这些带了日期的子标题(右下角①位置)呢?
啊,为什么要这样写呢,日期不是已经在标题里了吗
明白,我可能是比较懒惰的类型···
我会以日志为主、ZK为辅来进行记录,有点像是在做个人wiki。
对于频繁使用的项目、人物、企业等等会有专门的文件夹来存放词条,但是更新频率很慢。
我是想尝试用Dataview来实现在这些词条中直接看到有关联的重要信息,预览或者跳转的需求就能满足我的使用。如果涉及到想要了解全部,会采取直接搜索的办法。
这样以来笔记会比较碎片化,后期不好进行整理。可能会成为我未来的很大困扰。
我会认真考虑一个主题的所有信息保存在一份笔记中的思路。
哎哟,不错,这个解决了我的需求!注释也很清晰,非常感谢!
这个非常有用,感谢
请问大神可以增加一个根据时间筛选的句子吗?想放到周记模版里,例如某一周的时间模版为:[[{{date:YYYY-MM-[W]ww}}]],希望筛选出本周内的七天日记,汇总其中的标题,请教大神怎么写?