少数派栏目试读

本期试读选自《Notion All in One:搭建高能效率系统》。本栏目是一份给知识工作者的 Notion 终极指南,包含三重干货,从入门到进阶,把 Notion 一次性讲清楚。

 

周末福利

即日起至本周日(8月13日),点击链接,即可领取限量少数派栏目无门槛二十元代金券,全场可用,领完即止。


2023 年 2 月,Notion 将过去的 Template 功能升级为 Button,这一功能的装载宣告着 Notion 的应用搭建能力又上了一个崭新的台阶。

过去 Notion 的模板,或者说所有笔记软件的模板功能,纯粹只是对已有文档的简单复制,省去的大概只有 Ctrl C + Crtl V 的功夫,但 Button 这一功能从名字上就能看出,它所能执行的动作远不止「复制模板」这么简单。

你只需要使用命令 /button 就能够在所有能够插入功能区块的地方使用 Button。如下图所示,创建 Button 之后弹出了 5 个可选的功能组件:

点击之后就可以将这些组件嵌入到 Button 的执行列表中,每个组件都有各自的功能和用法,并且 Button 将会按照从上到下的顺序依次执行这些组件:

所谓 Button 顾名思义就是一个可以点击的按钮,那么既然是按钮,点击之后就必然会触发某种动作,就像灯的开关、门的把手、电脑的启动按键。

例如下图,点击 Button 按钮就触发了我提前设置好的「打开资源库」的动作,可以说这就是 Button 最简单、最基础的应用方式:

但 Notion 的 Button 显然不止「打开页面」这一项功能,你可以类比苹果的快捷指令(Shortcut)、魔兽世界的宏命令、Windows 的批处理脚本,或者是 PS 里的自动批处理,它们都能够将多个命令、多个动作或者多个流程封装在一个广义上的「按钮」之中,如此就能为我们节省大量的重复操作时间

接下来本文将详细拆解 Button 中的每一个功能组件的详细用法和适用场景,希望能给你一些启发。不过需要注意的是,我认为 Notion Button 现阶段依然还是半成品状态,它在不少关键地方缺失了「我们认为它应该要有」的功能或者特性,所以还请各位适当降低对 Button 的功能预期,它确实很强大,但限制也不少

Insert blocks - 快捷插入模板

基础用法

创建方法

使用命令/button 即可创建按钮,然后点击 Insert blocks ,Notion 就会创建一个用于插入区块的「输入框」:

特性一

你可以在这个「输入框」内创建任意功能,添加任何内容,它可以是一张图片、一篇文章,也可以是另一个 Button 或另一个数据库,你平时怎么使用页面(Page),你就可以怎么使用这个输入框。

特性二

我们可以在这个输入框内使用 @ 这个符号来插入两种时间变量:

  1. Now - Time when duplicated (包含当天的日期和时间点)
  2. Today - Date when duplicated (仅包含当天日期)

以第一个变量 @Now 为例,当我们将鼠标悬停在上面,它就会显示 Time when duplicated 的提示。也就是说,每一次你点击 Button 的时候,这个时间变量都会先读取点击 Button 那一刻的日期和时间,然后再显示出来:

时间变量这个用法同样可以用于放置在「输入框」之内的页面(Page),如下图所示:

如此一来我们就可以使用 Button 来插入一页以当天日期作为标题的页面模板了:

特性三

我们可以手动选择是要将模板插入到 Button 的上方还是下方:

最后,创建完模板内容之后我们可以为它添加一个按钮名称和按钮图标,然后点击 Done 即可完成创建。接下来每点击一次 Button,它就可以重复生成先前我们在「输入框」内添加的所有内容,包括分栏排版都能够保留。

基于「生成重复内容」这个简单的需求,Button 已经能够应用到非常多的场景之中。

案例参考

场景一:在一般页面中创建重复内容

例如在你每次驾驶飞机之前,可以用 Button 生成一份起飞前必要的检查事项,然后将排查无误的事项一一打勾。虽然这个例子不是很实用,但用来营造玩《微软模拟飞行》的仪式感也不是不可以。或者也可以用 Button 生成每天都要填写的日报页面模板,这个用法或许会更适合社畜体质的我:

在出门旅游之前,也可以点击 Button 按钮然后生成一份旅行必带物品检查清单,检查无误后全选删掉即可,下次就可以继续点击 Button 来复用了。

如果再加上时间变量的话,就可以在生成日记、更新说明等内容模板的时候,快速插入当前的时间:

场景二:将太长的数据库模板内容拆分到 Button 中

我为我的「项目管理数据库」创建了一个模板,在这个数据库模板中还包含了一个 Button。

