我想通过查询方式,通过表格展示本文档的子文档的标题、内容(选取前 50 字作为摘要,可以直观看到文档日记的内容)、创建时间等等。这样的好处是比如写日记,一个月创建一个文档作为文件夹,其子文档为每天撰写的日记或者记录的东西,如果没有内容摘要,可能都不知道写了哪些内容,或者哪些内容大概在哪个文档。
首先我通过 query 挂件编写了代码可以实现,并创建模板,然后一个月的主文档,插入这个模板。就能够很好展示。但是每次插入后,毕竟有个 query 那个框以及按钮,美观度不高。
代码如下:
SELECT
CASE
WHEN (
SELECT length(content)
FROM blocks
WHERE root_id = doc.id
AND type = 'p'
AND length(content) > 0
LIMIT 1
) > 0 THEN substr((
SELECT content
FROM blocks
WHERE root_id = doc.id
AND type = 'p'
AND length(content) > 0
ORDER BY created ASC
LIMIT 1
), 1, 100) || '...'
ELSE '暂无内容摘要'
END as __2____zhaiyao__内容摘要,
'[' || doc.content || '](siyuan://blocks/' || doc.id || ')' AS __1____pre__文档标题,
doc.created AS __3____date__创建日期
FROM blocks doc
WHERE doc.type = 'd'
AND doc.path LIKE '%/.block{.root_id}/______________-_______.sy'
and substr(created, 1, 6) = strftime('%Y%m', 'now')
order by created desc
LIMIT 5
效果图如下:

所以想通过 query view 插件创建。
但是 qv 插件,我看是有直接获取子文档的代码,如
``
//!js
const query = async () => {
const currentDocId = protyle.block.rootID;
const childDocs = await Query.childdoc(currentDocId);
const top3ChildDocs = childDocs.slice(0, 3);
const dv = Query.DataView(protyle, item, top);
// 添加表格视图
dv.addtable(top3ChildDocs, {
cols: ['id', 'content', 'updated'],
index: true,
fullwidth: false
});
dv.render(); // 必须调用渲染
};
return query();
但是这个代码查询出的 content 内容是子文档的标题,而不是文档内容的 type=“p”,只有文本块类型才是文档的内容,那就只有通过 SQL 查询,尝试了几次没成功,AI 写的是:
//!js
const query = async () => {
// 获取当前文档ID(嵌入块所在文档)
const currentDocId = protyle.block.rootID;
// 构建SQL查询语句
const sql = `
SELECT
id,
content AS title,
created
FROM blocks
WHERE
type = 'd' AND
parent_id = '${currentDocId}'
ORDER BY created DESC
LIMIT 3
`;
// 执行SQL查询
const childDocs = await Query.sql(sql);
// 初始化DataView对象
const dv = Query.DataView(protyle, item, top);
// 添加表格视图
dv.addtable(childDocs, {
cols: [
{ key: 'title', label: '标题' },
{ key: 'created', label: '创建日期' }
],
renderer: (block, colKey) => {
if (colKey === 'title') {
// 将标题转换为引用链接
return Query.utils.asLink(block.id, block.title);
}
return block[colKey];
},
index: true,
fullwidth: true
});
// 渲染表格
dv.render();
};
return query();
这个提示出错。还请大佬指点。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于