Skip to content

请教一下如何获取到数据库绑定块id的面包屑 #71

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
HibernalGlow opened this issue Oct 9, 2024 · 12 comments
Closed

请教一下如何获取到数据库绑定块id的面包屑 #71

HibernalGlow opened this issue Oct 9, 2024 · 12 comments

Comments

@HibernalGlow
Copy link

我会用https://ld246.com/article/1727358874893里的脚本收集标识过的块到数据库 但是没有面包屑很难排序 面包屑可以不包含文档标题和其他标题,但是必须有一级标题,模板列用sql也不太好实现 问了d也说面包屑是实时计算,所以问问有没有办法

Copy link

github-actions bot commented Oct 9, 2024

Thank you for your feedback! We appreciate you taking the time to contribute.

We usually respond within 7 days. To ensure you don't miss any updates, we recommend subscribing to email notifications or checking back regularly.

Also, Thank you for starring our repository!🌟

@HibernalGlow
Copy link
Author

如果能获取到面包屑的话,写入到文档的属性里 感觉会方便点 还能实时更新

@OpaqueGlass
Copy link
Owner

好像没什么好办法。

1. 获取块面包屑

官方有获取 块面包屑 的接口,层级导航中的闪卡块面包屑也走的这个;

/api/block/getBlockBreadcrumb

参数示例:id就是块id

{"id":"20241009232547-auzpckf","excludeTypes":[]}

获取数据库中各个块的id,可以参考

https://github.com/OpaqueGlass/listChildDocs/blob/5d4b95253c1e753a6f1e77db9f99aaf18f66d22b/src/API.js#L802-L812

2. 更新数据库

整个文档的层级结构似乎并不在数据库中保存,因此无法通过sql获得;装一个开放api的插件,加上这里的操作或许能让模板列使用js更新;

我能想到的只有

  • (以某种方式触发,例如打开文档,或按照时间间隔,或按钮手动更新),遍历数据库中的每个块,通过上面的API获得面包屑或对应的标题;然后
    • 直接通过API更新到数据库的一个文本列中;(我只做过插入行,没做过单独更新的,siyuan issue区应该有讨论)

我感觉做成插件、手动触发更合适。

3. 开销

似乎没有办法及时的获取到块位置变化,也就做不到实时更新;

我这边获取块面包屑的api延迟18ms,小范围(仅数据库显示中的内容)或许还行;但数据量大的话……

@HibernalGlow
Copy link
Author

直接写入为块的属性 用模板列读取就行 这样也能动态更新 开销不是很大 一次就几十个
方便提供js脚本思路吗 主要就是获取数据库所有块id 获取id对应面包屑 和写入属性这3步

@OpaqueGlass
Copy link
Owner

哦,明天吧,我摸鱼的时候整理一下,或者上面参考的api应该就够用了。

Sorry, something went wrong.

@OpaqueGlass
Copy link
Owner

https://gist.github.com/OpaqueGlass/8ac0ee90c9762b5c47ef7910488bccee

直接添加到代码片段,使用时,window["og_test_241010"]("这里填写id");或者让gpt改一下,和你已有的代码合并。

@HibernalGlow
Copy link
Author

好用 感谢

Sorry, something went wrong.

@OpaqueGlass
Copy link
Owner

ok,那我关闭issue了。

@HibernalGlow
Copy link
Author

佬我拿一个大数据库测了一下 每次只会跑16个id是咋回事

@OpaqueGlass
Copy link
Owner

思源加了分页限制,我更新了,再试一下呢?

@HibernalGlow
Copy link
Author

好了

@OpaqueGlass
Copy link
Owner

分页还是有点问题,思源没有按照固定的顺序返回,导致有一些重复和遗漏;

修改一下

const pageSize = 16;

const pageSize = Number.MAX_SAFE_INTEGER;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants