根据 F 大佬的插件和代码,这个代码可以展示子文档的标题、创建日期和内容摘要,内容摘要显示 50 字,选择文档的第一个块的内容,如果第一个块不足 50 字,合并显示第二个块的内容,如果第一第二合并仍然不足 50 字,则继续合并第三个块的文字,展示 50 字摘要。
这样就可以清楚地知晓子文档有哪些内容。适合一个月一个文档,然后下面是这个月的日记。然后在这个文档界面显示这个表格,展示这个月的记录情况和内容摘要。
代码如下:
//!js
const query = async () => {
const currentDocId = protyle.block.rootID;
const childDocs = await Query.childDoc(currentDocId);
const top3ChildDocs = childDocs.slice(0, 5);
// 获取子文档内容摘要(优化版)
const docsWithContent = await Promise.all(top3ChildDocs.map(async (doc) => {
const childBlocks = await Query.request('/api/block/getChildBlocks', { id: doc.id });
let content = '';
let remaining = 100; // 剩余需要补充的字数
// 遍历前三个子块(或直到补足100字)
for (let i = 0; i < Math.min(3, childBlocks.length) && remaining > 0; i++) {
const blockContent = childBlocks[i].content || '';
const available = Math.min(remaining, blockContent.length);
if (available > 0) {
content += blockContent.substring(0, available);
remaining -= available;
}
}
// 添加省略号(如果内容被截断)
if (remaining <= 0 && content.length >= 100) {
content = content.substring(0, 100) + '...';
}
return {
...doc,
snapshot: content
};
}));
const dv = Query.DataView(protyle, item, top);
dv.addtable(docsWithContent, {
cols: {
title: '文档标题',
created: '创建日期',
snapshot: '内容概览'
},
renderer: (block, colKey) => {
if (colKey === 'title') {
return Query.utils.asLink(block);
}
if (colKey === 'created') {
return Query.utils.renderAttr(block, 'created');
}
return block[colKey];
},
index: true,
fullwidth: true
});
dv.render();
};
return query();
我在上方添加了标题,然后导出为模板。但是在使用模板插入的时候,会提示:block not found v3.4.2
原因我不知道,知道了老师请指点一下,谢谢。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于