
思源现阶段有一个缺点, 双链不是动态的, 你只能生成已有的文档的双链, 而不能获取在将来写的文档的双链, 需要用户做一个手动的收集.(可能之后的子页面视图会改变这一状况). 而个人感觉上 SQL 查询的样式, 在视觉上占地儿太大了. 于是尝试通过 SQL 来实现 “双链的” 效果. 要考虑的点有两个.
- 链接指向的文本, 即 SQL 的查询结果
- SQL 嵌入块的样式
因为 SQL 块本身带有打开对应文档的功能, 所以需要需要查询出的 “文本”. 最直接, 最简单的, 就是显示出对应文档的一级标题. 但这版本思源笔记会默认在最顶端显示文件名, 很多情况下我不会去写一级标题, 而我自己会在每个文档头生成基础的文档信息 (在本文开头所展示的内容, 我会给他们设置不同的属性), 所以我直接将想要的文档信息通过 SQL 查询出来.
@Path: /SiYuan / 动态双链. sy 我给这个本文块设置了别名为 @Path
SELECT * FROM blocks WHERE box='.action{$docBox}' and name='@Path' and content LIKE '%?%'
其次就是 SQL 嵌入块的样式. 我个人不希望一个提示性的链接会侵占太多空间, 同时需要我能够方便的点击打开笔记的按钮, 因此通过 CSS 将其设定为, 查询语句中有 @Path 时, 会直接更改 SQL 的样式 , 且将 iocn 调整为出现在左侧.
示意图

本文仅代表一种思路, 并不代表一个优秀的实操方式. 是否能够有一个有实际作用, 有效的 SQL 动态链接, 取决于每个人的笔记组织方式和个人习惯.
代码
CSS
/*动态双链效果*/.protyle-wysiwyg [data-content*=\@Path][data-node-id].render-node[data-type="NodeBlockQueryEmbed"] .protyle-icons{left:4px;right:auto;}.protyle-wysiwyg [data-content*=\@Path][data-node-id].render-node[data-type="NodeBlockQueryEmbed"]{padding : 0px!important;max-width:500px!important;}/*注意@需要转义符 \@ *//*DocInfo*/[data-node-id][name="@DocInfo"]{font-size: 14px!important;padding:0px!important;color:#7a8892!important;font-style:italic;}
Templates
DocInfo
.action{/*获取文档的基本信息*/}.action{$docID:=.id}.action{$docTitle := .title}.action{$docBox :=" "}.action{$docPath := " "}.action{$docCreated := " "}.action{$docUpdated := " "}.action{$getDocInfo := (queryBlocks "SELECT * FROM blocks WHERE id='?' and type='d' " $docID )}.action{range $v:= $getDocInfo}.action{$docBox =$v.Box}.action{$docPath = $v.Path}.action{$docCreated = toDate "20060102150405" $v.Created | date "2006-01-02"}.action{$docUpdated = $v.Updated}.action{end}.action{$getAssets := (queryBlocks "SELECT * FROM blocks WHERE box = '?' and type= 'd' and path like '%Assets%' LIMIT -1" $docBox)}.action{$assetsID:=" "}.action{range $v:= $getAssets}.action{$assetsID = $v.ID}.action{end}.action{/*DOCPART*/}---{: name="@DocInfoBegin" alias=""}- @CreateTime: .action{$docCreated}- @Author: Crowds- @Type: Assets / doc / Schedule- @Assets: ((.action{$assetsID})){: name="@DocInfo" alias=""}@Path: .action{$docPath}{: name="@DocInfo" alias="@Path"}---{: name="@DocInfoEnd" alias=""}
DynLink
.action{/*获取文档的基本信息*/}.action{$docID:=.id}.action{$docTitle := .title}.action{$docBox :=" "}.action{$docPath := " "}.action{$docCreated := " "}.action{$docUpdated := " "}.action{$getDocInfo := (queryBlocks "SELECT * FROM blocks WHERE id='?' and type='d' " $docID )}.action{range $v:= $getDocInfo}.action{$docBox =$v.Box}.action{$docPath = $v.Path}.action{$docCreated = toDate "20060102150405" $v.Created | date "2006-01-02"}.action{$docUpdated = $v.Updated}.action{end}{{SELECT * FROM blocks WHERE box='.action{$docBox}' and name="@DocInfo" and alias='@Path' and content LIKE '%?%' }}
1 操作
crowds21 在 2021-08-03 21:09:58 更新了该帖
https://ld246.com/article/1627995128443
