Dataviewjs的奇技淫巧

大佬,我想通过看一些经典电视剧分析一下他们的镜头语言,因此每一集都要做一个笔记,我在一个文件夹下用不同的电视剧名字分别建立了文件夹,里面放着对应每一集的一个笔记md文件,通过您的范例,实现了效果,真的特别特别激动,但还有些细节问题想请教下,如下图:

  1. 虽然都正确显示了,但每部电视剧下面都会有一句“Dataview: No results to show for table query.”的空白,又丑又占空间,能删掉吗?
  2. 每个文件后面都会显示“- XX天”,我想把这个去掉可以吗?
  3. 文件名能不能都强制竖排显示呢?文件多了就竖排,但文件少他就横排了。
    能不能解决问题都不大,还是要感谢大佬,我都找了两天了,最后才想起论坛搜索下吧 :+1:


    QQ截图20231017111959
for(let i of dv.pagePaths(`"3.待整理"`).groupBy(p=>p.split("/")[1])){
dv.paragraph(`## ${i.key}`);
let a=dv.pages(`"3.待整理/${i.key}"`).length
dv.paragraph(`共有==${a}==篇`);
let div = dv.container.createEl('div')
dv.api.table(
	        dv.pages(`"3.待整理"`)
.filter(p=>p.file.folder.split("/")[1]==i.key)
.sort(page =>page.file.mday,"desc")
.map(p=>p.file.link+''),[],
	        div,
	        dv.component,
	        dv.currentFilePath
	    )
a = div.querySelectorAll('.table-view-th')
a.forEach(p=>p.style.writingMode = "vertical-rl")
a = div.querySelector('.dataview.dataview-error-box')
a.style.display='none'
}

我去,大佬给跪了!! :muscle: 真是人狠话不多,效果超赞,NB

改成下面这样之后,可以对付“2023-10-18 23:00”这样的格式了。

let files_p = dv.pages().filter(f => moment(f.creationTime).unix() >= moment(dv.current().Startdate.toFormat(“yyyy-MM-dd”)).unix() && moment(f.creationTime).unix() <= moment(dv.current().Enddate.toFormat(“yyyy-MM-dd”)).unix()).map(p=>p.file.path)

const files = app.vault.getMarkdownFiles().filter(p=>files_p.includes(p.path))

多谢啦!!!

大佬,我又来了,我发现这个统计当月活力图的表格很实用,我想问下,得怎样修改,才能只显示当月,不显示上个月的结果?纯小白,测试了半天也没有结论


代码能发文本吗,我找不到了

let y = 2023
let m = Array(12).fill(0).map((v,i)=>{return i});
let d = [31,29,31,30,31,30,31,31,30,31,30,31]

for(let i of m)
{
    let n = Array(d[i]).fill(0).map((v,i)=>i+1);
    let a = Array(d[i]).fill(0);

    for(let j of dv.pages(`""`)
        	.filter(p=>moment(Number(p.file.cday)).year()==y
                    && moment(Number(p.file.cday)).month()==i)
        	.groupBy(p=>moment(Number(p.file.cday)).date()))
         a[j.key-1] = j.rows.length;
    
    if(a.every(p=>p==0))
        continue
    dv.header(4, i+1+"月");
    dv.paragraph(`\`\`\`chart
type: line
labels: [${n}]
series:
- title: 3.待整理
  data: [${a}]
labelColors: true
\`\`\``)
}
let y = 2023
let m = 10
let d = moment(`${y}-${m}`).daysInMonth()

let n = Array(d).fill(0).map((v,i)=>i+1);
let a = Array(d).fill(0);
for(let j of dv.pages(`""`)
    	.filter(p=>p.file.cday.year==y
                && p.file.cday.month==m)
    	.groupBy(p=>p.file.cday.day))
     a[j.key-1] = j.rows.length;

if(!a.every(p=>p==0)){
dv.header(4, m+"月");
dv.paragraph(`\`\`\`chart
type: line
labels: [${n}]
series:
- title: 3.待整理
  data: [${a}]
labelColors: true
\`\`\``)}
 :+1:稳得很    NB

大佬,能否用表格形式展示某个文件夹下或者包涵某个标签的所有页面的内容?用dataview能很简单的展示标题,但是好像无法展示对应内容,dataviewjs又实在不太懂 :sob:我的目的是配合mini主题瀑布流展示对应标签或者文件夹下的很简短的笔记,这样浏览起来方便的多

你应该会基础的检索功能吧,dv.pages(``)里填的和dataview功能的from是一样的东西

let files = dv.pages(`"100-Index/150-卡片"`)
dv.table(
	['文件','内容'],
	await Promise.all(files.map(async(p)=>{
	let c=await app.vault.readRaw(p.file.path)
	return [p.file.link,c]}))
)
1 个赞

感谢大佬,不过有点卡,可能是因为我的文件数量太多了(63个)。我在琢磨一下看看有没有别的办法吧,感觉聚合大量内容太难了

有点卡啊,那这样呢

let files = dv.pages(`"100-Index/150-卡片"`)
dv.table(
	['文件','内容'],
	await Promise.all(files.map(async(p)=>{
	let c=await app.vault.cachedRead(app.vault.getAbstractFileByPath(p.file.path))
	return [p.file.link,c]}))
)

奇怪,我测试了一下,另一个145个文件的文件夹不卡,而这个64的贼卡。我先排除一下看看是不是这个文件夹里面哪个文件有问题

哦,我知道了,我用了folder note,然后我在这个文件夹的folder note里面启用了这个dataviewjs,然后结果就是我想显示这个文件夹下的所有文件的话,会把folder note这个页面也显示进去,循环往复越来越卡 :sweat_smile:换个地方显示就好了,感谢大佬 :laughing: :laughing: :laughing:

大佬,刚忽然有个想法,不知道能不能实现。下面是我自己写的读书笔记统计,有没有办法,点击下面的图片跳转笔记呢?默认只能点击图片上面的标题才能跳转,点击图片就变成了看源码了,这么大的空间白白浪费了。附上代码:

[!success]+ 已读

Table
(“![|50](” + cover + “)”) as “封面”, author as “作者”,updated as “修改”
From “1.索引/Book”
Where icontains(status,“已读”)
sort updated desc

这个比较麻烦,插件里基本没有直接的功能实现,但是可以用前端的方法硬凑出来。

let files = dv.pages(`"1.索引/Book"`).filter(p=>p.status.includes('已读'))
let m=files.map(p=>{
let a=dv.paragraph("![|50](" + p.cover + ")")
a.onclick=(e)=>{
if(e.ctrlKey)
app.workspace.getLeaf('tab').openFile(app.vault.getAbstractFileByPath(p.file.path))
else
app.workspace.getMostRecentLeaf().openFile(app.vault.getAbstractFileByPath(p.file.path))
}
return [a,p.author,p.updated]
})
dv.table(['cover','a','u'],m)

我用dataviewjs运行出现下面的错误提示


用dataview出现下面的错误提示,我也搞迷糊了

下面这是我其中一个读书笔记的文档属性,不知道有没有关系

第一行后面换成这样p.status?.includes试试

成功了!!!大佬你这水平我感觉都可以开个课去卖,完全没得问题 :+1: