场景就是,我把一个文档发送到数据库,那这个文档的标题和链接就显示在了该数据库的主键中。
此时我想设计一个模板列,自动获取这个主键所引用的文档的父文档标题和链接(相当于在数据库列中可点击)。
场景就是,我把一个文档发送到数据库,那这个文档的标题和链接就显示在了该数据库的主键中。
此时我想设计一个模板列,自动获取这个主键所引用的文档的父文档标题和链接(相当于在数据库列中可点击)。
这一版,同主键 ID 样式一样,支持预览
.action{ if index . "custom-avs" }
.action{$id := .id}
.action{$blocks := queryBlocks "select * from blocks where id='?'" $id}
.action{ $b := first $blocks}
.action{$list := splitList $b.ID $b.Path }
.action{$f := first $list }
.action{$len := len $f }
.action{$len := sub $len 1 }
.action{$len := int $len }
.action{ if ne 0 $len }
.action{$f := substr 1 $len $f}
.action{$list := splitList "/" $f }
.action{$ParentID := last $list }
.action{$ParentID := trim $ParentID }
.action{$blocks := queryBlocks "select * from blocks where id='?'" $ParentID}
.action{$b := first $blocks}
<span data-type="block-ref" data-id=".action{$b.ID}" data-subtype="s" class="av__celltext av__celltext--ref" style="">.action{$b.Content}</span>
.action{ end }
.action{ end }
试试这个
.action{$id := .id}
.action{$blocks := queryBlocks "select * from blocks where id='?'" $id}
.action{ $b := first $blocks}
.action{$blocks := queryBlocks "select * from blocks where id='?'" $b.ParentID}
.action{ $b := first $blocks}
<a href="siyuan://blocks/.action{$b.ID}" onclick="event.stopPropagation()">.action{$b.Content}</a>
不行的,文档块没有 ParentID
谢谢 J 佬,明白了。
整了半天,搞好了,这回应该行了。
.action{$id := .id}
.action{$blocks := queryBlocks "select * from blocks where id='?'" $id}
.action{ $b := first $blocks}
.action{$list := splitList $b.ID $b.Path }
.action{$f := first $list }
.action{$len := len $f }
.action{$len := sub $len 1 }
.action{$len := int $len }
.action{$f := substr 1 $len $f}
.action{$list := splitList "/" $f }
.action{$ParentID := last $list }
.action{$ParentID := trim $ParentID }
.action{$blocks := queryBlocks "select * from blocks where id='?'" $ParentID}
.action{$b := first $blocks}
<a href="siyuan://blocks/.action{$b.ID}" onclick="event.stopPropagation()">.action{$b.Content}</a>
刚开始用减法减后没有转换整形就老报错,这个好坑,减法本来就是数学运算,竟然计算后还得类型转换。
谢谢 J 佬的指点,最终版,加了顶级文档没有父文档报错的判断。
.action{ if index . "custom-avs" }
.action{$id := .id}
.action{$blocks := queryBlocks "select * from blocks where id='?'" $id}
.action{ $b := first $blocks}
.action{$list := splitList $b.ID $b.Path }
.action{$f := first $list }
.action{$len := len $f }
.action{$len := sub $len 1 }
.action{$len := int $len }
.action{ if ne 0 $len }
.action{$f := substr 1 $len $f}
.action{$list := splitList "/" $f }
.action{$ParentID := last $list }
.action{$ParentID := trim $ParentID }
.action{$blocks := queryBlocks "select * from blocks where id='?'" $ParentID}
.action{$b := first $blocks}
<a href="siyuan://blocks/.action{$b.ID}" onclick="event.stopPropagation()">.action{$b.Content}</a>
.action{ end }
.action{ end }
这一版,同主键 ID 样式一样,支持预览
.action{ if index . "custom-avs" }
.action{$id := .id}
.action{$blocks := queryBlocks "select * from blocks where id='?'" $id}
.action{ $b := first $blocks}
.action{$list := splitList $b.ID $b.Path }
.action{$f := first $list }
.action{$len := len $f }
.action{$len := sub $len 1 }
.action{$len := int $len }
.action{ if ne 0 $len }
.action{$f := substr 1 $len $f}
.action{$list := splitList "/" $f }
.action{$ParentID := last $list }
.action{$ParentID := trim $ParentID }
.action{$blocks := queryBlocks "select * from blocks where id='?'" $ParentID}
.action{$b := first $blocks}
<span data-type="block-ref" data-id=".action{$b.ID}" data-subtype="s" class="av__celltext av__celltext--ref" style="">.action{$b.Content}</span>
.action{ end }
.action{ end }
这边放下去掉空余空格后的代码,运行良好很完美。供需要的朋友直接取用。顺便说下这个应用场景:
以父文档及标题作为项目,然后以子文档标题作为项目下的各种子任务。把子任务文档发送到一个任务管理的数据库表中,任务执行的上下文数据存储在子任务文档中。随着任务的杂多,适当的在数据库表中自动展示父文档即“任务所属项目”有一定的必要性。
.action{ if index . "custom-avs" }.action{$id := .id}.action{$blocks := queryBlocks "select * from blocks where id='?'" $id}.action{ $b := first $blocks}.action{$list := splitList $b.ID $b.Path }.action{$f := first $list }.action{$len := len $f }.action{$len := sub $len 1 }.action{$len := int $len }.action{ if ne 0 $len }.action{$f := substr 1 $len $f}.action{$list := splitList "/" $f }.action{$ParentID := last $list }.action{$ParentID := trim $ParentID }.action{$blocks := queryBlocks "select * from blocks where id='?'" $ParentID}.action{$b := first $blocks}<span data-type="block-ref" data-id=".action{$b.ID}" data-subtype="s" class="av__celltext av__celltext--ref" style="">.action{$b.Content}</span>.action{ end }.action{ end }
子曰:“工欲善其事,必先利其器。”
Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。
Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。
CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。
V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。
微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。
小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。
Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。
MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。
域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。
Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。
让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
新手上路,请谨慎驾驶!
OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。
确认过眼神后的灵魂连接,站在链在!
C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。
Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。
jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。
各种网址链接、内容导航。
Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。