JS 求助 - 按更新时间排序,查询当前文档内的块

3 个 JS 语句
查标题
  1. 自动查询当前及子文档(手动填思源随机生成的文档 ID 也行)
  2. 查询该文档及子文档的所有四级标题
  3. 按更新时间排序(上新下旧)
  4. 右侧显示更新日期(可以关闭,万一觉得日期碍眼)
查段落(一)
  1. 和查标题要求一样,不过改成查段落块、表格块
    • 我不知道 JS 形式表格块能否显示,不能的话算了
  2. 不渲染图片,无论本地还是图床(显示成文本)
    • 就是类似在思源复制图片,它在剪贴板时的文本状态
  3. 查询结果数量为 10
查段落(二)倒序
  1. 查段落(一) 要求一样,不过改成倒序(上旧下新)
  • 思源笔记

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

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

    24546 引用 • 100505 回帖
  • Q&A

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

    9273 引用 • 42185 回帖 • 117 关注
4 操作
8V9q7V 在 2025-03-05 18:59:59 更新了该帖
8V9q7V 在 2025-03-05 17:25:42 更新了该帖
8V9q7V 在 2025-03-05 17:24:15 更新了该帖
8V9q7V 在 2025-03-05 17:22:10 更新了该帖

相关帖子

被采纳的回答
  • 不知是否能满足你需求,你试试看

    先安装 简单查询 js,可参考 [js] 简单查询,让数据从此不再难查,支持显示多字段多视图

    然后

    查询标题

    在文档中输入 {{}} 在对话框中输入以下代码

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, content as 标题__ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and type='h' and subtype='h4' order by updated ${updatedOrder};`, item );

    查询段落

    在文档中输入 {{}} 在对话框中输入以下代码

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, content as 内容__ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and (type='p' or type='t') and content != '' order by updated ${updatedOrder} limit 10;`, item );

欢迎来到这里!

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

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

    字段筛选用 markdown 就好了,这是你想要的效果吗

    image.png

    代码

    查标题

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, markdown as 标题__md_ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and type='h' and subtype='h4' order by updated ${updatedOrder};`, item );

    查段落

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, markdown as 内容__md_ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and (type='p' or type='t') and content != '' order by updated ${updatedOrder} limit 10;`, item, '', ({ row, index, data, ...args }) => { row.内容 = row.内容.replace(/<img/ig, '<img width="25%" style="float: left;"'); } );
    2 回复
    1 操作
    wilsons 在 2025-03-08 13:25:23 更新了该回帖
    凌晨还在回复,请你吃个馒头了~
    8V9q7V 1
    ❤️ 非常感谢!
    wilsons
  • 其他回帖
  • 查询段落、表格能否用纯 SQL 实现呢,因为 JS 把文本样式的抹去了,表格也成了一滩,看着不得劲。

    然后,这个帖子 SQL 求教 - 在路径内、列表内随机索引单个任务项,代码片段可以指定嵌入块只显示单个任务。那代码片段可以实现指定嵌入块不渲染图片吗,或者让指定嵌入块图片宽度 25%。有这个需求是因为有些图片信息少而占位长。

    如果可以的话,需求类似

    1. 自动查询,或手动填 ID
    2. 更新时间排序
    3. 右侧日期(代码片段可以实现指定嵌入块内右侧角标处显示日期吗,不行就放弃了)
    4. 是否包含子文档
    5. 结果数量为 10
    1 回复
    2 操作
    8V9q7V 在 2025-03-07 22:33:17 更新了该回帖
    8V9q7V 在 2025-03-07 22:25:28 更新了该回帖
  • 可以隐藏时分秒吗,只留日期,并把更新日期栏向右压缩——就像下图。既标题、内容尽量多占空间。

    updated as 更新时间__datetime 改为 updated as 更新时间__date_w150_2 即可,代码已更新。
    wilsons 1
    发现个需求,查询子文档,能否加个开关呢——默认不查询。
    8V9q7V
    @8V9q7V 代码已更新,isWithSubDoc 这个参数修改。同时也更新了“简单查询 js”文本对齐的问题,可以也更新下这个代码。
    wilsons 1
    1. 查标题查不到内容,是因为 //!js 前有空行,//!js 必须放到第一行
    2. 查段落,其他几点已解决。第 2 点,即文字添加颜色后的渲染问题,这个是思源 Lute 解析问题,暂时解决不了。可关注 issue Issue #14310 · siyuan-note/siyuan
    3. 纯 SQL 查询,由于需求复杂无法实现

    新代码:

    查标题

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, markdown as 标题__md_ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and type='h' and subtype='h4' order by updated ${updatedOrder};`, item, '', ({ row, index, data, ...args }) => { row.标题_style = (row.标题_style || '') + ';max-height:none;'; row.更新时间_style = (row.更新时间_style || '') + ';max-height:none;'; } );

    查段落

    //!js // 这里可以修改文档id,为空则自动获取当前文档的id let docId = '' // 是否显示更新时间,true显示, false不显示 const isShowUpdated = true; // 更新时间排序,desc由新到旧,asc由旧到新 const updatedOrder = 'desc'; // 是否包含子文档,true包含, false不包含 const isWithSubDoc = false; docId = docId || protyle.options.rootId; const updatedSql = isShowUpdated ? `, updated as 更新时间__date_w150_2` : ''; const subDocSql = isWithSubDoc ? `and path like '%/${docId}%'` : `and root_id = '${docId}'`; return query( `SELECT id as id__hide, markdown as 内容__md_ref_left_1 ${updatedSql} FROM blocks where 1=1 ${subDocSql} and (type='p' or type='t') and content != '' order by updated ${updatedOrder} limit 10;`, item, '', ({ row, index, data, ...args }) => { row.内容_style = (row.内容_style || '') + ';max-height:none;'; row.更新时间_style = (row.更新时间_style || '') + ';max-height:none;'; row.内容 = row.内容.replace(/<img/ig, '<img width="25%" style="float: left;"'); row.内容 = row.内容.replace(/<span class="img__net">.*?<\/span>/ig, ''); } );
    1 回复
  • 查看全部回帖