在数据表中,求一个模板,根据添加到数据库的主键的那个文档,返回它的父文档链接

场景就是,我把一个文档发送到数据库,那这个文档的标题和链接就显示在了该数据库的主键中。

此时我想设计一个模板列,自动获取这个主键所引用的文档的父文档标题和链接(相当于在数据库列中可点击)。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22777 引用 • 91437 回帖 • 3 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    8324 引用 • 37921 回帖 • 158 关注

相关帖子

被采纳的回答
  • 这一版,同主键 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 }
    

    image.png

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 试试这个

    .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>
    
    1 回复
  • JeffreyChen 1 1 评论

    不行的,文档块没有 ParentID

    关联 思源中能否根据子文档 id 查询到父文档 id

    1 回复
    @wilsons 楼主的需求是“根据添加到数据库的主键的那个文档,返回它的父文档链接”,影响就是你这个完全实现不了啊
    JeffreyChen
  • 谢谢 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>
    

    刚开始用减法减后没有转换整形就老报错,这个好坑,减法本来就是数学运算,竟然计算后还得类型转换。

    1 回复
  • 建议首尾加上这个,否则会报错:

    .action{ if index . "custom-avs" }
    
    .action{ end }
    
    1 回复
  • 谢谢 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 }
    
  • wilsons 1 1 评论

    这一版,同主键 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 }
    

    image.png

    1 回复
    你好厉害,我看你回复了好多人的文档问题
    MasterYS
  • guodalu

    佬,捉个小瑕疵,这个模板在如下条件组合下,会跳出黑框:

    条件一:设置链接只有在“ctrl + 鼠标”触碰下才预览。

    条件二:模板的那个列没有开启换行(开启换行会有个问题,就是会有非常大的空白段在表格列中。),在没有开启换行的情况下,文档的标题链接超出了单元格的宽度。

    在上面两个条件下,把鼠标触碰模板列中的链接,会跳出如下黑框。但是,Ctrl + 鼠标触碰则是正常的预览。

    当把单元格拉长能够完全显示模板列中的标题时,鼠标再进行触碰则是符合预期的什么也没有。(因为设置的就是需要 ctrl)。

    一个小 bug.png

    1 回复
  • 把模板内的所有换行和多余的空格去掉就行了

  • guodalu

    这边放下去掉空余空格后的代码,运行良好很完美。供需要的朋友直接取用。顺便说下这个应用场景:

    以父文档及标题作为项目,然后以子文档标题作为项目下的各种子任务。把子任务文档发送到一个任务管理的数据库表中,任务执行的上下文数据存储在子任务文档中。随着任务的杂多,适当的在数据库表中自动展示父文档即“任务所属项目”有一定的必要性。

    .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 }
    
请输入回帖内容 ...

推荐标签 标签

  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖 • 3 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 1 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    171 引用 • 512 回帖
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 5 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 624 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 1 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 221 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 381 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 29 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    27 引用 • 225 回帖 • 170 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 3 关注
  • 电影

    这是一个不能说的秘密。

    121 引用 • 604 回帖
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    16 引用 • 125 回帖 • 1 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 9 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    343 引用 • 720 回帖 • 1 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    209 引用 • 358 回帖
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    6 引用 • 38 回帖
  • 工具

    子曰:“工欲善其事,必先利其器。”

    288 引用 • 734 回帖
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    408 引用 • 1246 回帖 • 586 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 138 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 743 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 18 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 336 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    5 引用 • 26 回帖 • 532 关注
  • 996
    13 引用 • 200 回帖 • 10 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    5 引用 • 15 回帖 • 107 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    197 引用 • 550 回帖