Skip to content
This repository has been archived by the owner on Dec 2, 2022. It is now read-only.

Commit

Permalink
✨ 内容块动态查询嵌入 siyuan-note/siyuan#48
Browse files Browse the repository at this point in the history
  • Loading branch information
88250 committed Nov 17, 2020
1 parent ea2c7d1 commit 03014cb
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@

输入 `((` 后将触发内容块引用搜索,继续输入作为搜索关键字,在搜索结果中使用上下键选定后回车就可以完成内容块的引用了。请注意,不支持跨笔记本引用。

内容块引用的完整语法是:` ((id "text"))`,其中 `id` 形如: `202008250000-a1b2c3d`,由时间和 7 位随机字符组成,内容块 id 是在创建内容块时就会自动生成的;后面的 `text` 是在引用处对该内容块的自定义锚文本。建立好内容块引用后,鼠标悬浮在锚文本上后将弹出预览浮层,展现被引用的内容块。
内容块引用的完整语法是:` ((id "text"))`,其中 `id` 形如: `202008250000-a1b2c3d`,由时间和 7 位随机字符组成,内容块 id 是在创建内容块时就会自动生成的;后面的 `text` 是在引用处对该内容块的自定义锚文本。建立好内容块引用后,鼠标悬浮在锚文本上后将弹出预览浮层,展现被引用的内容块。#内容块/引用#

### 内容块嵌入
{: id="20200920190726-xw7fial"}

在新一行的开始处输入 `!((` 后将触发内容块嵌入搜索,和内容块引用一样,在搜索结果中选择需要的内容块就可以完成嵌入了,同样支持自定义 `text` 锚文本。嵌入操作完成后下方将直接展现被嵌入的内容块。
在新一行的开始处输入 `!((` 后将触发内容块嵌入搜索,和内容块引用一样,在搜索结果中选择需要的内容块就可以完成嵌入了,同样支持自定义 `text` 锚文本。嵌入操作完成后下方将直接展现被嵌入的内容块。#内容块/嵌入#

值得注意的是,内容块嵌入本身也是一种内容块,这意味着我们不能在一句话中间使用内容块嵌入,只能在新行开始处进行嵌入操作。下面是一个内容块嵌入的示例:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,23 @@
```sql
!{{ SELECT * FROM blocks WHERE content LIKE '%内容块%' AND type = 'NodeListItem' }}
```

* 查询内容中同时包含 `内容块``引用` 段落块:

```sql
!{{ SELECT * FROM blocks WHERE content LIKE '%内容块%' AND content LIKE '%引用%' }}
```

* 查询内容中同时包含 `内容块``嵌入` 的标题块并按时间降序结果取前 2 条:

```sql
!{{ SELECT * FROM blocks WHERE (content LIKE '%内容块%' AND content LIKE '%嵌入%') AND type = 'NodeHeading' ORDER BY block_id DESC LIMIT 4 }}
```

下面我们实际跑一下试试看效果。

查询同时包含 `在思源笔记中``核心概念` 文本的段落块,并排除当前文档(否则当段落块也会包含到结果集中,因为当前段落同样包含了这两个文本,下面的案例类似):

!{{SELECT * FROM blocks WHERE (content LIKE '%在思源笔记中%' AND content LIKE '%核心概念%') AND path NOT LIKE '%内容块动态查询%'}}

查询同时包含 `#内容块/嵌入#` 标签和 `#内容块/引用#` 的段落块:

!{{SELECT * FROM blocks WHERE (content LIKE '%#内容块/嵌入#%' OR content LIKE '%#内容块/引用#%') AND path NOT LIKE '%内容块动态查询%'}}
32 changes: 16 additions & 16 deletions 使用内容块/🎨 内容块类型_20200905090211-2vixtlf.sy.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,23 @@

鼠标悬浮在内容块上左侧会出现该内容块对应的图标,排版用法请参考 ((20200825162036-4dx365o "Markdown 完整示例"))。