如果这个项目比较简单,那么我就无须点击这个 Button。如果这个项目比较复杂,那么在执行这个项目前,我就会点击这个 Button,然后让 Button 根据提前设置好的思考框架,来为这个项目补充更详尽的启动检查事项:

在这个场景用法下,我将数据库模板的一部分内容放进了 Button 之中,如此一来就可以做到按需生成我想要的功能模板,算是一种增强数据库模板的方式:

再举一个例子,我们可以创建一个内容管理数据库,然后把「选题分析」「脚本大纲」「脚本模板」,以及「数据复盘」等内容模块分别封装进不同的 Button 中,然后再将这些 Button 放进数据库的模板页里,如此一来只要激活这个数据库模板,就能在新建的页面中带上这几个按钮:

接下来就可以按照创作的顺序依次点击这几个按钮,相当于把任务划分成块,然后逐个解决。这样就不至于在激活数据库模板的时候,一下子生成大量的模板内容,有可能会干扰你的注意力,更大概率是会让我们产生畏难的情绪。

当然以上案例只是做了最简化的处理,Button 中的具体内容、以及 Button 在数据库模板该如何放置、该如何排序都需要各位根据自己的实际工作流程再做细化和调整,此处思路仅供参考。

功能缺憾

Insert Block 目前只能用来添加内容,但如果它能够在下一次执行 Button 命令时,将上一次 Button 生成内容清空的话,我想它的应用场景一定能进一步扩展下去。

例如,我们虽然可以用 Button 来生成需要每天重复执行的待办事项,但是当我们将这些待办事项全都打勾之后,到了第二天就需要自己手动全选然后删掉,要是 Button 能够在点击的时候自动清空的话,那就太棒了。

Add page to——添加页面到数据库

Add page to 这个组件能够允许我们通过 Button 将页面创建在指定的数据库中,如此一来 Button 的应用场景就得到了进一步地扩展,我们可以通过按钮在任意地方为任意的数据库新建一个页面,例如:

  1. 将灵感、想法等碎片信息快速记录到「灵感数据库」中;
  2. 快速反馈一个 Bug 到「Bug 排查数据库」中;
  3. 快速新增一条观影记录到「观影数据库」中。

通过以上三个简单的参考案例,我们可以先得出一个简单的结论,Add page to 这个功能组件主打的就是一个快速记录。当你的数据库存放的页面层级比较深,或者你在某段时间内需要频繁记录某个数据库的时候,这个功能就会非常实用。

基础用法

用法一:使用 Button 创建一般页面

  • 使用 /button 命令创建按钮,然后选择 Add page to 组件;
  • Add page to 位置选择需要记录的数据库坐标(Select database)。

在创建(新增)页面的同时,我们还可以为这个页面添加标题、并设置它的数据库字段:

需要注意的是,针对不同的字段,Button 提供了不同的预编辑方式,由于字段种类过多,此处就不再一一演示。不过只要你实际动手操作一下,立刻就能够领会所有字段的用法。

用法二:用 Button 创建页面和子页面 

在《表格视图解析》这篇文章中,我们介绍了 Sub-items 这个功能,它可以让我们为某个页面添加最多 10 个层级的子页面:

Sub-items 本质上是在同一个数据库中构建页面和页面之间的关联,主页面是子页面的 Parent item,而子页面则是主页面的 Sub-item

所以如果我们要想用 Button 来为数据库中的页面添加子页面,就需要为这个新建的子页面设置好它所关联的上级页面是谁,也就是需要为子页面设置它的 Parent item ,具体流程如下:

  1. 使用 Add page to 创建一个页面;
  2. 点击 Edit another property
  3. 然后选择 Parent item 这个字段(注意,这里需要目标数据库开启 Sub-items 这个功能);
  4. 为这个新增的页面指定它的 Parent item 是谁:

在这个用法的基础上,我们还可以同时创建主页面和子页面关系:

具体操作步骤如下:

  1. 使用 Add page to 先添加一个主页面;
  2. 使用 Add page to 添加一个子页面 1;
  3. 将子页面 1 的 Parent item 字段值设置为「步骤 1 创建的页面」。

将上图红框中的内容放大,我们可以看到步骤 1 创建的主页面变成了蓝色的文字提示:  New page added in XXX from step 1,意即「通过 Add page to 所创建的第一个页面」。

如果我们再创建一个子页面 2,就会发现子页面 1 同样变成了蓝色文字提示:New page added in XXX from step 2 ,意即「通过 Add page to 所创建的第二个页面」。

也就是说,如果我们想让 B 成为 A 的子页面,只需要将 B 的 Parent item 的字段值设置为 A 即可,你只需要分辨清楚页面 A 是 Button 所创建的第几个页面即可

案例参考

用法一:为记账表创建常用消费条目

