QueryView 分享 | 查看所有的 Tag

最近突然又开始用上了标签功能,不过思源内置的标签查看有点难用,就自己用 Query View 写了一个。

作用是点击查看所有的标签,标签块的渲染默认使用了表格组件,

//!js

const useButton = (title, onclick) => {
    let button = document.createElement('button');
    button.className = 'b3-button b3-button--text';
    button.innerText = title;
    button.onclick = onclick;
    return button;
}

const query = async () => {
    let dv = Query.DataView(protyle, item, top);
    dv.render();
    let tags = await Query.request('/api/tag/getTag', {
        sort: 4,
	app: window.siyuan.ws.app.appId
    });

    tags = tags.sort((a, b) => - a.count + b.count);

    const onclick = (tag) => {
        Query.tag(tag.label).then(async (blocks) => {
            if (blocks.length == 0) return;
            blocks = blocks.sorton('created');
            blocks = await Query.prune(blocks, 'leaf');
            blocks = await Query.fb2p(blocks);
            const table = dv.table(blocks, {fullwidth: true} );
            dv.replaceView(main.dataset.id, table);
        });
    }

    const createTagButtons = (tags) => {
        const buttons = [];
        tags.forEach(tag => {
            const button = useButton(`#${tag.label} (${tag.count})`, () => {
                onclick(tag);
            });
            button.style.margin = '5px';
            buttons.push(button);

            // Recursively process children tags
            if (tag.children && tag.children.length > 0) {
                const childButtons = createTagButtons(tag.children);
                buttons.push(...childButtons);
            }
        });
        return buttons;
    }

    const tagButtons = createTagButtons(tags);

    const allTagsList = document.createElement('div');
    allTagsList.style.display = 'flex';
    allTagsList.style.flexWrap = 'wrap';
    tagButtons.forEach(tagElement => {
        allTagsList.appendChild(tagElement);
    });
    dv.addele(allTagsList);
    dv.addmd('---');

    let main = dv.addele('')
}

return query();

效果如下:

PixPin20250307225744.gif

  • 思源笔记

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

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

    28442 引用 • 119759 回帖
  • QueryView
    21 引用 • 84 回帖
4 操作
Frostime 在 2025-12-11 18:50:11 更新了该帖
Frostime 在 2025-03-14 00:25:17 更新了该帖
Frostime 在 2025-03-11 14:10:35 更新了该帖
Frostime 在 2025-03-10 23:00:38 更新了该帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • wilsons 1 1 赞同 1 评论

    借贵贴我也分享个标签矩阵树图

    image.png

    代码 (使用该代码必须先添加简单查询 js 代码片段 [js] 简单查询,让数据从此不再难查,支持显示多字段多视图 )

    //!js
    return query(
      `
    SELECT id,root_id,tag,type,content FROM blocks where tag <> ''
    `,
      // item, 固定不变,❗️勿动,代表本嵌入块对象
      item,
      '',
      ({ row, index, data, options, toLink, toRef, formatDateTime, renderListView, toMdLink, ...args }) => {
        const datas = {};
        data.forEach(item => {
          const tags = item.tag.split(" ");
          tags.forEach(tag => {
            if (!datas[tag]) datas[tag] = [];
            datas[tag].push(item.type === 'd' ? item.id : item.root_id);
            datas[tag] = [...new Set(datas[tag])];
          });
        });
        const optionData = Object.entries(datas).map(([name, value]) => ({
          name: name+" "+value.length,
          value: value.length
        }));
        return args.renderChartView({
          title: {
            text: '标签文档数量矩阵图'
          },
          series: {
            type: 'treemap',
            itemStyle: {
              color: 'rgba(109, 40, 40, 1)',
              borderWidth: 2,
              borderColor: 'rgba(255, 255, 0, 0)',
            },
            data: optionData
    
          },
          type: 'basicTreemap',
        }, item);
      }
    );
    
    treemap 是个不错的思路,挺好看的
    Frostime
  • 看看我的 tag enhance?

  • Afterglow 2 评论

    谢谢 F 佬,冒昧地问一下可以支持多级标签吗?

    1 回复
    我没怎么用多级标签过,目前这个方案插不了多级标签吗?
    Frostime
    @Frostime 是的,多级标签的情况下,只有一级标签下的内容会显示。
    veryzhh
  • 更新了一下,现在应该可以了

    图片.png

    1 回复
  • 谢谢 🎉

  • 牛逼!

  • kuaizi 2 评论

    为什么我的下面没有那个表格?

    上次更改有地方写错了一点,刚刚改回来了
    Frostime 1
    终于可以了。
    kuaizi
  • minglingling

    好用,感谢

  • shouyan

    大佬,请问代码报错是什么原因啊!Snipaste20251210220659.png

  • shouyan
    该回帖仅作者和楼主可见
    1 回复
  • 应该是思源更新,后端 API 增加了限制,需要代码改成这样

    let tags = await Query.request('/api/tag/getTag', {
            sort: 4,
    	app: window.siyuan.ws.app.appId
        });
    

    我已经把最新版本代码更新了。

    图片.png

请输入回帖内容 ...

推荐标签 标签

  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    63 引用 • 289 回帖 • 1 关注
  • JWT

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

    20 引用 • 15 回帖 • 27 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 11 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 548 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 838 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    135 引用 • 798 回帖 • 2 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    188 引用 • 833 回帖 • 2 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    168 引用 • 598 回帖
  • CodeMirror
    2 引用 • 17 回帖 • 197 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    203 引用 • 4024 回帖
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 404 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    43 引用 • 130 回帖 • 259 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    695 引用 • 538 回帖 • 2 关注
  • Outlook
    1 引用 • 5 回帖 • 1 关注
  • CSS

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

    200 引用 • 545 回帖
  • Visio
    1 引用 • 2 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 430 关注
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    599 引用 • 3541 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 429 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    293 引用 • 4496 回帖 • 688 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 99 关注
  • Folo

    Folo 是一个 RSS 阅读和信息聚合应用,整合多种内容源到统一时间线。

    项目地址:https://github.com/RSSNext/Folo

    1 引用 • 3 回帖 • 2 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有机会重制。

    14 引用 • 258 回帖
  • SQLServer

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

    21 引用 • 31 回帖 • 1 关注