SiYuanNote 模板
编写于 1.2.1 版本
最后修改日期 : 2021 年 7 月 28 日
SiYuan 群中,一直有群友提起模板相关的问题,而帮助文档中的描述又过于粗糙.因此总结了一些在写模板过程中的一些基础知识. 本人水平有限,如有错误和描述粗糙之处,还请多多包涵.
此外,如果你是文科生,没有学过 C 语言,没有任何编程基础,那么真的不建议在模板上花费太多时间. 能够使用一些基础的样式就足够了.可以留下自己的一些构想,编写模板其实缺少的是构思和想法. 有编程基础的群友说不定会抽空把它实现出来.
思源模板主要涉及三个部分
- Markdwon 语法
- SQL 查询
- go 模板语法
Markdown 语法
基础语法
kramdown 内联属性
- style
- color 颜色
- background-color 背景颜色
- width 宽度
- flex
- text-align
- flod 是否折叠 1 为折叠
- 属性
- alias 别名
- name 命名
- memo 备注
- 超级快布局(在后面的示例中展示)
没有直接测试过,但是 html 里能放在 style 中的应该都能放在思源模板中.
TODO :而自定义的属性如何直接在模板中设置
示例
字体颜色和背景颜色
{: style="color: var(--b3-font-color1); background-color: var(--b3-font-background1);"}
居中
{: style="text-align: center;"}
- 折叠
- 1
- 2
- 3
{: fold="1"}
设置属性
{: alias = TestAlias" name="TestName" memo="TestMemo"}
超级块布局
{{{col
{{{
第一列
}}}
{{{
第二列
}}}
}}}
思源内置的颜色
SQL 查询
基础内容
.action{$blocks :=queryBlocks
"SELECT * FROM blocks WHERE
content LIKE '?' AND
updated > '?' LIMIT ?"
"%foo%" $today "3"}
学习到何种程度? 帮助文档中的这一句话能看懂就 OK.
- $blocks 即将最后的查询出的结果(可理解为一张表)存入 该变量中 , 具体内容详见帮助文档中的 数据库表.
- 思源目前只能将
blocks
表作为最后的返回结果,且 选中的列必须是全部的列, 即*
- queryBlocks 获取的结果一般用于在之后遍历,读取或输出特定的值
- 访问 $blocks 的属性
$blocks.ID
两个字母都需要大写$blocks.Path
其余属性只需要首字母大写即可
感谢思源让我巩固了 SQL 知识
常用的技巧
-
LIKE 和 =
- = 表示搜索结果必须于给出的一模一样
- LIKE 配合 通配符 使用,即模糊搜索
-
? 表示占位符 , 上例中,按照顺序依次代表后面的 "%foo%" $today "3"
-
LIMIT 限制查询结果的数目,如果没有设置会默认遵守 思源设置的搜索数目限制
- 对于一些特殊的模板,比如生成 文件列表的双链, 数量比较多,但是不需要通过 SQL 将其展示出来,可以直接将 LIMITE 设置为一个很大的数字或者设置为-1 (Clouder 和我说的,俺没试过)
-
数据处理函数
-
length(col) 用于返回值的长度
- 模板: 生成文件树目录中就有使用
-
golang 模板语法
默认的 golang 语法是 {{ 要执行的操作 }}
而思源中则是 .action{要执行的操作}
所以网络上查找到的资料按照这个逻辑替换即可.
基础语法
-
设置变量
:=
该符号的意思是,初始化一个变量 ,并且赋值=
该符号的则是对一个已经初始化了的变量进行赋值
-
注释
.action{/*这是注释*/}
-
逻辑控制
- 循环和判断
-
函数调用(这个不用管) -
模板的嵌套 TODO
-
判断语句中的逻辑控制函数
- not 非
- and 与
- or 或
- eq 等于
- ne 不等于
- lt 小于 (less than)
- le 小于等于
- gt 大于
- ge 大于等于
Sprig 函数 TODO
思源中封装了该项目的函数,可以直接使用,打开该网站需要科学上网. 后续可能看情况补充一些常用的函数.
-
和 String 相关的函数
- regexFind
regexFind "[a-zA-Z][1-9]" "abcd1234"
- 通过正则匹配获取想要的字符串, 先写匹配模式,后写字符串
- TODO
- regexFind
-
和 StringList 相关的函数
- list
list 1 2 3
- 返回一个 字符串数组 [1 2 3]
- join
list "hello" "world" | join "_"
- 合并字符串数组中的字符串,返回字符串
hello_world
- TODO
- list
-
和 List 相关的函数
- has
has 4 $myList
- 如果 $mylist 中包含有 4,则返回 true
- append
$new = append $myList 6
- 将 6 放入 $myList 中.
- has
示例
逻辑控制的示例代码会添加到 Organized/getFiles 模板中
.action{/*初始化变量*/}
.action{$var:=1}
.action{/*变量赋值*/}
.action{$var=1}
.action{/*输出变量值*/}
.action{$var}
.action{/*下面是一个使用range和 if 的小例子*/}
.action{/*获取所有文件夹路径*/}
.action{$filePathList:= list $dirPath}
.action{range $index, $v:=$block}
.action{$filePath = (regexFind $regexDirPath $v.Path )}
.action{if not (has $filePath $filePathList)}
.action{$filePathList = append $filePathList $filePath}
.action{end}
.action{$numOfSearch = $index}
.action{end}
- $dirPath 是一个定义好的字符串,表示文件所在的路径
- $filePathList 是一个用于存放表示路径的字符串的数组
- 遍历获取的 SQL 查询结果
- 获取的 Path 属性去除掉文件名,只保留所在的文件夹的路径
- 如果该路径不存在于 $filePathList 中,则将其放入该 list
- 此处使用的是
=
- 此处使用的是
$numOfSearch
用于记录$idnex
的值, index 每次循环会自动加一
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于