有会玩obsidian的templater插件的吗

我想弄个主控模板脚本,放在根目录上

  1. 创建笔记时,可以自动获得所有文件夹,并提示我想将该笔记存放到哪个文件夹(层级递进式询问)
  2. 如若没有则可以直接创建新文件夹
  3. 如若新文件夹还是无法满足要求,可以在该新文件夹中继续创建,直到我找到想要存储到的文件夹
  4. 根据该文件夹所设置的调用模板规则,自动调用已创建模板
  5. 同时提示用户输入笔记名称,若为空,则自动填入当前时间作为笔记名称

由于对JS不熟,利用chatGPT帮忙写

遇到了一个很大的问题

怎么修改都无法通过脚本直接自动获取所有文件夹

所以我想问问大佬,这个插件能实现获取所有文件夹功能吗?

能给个思路吗?

4 Likes

翻了下 obsidian api,发现有一个 getAllFolders 方法,那应该就可以通过 tp.app.vault.getAllFolders() 来获取所有文件夹。

另外「提示想要存放到哪个文件夹」这个功能真的能做到吗?我印象中 Obsidian 的命令面板没法加多层交互吧。

1 Like

1733325575132585974966923263650
我暂时使用的是最基本的选择语句,但是我如果创建了新文件夹,需要手动添加才能去选择,所以才想用脚本直接去获取,具体我也不是特别清楚,这样已经能做到我想要的功能,就是需要我一个一个去添加,所以想改进一下

这个api可以试一下

<%*
let title = tp.file.title;
if (title.startsWith ("未命名")) {
 title = await tp.system.prompt ("输入笔记标题名");
}
if (title == "") {
title = "笔记 "+ tp.date.now ("Y-M-D HH mm ss");
} 
else {
await tp.file.rename (title);
};
const choice = await tp.system.suggester (["00笔记-No Action", "01笔记-记录", "02笔记-阅读","03日记","模板"],["00笔记-No Action", "01笔记-记录", "02笔记-阅读","03日记","模板"]);
let output = ""
switch (choice) {
	 case "00笔记-No Action":
		await tp.file.move ("/00笔记-No Action/" + title);
		output = await tp.file.include ("[[01普通笔记模板]]")
	    break;
	 case "01笔记-记录":
		 await tp.file.move ("/01笔记-记录/" + title);
		 output = await tp.file.include ("[[01普通笔记模板]]");
		 break;
	 case "02笔记-阅读":
		await tp.file.move ("/02笔记-阅读/" + title);
		output = await tp.file.include ("[[01普通笔记模板]]");
		break;
	 case "03日记":
		await tp.file.move ("/03日记/" + title);
		output = await tp.file.include ("[[02日记模板]]");
		break;
	 case "模板":
		await tp.file.move ("/模板/" + title);
		output = await tp.file.include ("[[03模板的模板]]");
		break;
	 default:
		 new Notice ("No");
};
tR += output
%>

你看这个算是实现交互了吗?

1 Like

看起来没问题,朴实无华(

:joy:,是这样的,仅仅是实现了半自动,文件夹少还好说,多了这代码根本扛不住的

不要局限于 tp 自身的 api,templater 最大的自由度就是可以使用任意代码

我给你两个文件参考一下,里面展示所有文件夹我使用的是递归,你可以用上面的人给你指路的 API,里面有些不明所以的封装和代码(这个就别学了,当时瞎写的),你看个思路就行,这个代码是好久以前的了,我已经不用了,不行就用 GPT,让它解释下,以及多查官方的 API 文档,里面有很多好东西

Templater_Dynamic_Function.txt (7.8 KB)
Obsidian_Function.txt (4.4 KB)

自己改下后缀,论坛不允许上传 js

欧克欧克,非常感谢