| 标识 | 类型 | ((20200925095848-aon4lem "元类型")) |
| -------------------------------------------- | --------------- | -------------------------------------- |
| ![paragraph](assets/paragraph.svg) | 段落块 | 叶子块 |
| ![heading](assets/heading.svg) | 标题块 | 叶子块 |
| ![math-block](assets/math-block.svg) | 数学公式块 | 叶子块 |
| ![code-block](assets/code-block.svg) | 代码块 | 叶子块 |
| ![table](assets/table.svg) | 表格块 | 叶子块 |
| ![unordered-list](assets/unordered-list.svg) | 无序列表块 | 容器块 |
| ![ordered-list](assets/ordered-list.svg) | 有序列表块 | 容器块 |
| ![task-list](assets/task-list.svg) | 待办列表块 | 容器块 |
| ![list-item](assets/list-item.svg) | 列表项块 | 容器块 |
| ![blockquote](assets/blockquote.svg) | 块引用块 | 容器块 |
| ![doc](assets/doc.svg) | 文档块 | 容器块 |
| 标识 | 类型 | ((20200925095848-aon4lem "元类型")) |
| - | - | - |
| ![paragraph](assets/paragraph.svg) | 段落块 | 叶子块 |
| ![heading](assets/heading.svg) | 标题块 | 叶子块 |
| ![math-block](assets/math-block.svg) | 数学公式块 | 叶子块 |
| ![code-block](assets/code-block.svg) | 代码块 | 叶子块 |
| ![table](assets/table.svg) | 表格块 | 叶子块 |
| ![unordered-list](assets/unordered-list.svg) | 无序列表块 | 容器块 |
| ![ordered-list](assets/ordered-list.svg) | 有序列表块 | 容器块 |
| ![task-list](assets/task-list.svg) | 待办列表块 | 容器块 |
| ![list-item](assets/list-item.svg) | 列表项块 | 容器块 |
| ![blockquote](assets/blockquote.svg) | 块引用块 | 容器块 |
| ![doc](assets/doc.svg) | 文档块 | 容器块 |

## 内容块类型详解

下面我们分别介绍一下这些内容块类型的细节。
下面我们分别介绍一下这些内容块类型的细节。#内容块/类型#

### 段落块

Expand Down Expand Up @@ -58,8 +58,8 @@ function hello() {}

![math-block](assets/table.svg)

| 列一 | 列二 |
| ------------ | ------------ |
| 列一 | 列二 |
| - | - |
| 行一列一 | 行一列二 |
| 行二列一 | 行二列二 |

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## 最常用的内容块是段落块

“内容块”指的是一段内容,最常见的内容块就是我们所熟悉的段落(Paragraph)。
#内容块#”指的是一段内容,最常见的内容块就是我们所熟悉的段落(Paragraph)。

在中文传统排版中,段落通常是通过段首缩进(空两格)来表示,随着互联网的发展,逐渐影响了段落的表示。现在使用较多的方式是增加段落之间的行距,或者使用空行来分隔段落。

Expand All @@ -10,10 +10,10 @@

实际使用时,仅仅靠段落排版是不够的,往往还需要用到标题(Heading)、列表(List)、表格(Table)、块引用(Blockquote)等来丰富我们的排版。这些排版样式除了视觉上的不同,更重要的是它们在一定程度上表达了内容的语义。比如在看到无序列表时,我们可以知道每个列表项是不分先后的平级关系,而在看到有序列表时则相反。

所以,内容块存在((20200905090211-2vixtlf "很多类型")) ,不同类型的内容块通过 Markdown 语法来定义。换句话说,用户在用 Markdown 的同时,内容块就**自然**形成了。
所以,内容块存在((20200905090211-2vixtlf "很多类型")) ,不同类型的内容块通过 Markdown 语法来定义。换句话说,用户在用 Markdown 的同时,内容块就**自然**形成了。#内容块/类型#

## 组合内容块

一篇文档是一些内容块的组合,内容块是基本单位。这就好比乐高积木,可以使用不同的基本模块进行组合。值得注意的是,文档本身也是一种内容块,更准确地说,文档块、列表块、块引用块这三种内容块是容器块,他们可以包含其他任意类型的内容块。
一篇文档是一些内容块的组合,内容块是基本单位。这就好比乐高积木,可以使用不同的基本模块进行组合。值得注意的是,文档本身也是一种内容块,更准确地说,文档块、列表块、块引用块这三种内容块是容器块,他们可以包含其他任意类型的内容块。#内容块/组合#

至此,我们已经能够用内容块来描述所有的内容了,这样就能通过统一的用法来((20200813013559-sgbzl5k "链接内容块"))了。逻辑上没有页面(Page)概念,减少使用中不必要的负担,让用户将注意力集中在内容块上。
18 changes: 9 additions & 9 deletions 通用操作/搜索_20200813091734-6depm11.sy.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@

该表用于存储内容块数据。

| 字段 | 类型 | 说明 |
| -: | :-: | - |
| id | integer | 自增主键 |
| block_id | text | 内容块 ID |
| box | text | 笔记本名 |
| path | text | 内容块所在文档路径 |
| tree_id | text | 抽象语法树 ID,和根节点 ID 相同 |
| content | text | 内容块 Markdown |
| type | text | 内容块类型 |
| 字段 | 类型 | 说明 |
| -------: | :-----: | ------------------------------------------- |
| id | integer | 自增主键 |
| block_id | text | 内容块 ID |
| box | text | 笔记本名 |
| path | text | 内容块所在文档路径 |
| tree_id | text | 抽象语法树 ID,和根节点 ID 相同 |
| content | text | 内容块 Markdown |
| type | text | 内容块类型 |

示例:

Expand Down

0 comments on commit 03014cb

Please sign in to comment.