wy_bjj
(didingqd)
1
我想要的效果
当我用测试模板创建新笔记时,调用普通笔记模板,并将普通笔记模板里的代码正常输出
理想结果图如下:
实际下面的代码已经能做到了,但是发现:
当我应用时,发现在测试模板输入的标题(变量title)并没有被链接到"普通笔记模板"里的属性title上
实际结果如图:
求解:该如何做,才能让测试模板里的title变量给到我的"普通笔记模板"里的title属性
代码如下
<%*
let title = tp.file.title;
if (title.startsWith ("未命名")) {
title = await tp.system.prompt ("输入笔记标题名");
}
if (title == "") {
title = "笔记 "+ tp.date.now ("mmss");
}
else {
await tp.file.rename (title);
};
const choice = await tp.system.suggester (["笔记-No Action", "笔记-阅读", "笔记-记录"], ["笔记-No Action", "笔记-阅读", "笔记-记录"]);
let output = ""
switch (choice) {
case "笔记-No Action":
output = await tp.file.include ("[[普通笔记模板]]");
await tp.file.move ("/笔记-No Action/" + title);
break;
case "笔记-阅读":
output = await tp.file.include ("[[普通笔记模板]]");
await tp.file.move ("/笔记-阅读/" + title);
break;
case "笔记-记录":
output = await tp.file.include ("[[普通笔记模板]]");
await tp.file.move ("/笔记-记录/" + title);
break;
default:
new Notice ("No Matching Template")
};
tR += output
%>
---
title: "[[<% tp.file.title %>]]"
tags:
CreateDate: <% tp.file.creation_date("Y-M-D H:mm:ss") %>
ModifyDate: <% tp.file.last_modified_date("Y-M-D H:mn:ss")%>
FinishedDate:
status: No Action
---
4 Likes
uupin1
(KongKong)
4
没怎么看懂title的关系。
不过templater里面有tp.config.active_file
能拿到当前活跃的file数据
而obsidian API 提供更改frontmatter值的方法app.fileManager.processFrontMatter
1 Like
uupin1
(KongKong)
5
我觉得这样是不是把事件变得更复杂了?
第一个是在模板内部再选择一次模板
第二个是,如果都是用普通笔记模板,那么在保留普通笔记模板的内容后面,再去做文件移动的逻辑
<%*
// 变量保存输入和选择
-%>
---
//frontmatter的部分
---
tp.file.move
用-%>
是不会显示空行的
1 Like
uupin1
(KongKong)
7
是不同端的缘故吗?我没有用手机端。我会直接用templater的命令新建文件,所以get不到为什么要一个测试模板来用作选择模板的模板。
因为你在include模板的时候,模板已经执行了,你如果想要保持你的思路,还可以先移动文件和改名,再include模板呢?
uupin1
(KongKong)
10
用title: "[[<% tp.config.active_file.basenamee %>]]"
呢
uupin1
(KongKong)
11
或者是
app.fileManager.processFrontMatter(app.workspace.getActiveFile(), fm => {
fm.title = `[[${title}]]`
});
wy_bjj
(didingqd)
12
可以了,更改过来了,感谢大佬,我的主模板又可以实施了
1 Like
wy_bjj
(didingqd)
14
大佬,这命令在哪找的?我从官方文档里没找到这样的格式 
uupin1
(KongKong)
15
1 Like
uupin1
(KongKong)
16
如果你有电脑端的obsidian,也可以在obsidian打开开发者工具,在控制台中输入
app.plugins.plugins["templater-obsidian"].templater.current_functions_object.config.active_file
有时候不知道有什么,就debugger或者console看看具体是怎样的数据
1 Like
wy_bjj
(didingqd)
17
是我死板了,看带问号,以为就只能那么用,吃了没文化的亏,代码基础不太好
1 Like
wy_bjj
(didingqd)
18
不对啊,没看到有basename啊?
原谅我的无知和来自小白的求知
uupin1
(KongKong)
19
看下面那个吧。其实Templater文档没有明说,这里返回的file是obsidian的Tfile的类型。