之前我们弄了一个简单的表格式嵌入块, 将所有非”标准嵌入块“的 sql 嵌入块渲染成了查询的形式。
思源笔记折腾记录 - 表格式嵌入块 - 链滴 (ld246.com)
有的时候我们需要查看某些附件的列表,所以这回来搞一个附件的匹配规则
效果就像这样:
如果下载了之前的代码包就知道里面的 replace 的内容是这样的:
export let 重渲染配置表 = [
附件列表,
{
判定函数:(sql, id)=>{return sql&&!sql.startsWith("SELECT * FROM blocks")},
sql替换:(原始sql)=>{return 原始sql},
字段过滤:(字段名数组,嵌入块sql,嵌入块id)=>{return 字段名数组.filter(item=>{return item!=='id'})},
表头替换:(表头内容,嵌入块sql,嵌入块id)=>{
let 属性名对照表 ={
hpath:"可读路径",
id:'块id',
}
if(属性名对照表[表头内容]){
表头内容 = 属性名对照表[表头内容]
}
return 表头内容
},
表身替换:(表身内容,结果条目,嵌入块sql,嵌入块id)=>{return `<a href='siyuan://blocks/${结果条目.id}'>${表身内容}</a>`}
},
]
在渲染的时候 index.js 中的程序会遍历这个列表来获取渲染规则,所以可以通过修改这个规则文件来添加新的嵌入块渲染样式。
这次添加一个附件列表的渲染样式:
let 附件列表规则 = {
//只有以“SELECT * FROM assets”开头的sql嵌入块才会被渲染成附件列表
判定函数: (sql, id) => {
return sql && sql.startsWith("SELECT * FROM assets");
},
//虽然获取了所有的字段,但是我们只显示这三个
字段过滤:async (字段名数组, 嵌入块sql, 嵌入块id) => {
return ['block_id','docpath','预览']
},
表身替换: (表身内容, 结果条目, 嵌入块sql, 嵌入块id, 字段名) => {
if (字段名 === "预览") {
// let 图片格式列表 = ["jpg", "webp", "jpeg", "png", "svg", "gif",''];
// if (图片格式列表.indexOf(结果条目.name.split(".").pop()) >= 0) {
return `<img src='/assets/${结果条目.name}'></img>`;
// } else {
// return 结果条目.name;
// }
} else {
return 表身内容;
}
},
};
export default 附件列表;
将这个规则添加到前面的匹配表里面就可以了
import 附件列表 from './replace/附件列表.js'
export let 重渲染配置表 = [
附件列表,
{
判定函数:(sql, id)=>{return sql&&!sql.startsWith("SELECT * FROM blocks")},
sql替换:(原始sql)=>{return 原始sql},
字段过滤:(字段名数组,嵌入块sql,嵌入块id)=>{return 字段名数组.filter(item=>{return item!=='id'})},
表头替换:(表头内容,嵌入块sql,嵌入块id)=>{
let 属性名对照表 ={
hpath:"可读路径",
id:'块id',
}
if(属性名对照表[表头内容]){
表头内容 = 属性名对照表[表头内容]
}
return 表头内容
},
表身替换:(表身内容,结果条目,嵌入块sql,嵌入块id)=>{return `<a href='siyuan://blocks/${结果条目.id}'>${表身内容}</a>`}
},
]
一定是加到前面,因为规则的匹配是从前往后挨个来的,如果匹配到了就不会匹配了。
当然你也可以修改规则把块 id 那些的渲染改一下,这里就不说了。
还是那句话,代码片段的使用有风险,需要小心哦。
链接:https://pan.baidu.com/s/1MijVbwcELnvag30HMZDcag?pwd=nql8
提取码:nql8
--来自百度网盘超级会员 V5 的分享
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于