[]()格式的超链接如何在属性中被渲染成可点击的

Bases属性库不支持查询笔记正文,想把一些信息直接写在属性区
发现超链接在属性区是不渲染的
我特别想放在属性区的链接是库外文件的链接,形如 [平面图](<file:///C:\Users\Administrator\Desktop\平面图.pdf>)

试了一下这样写可以在笔记页面、bases表格视图里打开:

file:///C:/Users

image

注意不能用反斜杠\,类似zotero://open-pdf/library/items/xxxxx这类URI

但在卡片视图中显示正常,点击却无法跳转,似乎是因为渲染成了external-link而非metadata-link
并且因为无法加<>,导致文件名也无法加空格 :upside_down_face:


如果是刚需的话,分享一个我很早以前在notion的解决方案:复制到剪贴板后,用ahk脚本识别剪贴板,打开本地文件,类似这样:

; Alt+C - 一键直达文件/链接/搜索/网址(自动识别剪贴板内容)
<!c::  
    if (ErrorLevel) {  
        return
    }  
    ; 打开链接  
    if (RegExMatch(clipboard, "i)^(https?://|ftp://|edge://|zotero://|obsidian://|file:///)[^\s/$.?#].[^\s]*$")) {  
        Run, %clipboard%
    }  
    ; 打开文件
    else if (RegExMatch(clipboard, "^(S:|T:|U:|V:|W:)\\") || FileExist(clipboard)) {
        Run, %clipboard%       
        ; Shellrun(clipboard) ; 非管理员方式打开
    }  
    ; 搜索
    else {  
        ; Run, https://www.bing.com/search?q=%clipboard%
        Run, https://www.google.com/search?q=%clipboard%
    }  
return

谢谢 :face_exhaling:是刚需,但感觉用剪切板再跳转不如记在正文内,添加属性标记已经有文件了,点进笔记再点开库外文件

新版本这个被修复了,属性里正常用[文件](<file:///路径>)就可以:

谢谢提醒!方便多了
目前直接写在属性值里,笔记内和Bases都渲染成功


请教大佬有办法解决吗?感觉是Bases的公式应用:
我又有新需求,同样的文件夹中存储了不同的项目,如下
[库外文件](<file:///C:\Users\Administrator\Desktop\项目1.pdf>)
[库外文件](<file:///C:\Users\Administrator\Desktop\项目1.pdf>)


Obsidian笔记我命名也是项目1、项目2
Bases用公式组合:
“[库外文件](<file:///C:\Users\Administrator\Desktop\” + file.name + “.pdf>)”
能得到对应的链接,但是不渲染


如果也能渲染,那笔记可以删掉好几个属性了,笔记进行改名也不用再去逐一改属性值内容

可以用link函数类似这样写:
link("file:///C:/Users/用户名/Downloads/"+file.name, "📂"+file.name)

注意路径全都用斜杠,不添加<>

效果如图:
image

感谢大佬!那还能更近一步吗?属性值是列表,分别指向对应文件夹里的文件1、文件2

要提取列表第n项,就属性名加一个[n-1]就好了:

link("file:///C:/Users/用户名/Downloads/"+ 属性[0])

才发现我Windows10系统 这一步就不行 :joy:

image

加中括号,直接公式不支持
image

链接只是渲染了,不能跳转

手动输入链接为属性值,Obsidian更新后可以渲染+跳转

我这里一切正常,你得按照我上面发的格式,不能用反斜杠,也不能用尖括号

发现问题了 我只把用户名改为了英文,下载没改为桌面 :sweat_smile:

ps.我前面提的进阶是想生成的公式里可以指向多个文件
image

直接输入属性值,多个文件,只能列表,文本用逗号隔开不渲染了
image

image

用这个map函数可以遍历列表属性:
属性名.map(link("file:///C:/Users/用户名/Downloads/"+ value, "📄"+value))

不过如果太多的话不是很好用,现在的bases表格似乎无法很方便地调整行高,放不下太多链接

效果如图:

谢谢~文件添加一个列表属性,实现了
这样添加一个属性值,公式比我之前预想的应用更广,也更方便过一段时间后看不懂公式了进行维护

库外文件.map(link("file:///C:/Users/Administrator/Desktop/"+file.name+"/"+value, value))
库外文件:
  - 1.png
  - 2.png
  - 3.png

想显示内容也自定义,找ai修改成功,应该是最终版了 ↓

不添加属性,直接修改公式指向多个文件,显示内容也自定义

["","/桌面文件.pdf",file.name + "/平面图.png", file.name + "/平面图.png"].map(
    link(
        "file:///C:/Users/Administrator/Desktop" + value, 
        if(index == 0, "直接打开桌面📁", "桌面的文件","平面图", "立面图")
    )
)

总结一下我目前属性中使用的库外链接

1.直接放入,无插件就行用

要打开的文件:page_facing_up:链接:

[平面图](<file:///C:\Users\Administrator\Desktop\111\平面图.pdf>)

要打开的文件夹:file_folder:路径:

[📁](<file:///C:\Users\Administrator\Desktop\111>)

缺点:资源管理器中复制地址后,不能直接使用

2.放入地址,Bases变化格式

本笔记为111.md
笔记添加的属性及属性值:

---
本文件夹所在文件夹路径: C:/Users/Administrator/Desktop
库外文件名称:
  - 1.png
  - 2.png
  - 3.png
---

打开文件夹所用公式:

link("file:///" + 本文件夹所在文件夹路径+ "/" + file.name, "📁")

实际打开的路径:C:\Users\Administrator\Desktop\111
显示为::file_folder:

打开各文件使用的公式:

库外文件名称.map(
    link(
        "file:///" + 本文件夹所在文件夹路径+ "/" + file.name + "/" + value,"📄" + value
    )
)

实际打开的路径:C:\Users\Administrator\Desktop\111\1.png
显示为::page_facing_up:1.png、:page_facing_up:2.png、:page_facing_up:3.png、

3.放入地址,dataview变化格式

---
文件所在文件夹路径: C:/Users/Administrator/Desktop
---

打开文件夹所用公式:

// 获取当前页面的属性
const page = dv.current();
const 库外文件夹 = page["本文件夹所在文件夹路径"];
const 库外文件 = page["库外文件名称"];

// 获取当前页面文件名
const currentFileName = dv.current().file.name.replace('.md', '');

// 对路径进行URL编码
function encodePath(path) {
    return path.replace(/\\/g, '/').split('/').map(encodeURIComponent).join('/');
}

// 检查库外文件属性是否存在
if (!库外文件夹 || 库外文件夹.trim() === "") {
    dv.paragraph("未设置'本文件夹所在文件夹路径'属性");
} else {
    // 生成文件夹链接部分
    const encodedFolder = encodePath(库外文件夹);
    
    // 创建指向库外同名文件夹的链接
    const encodedCurrentFileName = encodeURIComponent(currentFileName);
    const folderLink = `- [库外📁](<file:///${encodedFolder}/${encodedCurrentFileName}>)`;
    
    if (!库外文件 || 库外文件.length === 0) {
        // 如果库外文件属性不存在,只显示文件夹链接
        dv.paragraph(folderLink);
    } else {
        // 如果库外文件属性存在,生成完整的链接格式
        const fileLinks = 库外文件.map(
            filename => {
                const encodedFile = encodeURIComponent(filename);
                return `[${filename}](<file:///${encodedFolder}/${encodedCurrentFileName}/${encodedFile}>)`;
            }
        );
        
        // 组合所有链接,用" | "分隔
        const finalOutput = [folderLink, ...fileLinks].join(" | ");
        
        // 输出结果
        dv.paragraph(finalOutput);
    }
}

得到结果:
image
在本笔记内显示

主要是配合Virtual Content插件使用
设定的属性「本文件夹所在文件夹路径」有值时才会有转换后的格式出现