
SiYuan v3.3.2 版本详解数据库筛选细化、代码片段 disabledInPublish 新字段与 expandDocTree 插件函数【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuanSiYuan v3.3.2 是一次以“细节打磨”为主的版本它在数据库Database视图的字段编辑、汇总/日期筛选、分组交互上做了多处改进并新增了面向发布服务的disabledInPublish元数据字段与插件函数expandDocTree。本文基于官方变更记录 v3.3.2 中文版同版本还有 英文版 与 繁体中文版结合仓库源码逐项拆解这些变更的实际行为、参数含义与底层实现帮助开发者与进阶用户完整理解该版本的变更面。版本概述官方概述只有一句话“此版本改进了一些细节”。但从变更记录看v3.3.2 的改动集中在三条主线上编辑器与块操作体验折叠标题的复制/剪切语义调整、代码块复制行为、文件拖入、HTML 表格剪藏等数据库Database视图字段编辑菜单、汇总字段筛选规则任一/所有/没有、日期字段筛选、分组拖动同步、分组视图性能等多处打磨面向开发者/插件生态代码片段新增disabledInPublish字段、集市插件包元数据新增同名字段、新增插件函数expandDocTree、内核 APIappendBlock、insertBlock、prependBlock的改进。其中第三类变更在仓库源码中有明确的落地实现下文会给出对应的文件与关键代码位置。改进功能逐项解析编辑器与块操作折叠标题的复制/剪切改为复制/剪切“标题及其下方块”并支持多标题复制/剪切此前对折叠标题做复制/剪切时只处理标题本身v3.3.2 之后会把标题连同其折叠区域内的子块一起纳入复制/剪切范围并支持一次选中多个标题批量操作。这一改动与 SiYuan“一切皆块block”的模型一致——标题是块的容器边界复制标题即复制其下的块树。代码块选择复制时仅复制纯文本选中代码块内容复制时不再携带额外格式得到纯净的代码文本方便粘贴到其他编辑器或终端。代码块语言提示搜索内容为空时使用默认排序代码块顶部语言提示language hint在搜索框为空时恢复为按默认顺序展示语言列表避免空搜索导致候选异常。拖入多个文件到编辑器不再被默认程序打开修复批量拖入时文件被系统默认程序抢走打开的行为统一走编辑器内的文件插入流程。改进 HTML 表格剪藏优化网页剪藏场景下 HTML 表格转 SiYuan 表格块的还原效果。点击无文档的笔记本时自动新建文档在空笔记本上直接点击即可创建首个文档省去手动“新建文档”的一步操作。数据库Database视图数据库是 v3.3.2 改动最集中的模块共 8 条改进改进数据库字段编辑菜单优化数据库字段编辑入口的菜单组织字段属性的调整路径更顺。数据库汇总字段筛选规则支持“任一”、“所有”和“没有”汇总rollup字段聚合了关联数据集中的多个值此前对这类多值结果的筛选语义不明确v3.3.2 之后可以显式指定匹配规则——任一any聚合值中至少有一个满足条件即命中所有all聚合值全部满足条件才命中没有none聚合值中没有任何一个满足条件时命中。 从源码结构看数据库字段的定义、取值与筛选渲染主要分布在kernel/av模块如 filter.go、kernel/sql/av.go其中包含 rollup 类型字段的处理逻辑以及按布局拆分的 av_table.go、av_gallery.go、av_kanban.go筛选规则的语义变化需要前端筛选 UI 与内核查询共同配合。改进数据库汇总字段筛选与上一条配套对汇总字段筛选的整体交互与规则判定做进一步细化。改进数据库日期字段筛选日期字段的筛选能力增强配合下文“修复数据库日期字段无法粘贴 0 点时间”的缺陷修复日期类数据在数据库中的录入与筛选体验更完整。数据库中新建数据如果在折叠分组内不再弹出编辑框在分组视图如看板中向一个处于折叠状态的分组新增条目时不再强制弹出编辑弹窗交互更不打断浏览。数据库添加选项时禁止编辑为单选/多选类字段添加选项的过程中禁止同时对已有选项做编辑避免录入态下选项值被意外改动。数据库条目跨分组拖动后同步更新其他视图中的分组在某个视图中把条目拖入另一个分组后同一数据库的其余视图表格/看板/图库会同步反映新的分组归属保证多视图数据一致。提升数据库分组视图性能分组视图如按字段分组的表格/看板在数据量较大时的渲染性能得到优化。其他改进改进闪卡优化闪卡学习体验。可以确认的是内核侧闪卡配置定义在 kernel/conf/flashcard.go 的Flashcard结构中包含新卡上限newCardLimit默认 20、复习卡上限reviewCardLimit默认 200、标记/列表块/超级块/标题块/卡包制卡开关以及基于 FSRS 算法的requestRetention、maximumInterval、weights参数本次“改进闪卡”属于该体系上的体验优化。Android 隐藏底部手势导航栏移动端界面隐藏系统底部手势导航栏减少遮挡。浏览器剪藏扩展支持剪藏页面到数据库剪藏扩展新增“剪藏页面到数据库”的目标网页可以直接落库为数据库条目。新增字段disabledInPublish代码片段与集市插件包本版本有两个相互对应的disabledInPublish变更代码片段新增字段disabledInPublish用于标识该片段在“发布服务”中是否被禁用集市Bazaar插件包元数据新增同名字段用于标识插件在发布服务中是否被禁用。从源码看该字段贯穿了前端配置 UI、内核配置解析与插件包元数据三层类型定义前端全局类型声明中加入了disabledInPublish: boolean见 app/src/types/index.d.ts。代码片段 UI片段编辑界面提供开关控件默认关闭不禁用见 app/src/config/util/snippets.tsL119新建片段时初始化disabledInPublish: falseL196渲染data-typedisabledInPublish的b3-switch开关L233读取开关状态时取反未勾选表示不禁用。内核配置解析结构体字段定义在 kernel/conf/snippet.goDisabledInPublish bool \json:disabledInPublishAPI 侧从片段配置 JSON 中解析该字段见 kernel/api/snippet.go当 JSON 中存在disabledInPublish时读取其布尔值。集市插件包元数据插件包 manifest 结构体中新增DisabledInPublish bool \json:disabledInPublish见 kernel/bazaar/package.go插件模型同样持有该字段并标注“Whether disabled in publish mode”见 kernel/model/plugin.go解析入口为 kernel/bazaar/plugin.go 的ParseInstalledPlugin它从已安装插件的元数据中读出disabledInPublish并与incompatible、disallowInstall、kernelIncompatible等状态一起返回。使用含义当你通过 SiYuan 的发布服务Publish把知识库发布为公开站点时被标记disabledInPublish: true的代码片段与插件不会在发布站点中生效。这为“本地开发用、公开站点关闭”的差异化配置提供了声明式开关而不是依赖删除/隐藏等隐式手段。新增插件函数expandDocTreev3.3.2 为插件体系新增了expandDocTree用于在文件树中展开并定位到指定文档/笔记本节点插件脚本可据此实现“跳转到某文档”“自动展开某文件夹路径”等导航类能力。实现位于 app/src/plugin/API.ts参数与行为如下参数类型说明idstring笔记本 ID 或文档 IDisSetCurrentboolean?是否把目标节点设为当前选中项缺省为true源码逻辑要点先通过window.siyuan.notebooks判断传入的id是否为笔记本L288-L293若为笔记本直接取文件树中对应的b3-list节点若不是笔记本则调用内核接口/api/block/getBlockInfo反查该块所属的box笔记本与path再通过文件树组件的selectItem定位到对应li节点L303-L308isSetCurrent缺省视为true调用file.setCurrent(liElement)选中该节点L297-L315最后找到折叠箭头.b3-list-item__arrow若尚未展开不含--open类名则执行展开L316-L319——这就是函数名中 “expand” 的含义确保目标节点在文件树中可见。对插件作者而言该函数把“按块 ID 反查文档位置并展开文件树”这一原本需要插件自行操作 DOM 的步骤收敛为标准 API降低了导航类插件的实现成本。内核 API 改进appendBlock、insertBlock、prependBlock变更记录中“改进内核 APIappendBlock、insertBlock和prependBlock”对应内核块操作接口 kernel/api/block_op.go。本次改进的核心是在插入前增加容器父块的合法性校验防止通过 API 产生非法嵌套appendBlockL551-L600参数为data、dataType、parentID。由于它只靠parentID定位插入位置目标必须是容器块因此先调用treenode.CheckContainerParent(parentID)校验不合法直接返回错误L566-L571prependBlockL656-L705同样只用parentID定位执行了同样的容器校验L671-L676insertBlockL761-L831支持parentID、previousID、nextID三个定位参数。只有当“仅靠parentID定位”previousID与nextID均为空时才要求父块必须是容器块L792-L799——若通过相邻块 ID 定位则插入点落在块之间父容器由上下文决定。配套的批量版本batchAppendBlock、batchPrependBlock、batchInsertBlock采用相同的逐条校验逻辑保证批量插入与单条插入语义一致。此外所有dataType为markdown的输入都会先经 Lute 引擎解析为块 DOMdataBlockDOM再进入appendInsert/prependInsert/insert事务写入完成后统一通过model.PerformTransactionsFlushTxQueue落库并用broadcastTransactions向其他客户端/视图广播变更。这一“事务 广播”的链路也正是多端同步与数据库/反链等实时更新的底层基础。对插件与自动化脚本的提示如果你的脚本通过这三个 API 往列表项、段落等非容器块上追加子块升级后应留意返回的错误提示改为选择合法的容器父块文档、标题、折叠块、引用块等。修复缺陷本版本共修复 6 个缺陷PDF 文件名过长无法生成标注图片长文件名的 PDF 在生成文件标注图片时失败的问题视频块网络地址不正确视频块解析出的网络地址有误导致无法正常播放的问题数据库日期字段无法粘贴 0 点时间日期字段粘贴00:00时刻失效的问题与上文日期字段筛选改进共同完善日期数据链路预览模式下无法设置只读模式文档处于预览模式时无法切换只读状态的问题批量插入文件到编辑器时异常与“拖入多个文件”的改进配套修复批量文件插入流程的异常部分输入法在块末尾粘贴链接后标点符号重复插入特定输入法环境下粘贴块引用链接后光标位置标点被重复上屏的问题。小结与延伸阅读v3.3.2 没有大特性但每条改动都指向高频使用路径数据库视图的筛选与分组、代码块与标题的块级操作、以及插件/发布生态的元数据能力。阅读路径建议变更清单v3.3.2 中文变更记录、英文版disabledInPublish实现kernel/conf/snippet.go、kernel/bazaar/plugin.go、kernel/model/plugin.go、app/src/config/util/snippets.tsexpandDocTree实现app/src/plugin/API.ts块操作 API 与容器校验kernel/api/block_op.goappendBlockL551、prependBlockL656、insertBlockL761。【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考