思源现阶段有一个缺点, 双链不是动态的, 你只能生成已有的文档的双链, 而不能获取在将来写的文档的双链, 需要用户做一个手动的收集.(可能之后的子页面视图会改变这一状况). 而个人感觉上 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