如前面所说,当我们使用 Button 在数据库中快速创建页面的时候,可以同时设定这个新建页面的数据库字段值,这是一个非常重要的特性。

例如下图我创建了一个简易的记账表,在 Button 这个功能上线之前,如果我们想快速添加一笔常用消费的话,大概只能通过数据库右上角的模板进行添加,但是这样就多了「唤出模板菜单」和「找到模板」的两步动作:

但是现在我们就可以用 Button 将特定的消费内容、消费方式、消费金额、以及消费时间这四项封装在一个按钮之中:

今后只需要点击对应的 Button,就可以在关联的数据库中快速添加你所需要记录的内容了:

法二:快速创建包含子任务的项目模板

假设我们在 Notion 中创建了一个项目管理表,每个项目都遵循一定的固定流程来执行,在项目主体下我们会创建诸如「策划」「评估」「执行」「复盘结案」等常用文档来作为项目执行的一部分:

现在如果我们又有一个新的项目准备加入排期,就可以使用 Button 一键创建多层级的文档:

如果你希望点击按钮后能够自动打开这个创建的页面,那么可以在 Button 的执行队列末尾添加 Open 模块,然后指定你希望打开的页面即可。

创建完毕后,在我们点击 Button 的时候,它就会在完成「创建项目和子页面」之后,直接打开我们指定的那个页面,以便能让我们为这个项目补充更详尽的资料。

功能缺憾

通过 Add page to 这个组件添加的页面的标题无法使用 @today 或者 @now 的时间变量,这实在让我的大脑产生了多次的眩晕和不解。

我们只能创建页面,但无法继续在创建的页面内添加内容。也就是说我们无法将 Insert blocks 模块中的内容添加进 Add page to 所创建的页面里,这点也是我希望 Notion 能够尽快优化或者迭代的地方。

注:本文写于 2023 年 7 月,如果文章更新后 Notion 优化了这几个问题,我也会及时对本文进行修正,也欢迎大家在评论区留言提醒。

Edit pages in——编辑数据库内的特定页面

基础用法

Add page to 这个功能是让你能一键在特定的数据库内添加页面,而 Edit pages in 则是让你能指定某个数据库中的特定页面,然后进行编辑操作。

例如在下图案例中,我用 Checkbox 字段创建了一个简易的打卡数据库,在 Button 出现之前,我需要先找到这个数据库,然后再手动在数据库中逐个点击勾选框:

而现在,我可以在任意地方创建 Button,然后用 Button 将所有的打卡任务一键勾选:

在这个打卡案例中,我所创建的数据库使用了 Template + Repeat 的模板自动重复功能,让这个数据库每天自动生成一页需要打卡的页面:

所以这里就产生了一个问题,数据库自动生成的页面那么多,我怎么才能让 Button 知道我想编辑的页面是哪一个呢?接下来让我来理一遍使用 Button 编辑数据库页面的基本操作。

使用命令 /button 插入按钮模块后,选择 Edit pages in 组件:

为 Button 指定需要编辑的数据库:

为 Button 指定需要编辑的页面。在这一步中,我们就需要用到此前学过的数据库筛选功能,先用 Button 筛选出那一个(或那几个)需要编辑的特定页面,例如:

  • 今天创建的页面(筛选 Date 或者 Created time 字段)
  • 任务状态是 To-do 的页面(筛选 Status 字段)
  • 金额大于 30 的页面(筛选 Number 字段)
  • 标题中包含 XX 关键词的页面(筛选 Title 字段)
  • 任务已完成的页面(筛选 Checkbox 字段)

所以我们需要根据自己的实际需求,让 Button 先执行一轮筛选的操作,这样一来当你点击 Button 的时候,它才知道自己应该编辑哪一个页面。如果你对数据库的筛选过滤还不够了解的话,可以回顾第二章的《表格视图解析》。

所以在前文的每日打卡按钮中,我对 Button 的分析如下:

  1. 数据库的自动模板每天都会产生一个 Page;
  2. 我只想让 Button 对今天生成的打卡目标进行操作;
  3. 我需要让 Button 先筛选出哪些 Page 是今天生成的。

所以此处 Button 的第一步操作就是先设置过滤条件:

通过这一步我们就筛选出了今天创建的打卡页面,接下来就可以指定需要编辑的字段,然后设定编辑条件(将所有 Checkbox 都打勾),设定完毕后,点击 Done 即可完成 Button 的编辑操作。

如此一来,当我们点击这个 Button 时,它就会执行以下操作:

  1. 在关联的数据库内搜索今天创建的页面;
  2. 在今天创建的页面内搜索 Button 指定的字段;
  3. 为指定的字段输入我们提前设定好的编辑条件;

补充

