场景就是,我把一个文档发送到数据库,那这个文档的标题和链接就显示在了该数据库的主键中。
此时我想设计一个模板列,自动获取这个主键所引用的文档的父文档标题和链接(相当于在数据库列中可点击)。
场景就是,我把一个文档发送到数据库,那这个文档的标题和链接就显示在了该数据库的主键中。
此时我想设计一个模板列,自动获取这个主键所引用的文档的父文档标题和链接(相当于在数据库列中可点击)。
这一版,同主键 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 }
Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。
各种网址链接、内容导航。
Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。
Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。
Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper
JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。
锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。
网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。
确认过眼神后的灵魂连接,站在链在!
AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。
PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。
Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。
Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。
Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。
阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。
1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。
Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。
Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。
京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。
Thank God It's Friday! 感谢老天,总算到星期五啦!