如果这个 Button 是创建在数据库的页面之中,那么我们无须设定复杂的筛选条件,而是可以直接指定 Button 所在的这个页面(this page)来进行编辑:

基于这个特性,我们就可以直接将 Button 放在数据库的模板页内,并将这个 Button 的 Edit pages in 的过滤条件直接指向模板所要创建的这个页面。

案例参考

Edit pages in 本身的操作方法其实并不存在什么困难,对一部分用户来说更困难的其实是以下两点:

  1. 不清楚它的编辑上限;
  2. 不了解它还有哪些适用场景;
  3. 更有可能会没有需求却刻意创造需求。

接下来我将提供几个应用案例供你参考,但请一定忠于自己的实际工作或生活,切勿为了使用 Button 而刻意设定一堆打卡目标,这样只能给自己带来更多烦恼。

案例一:快速修改任务管理表的各种状态

假设我们现在有一个任务管理看板,它的结构如下:

现在我可以使用 Button 一键将所有进行中(In Progress)的任务设置为已完成(Done),然后再从待办清单(To-do)中,将那些优先级为「高」、并且执行人是「二一」的任务拉取到 In Progress 的看板中:

接下来我为这个数据库设置了一个「不显示已归档」的过滤条件(filter),然后就可以用 Button 将所有状态为「Done」的任务修改为「归档」,如此一来就可以快速地将 Complete 看板清空了:

在上述案例中,我们通过 Button 快速且批量地修改了任务的状态,并辅以数据库的视图过滤筛选功能,使用得当的话,的确能大幅提高数据库的组织和管理效率。

案例二:记录打卡时间并计算打卡间隔时长

在下图中我创建了一个简易的读书打卡记录表,这个表格的核心目的是记录「开始读书」和「结束读书」的时间,然后使用数据库公式计算时间间隔,以此得出今日读书的时长:

我创建了一个 Button,然后使用 Add page to 组件在这个打卡数据库中创建了一个新的页面,并对 开始时间 这个字段添加了 Now 的时间变量:

于是当我点击这个 Button 时,这个打卡数据库就能生成如下记录:

接下来再创建一个 Button,然后用 Edit pages in 组件让它先筛选出今日创建的读书任务,然后再为这个任务添加结束时间:

现在点击「结束读书」的 Button,就可以为今天的读书任务添加结束时间,同时因为预先设置好了函数公式,所以它也能够自动计算出开始时间和结束时间的差值:

这里的难点可能还是在于数据库函数公式的计算,具体的写法我们会放到后面的文章再详细介绍,在此之前你可以先参考以下公式:

if(empty(prop("结束时间")), "", format(dateBetween(prop("结束时间"), prop("开始时间"), "minutes")) + " " + "分钟")

另外需要注意的是,Edit pages in 无法直接编辑数据库字段。

其他补充

Show confirmation——确认动作是否执行。有时候按钮放在页面中有可能会在无意中点到,导致数据库或者页面被污染,如果你担心这种情况发生的话,可以在执行动作之前添加一个「是否执行」的确认按钮:

Button 中的组件可以通过拖拽的方式调整执行顺序:

Button 中的组件可以通过复制的方式进行快速复用:

只拥有页面浏览权限(View)的访客无法点击 Button,只有获得页面编辑权限的访客才可以点击 Button:

简单总结

Button 的优势就在于,它可以在几乎所有地方创建,并且能够链接到任意地方的数据库,这就意味着我们无须重复「打开页面 - 打开子页面 - 打开数据库 - 打开数据库中的页面」这样的繁杂操作,只需一键就能够在几乎任意地方执行一组集成化的动作。

所有的数据库在长久地使用中,一定会有筛选、过滤、以及创建多种视图的操作, 但 Button 在执行的时候能够遍历数据库中的所有页面和所有视图。这意味着只要我们为 Button 设定的筛选条件足够准确,我们就无须在数据库中翻找、查阅那一个需要编辑的页面,这同样能为我们节省大量的时间。

《Notion 10 年发展史》这篇文章中,我们提到了 Notion 的终极愿景是让所有人都能够以一种无代码的方式来构建属于自己的工具或者产品,我想 Button 正是在为更好地实现这个目标铺路。毕竟就以 Notion 现在所能实现的功能而言,「搭建应用」已经不仅仅是一个梦想,而是一件当下就可以去执行、去创造的事情。

而且本文几乎全然没有提及 Button 与数据库公式以及 Notion AI 互相联动的应用方式,所以它的上限还远不止本文所讲的这些,后续的课程一定能给你更多的想象空间。

另外如果你成功地使用 Button 创造出了能够优化工作流的用法,也欢迎你分享到评论区和大家一起交流,不用太复杂,也不用担心不够高端化,只要它能帮到你,就一定还能帮到更多人。