用Notion管理读书项目

Notion是什么

Notion是一款全能型笔记应用,你可以用它排版、管理笔记、管理工作项目、建立数据库、建立Wiki档案库,甚至免费构建出一个网站来。不太夸张的说,只有你想不到,没有它做不到的。如果你会一点点编程(当然这个要求也相当低),那么你绝对可以把Notion使用出意想不到的效果。用一句简单的话来概括Notion的核心功能,就是Page + Block(Database) + Markdown,此外还支持导入与导出,内嵌网页等功能。

为什么要管理读书

书读多了之后,我渐渐陷入了迷茫、混乱的状态,比如不知道一本书读了多久,为什么会读,收获了什么,有多少书在读?有多少书想读?它和之前读的书联系在哪里?鉴于以上,管理自己的读书就变得有必要了,因此我详细思考了自己的需求。

需要实现的需求:

  1. 管理读书进度(心愿单、未读、在读、已读)
  2. 对图书进行分类(论述作品、文学作品、记续作品)
  3. 是否有电子书
  4. 记录一本书的阅读时间跨度
  5. 记录为什么会读、读书的来源在哪里
  6. 记录与其他书的联系
  7. 记录读书笔记

基于以上需求,最终用Notion实现的效果还不赖,还请看下面一段视频介绍。

那么如何实现呢?本文正是向大家介绍实现过程的,虽然还带着一点安利Notion的心态,嘿嘿,请各位和我一起继续往下看吧!噢对了,由于Notion功能强大,这也导致上手起来没那么容易,如再慢慢介绍Notion的基础功能,篇幅可能就不够了,而介绍Notion的文章也已经很多,这里还推荐各位到少数派(sspai.com)看看相关的文章。当然我自己也整理了一些,各位打开下列网址,就可以看到了:

https://www.notion.so/hchgfxfz/Notion-00fe9f5ee77744059b850897e8bc35e9

大家准备好了,那我们开始吧!本文的教程仅提供一个思路,在任何环节,各位都可以自由发挥,实现自己的需求。

步骤

1.建立数据库

Notion是基于page管理内容的,首先需要做的是新建一个Page,长相如下:

image-20200104174112271

由于我们的读书项目是基于数据库的(database),那么我们选择database的内容Table或Board都可以,Table是表格的形式,Board是看板的形式,虽然形式不同,但具有同样的数据结构,是可以相互转换的。

以Table为例开始。

我们可以把整个数据库视为一个对象集——图书馆,对象为图书,每一个具体的图书视为具体的实例,而每一个对象都有自己的属性,以人为例就有身高、体重、性别、姓名、爱好等等,那么图书根据我们的需求就有类别、作者、进度、时间等等。

image-20200104175448657

新建的数据库默认只有三个属性(Name、Tags、Files),就需要我们自行修改了。点击一栏,选择Open,界面如图。

图3

删除Files和Tags两个属性,点击Add a Property(添加属性)。

image-20200104180054663

根据我们的需要添加基础属性有Date(用于记录时间)、Select(用于选择类别和作者和评分)、Multi-Select(用于设置标签)、Checkbox(用于判断类型,如是否有电子书)、以及Formula(用于计算阅读时间的间隔和判断是否显示在看板上)。下图是一本书需要的属性:

image-20200104180837779

使用Select基础属性设置一个具体的Status属性(即状态),选项包括Not Started(要读但未读的书),In Progress(在读)、Finished(已读)、Suspended(因为某种原因而暂停读的书)、Wishlist(想读但还没有条件获得图书的书),特别注意的是,Status将作为我们之后建立看板的依据。

image-20200104181047682

属性的建立过程中,我需要向各位特别讲解两个属性,即Days(读书时间长度)和OnBoard(是否显示在看板上),为什么需要特别讲解呢?因为这里用到了编程的思想。两者都是使用Formula作为基础的。

选择Days,点击Edit Formula,填写代码:

if(if(prop("Status") == "Finished", dateBetween(end(prop("Date")), prop("Date"), "days"), dateBetween(now(), prop("Date"), "days")) == 0 or prop("Status") == "Not Started" or prop("Status") == "Wishlist", "0", format(if(prop("Status") == "Finished", dateBetween(end(prop("Date")), prop("Date"), "days"), dateBetween(now(), prop("Date"), "days")))) + if(if(prop("Status") == "Finished", dateBetween(end(prop("Date")), prop("Date"), "days"), dateBetween(now(), prop("Date"), "days")) <= 1 or prop("Status") == "Not Started" or prop("Status") == "Wishlist", " day", " days")

注意这里使用的编程语言不是常见的语言,是notion基于JavaScript所简化的,相关的语法规则需要特别学习一番,想了解更多的各位可打开这个网址:https://www.notion.so/Notion-Formulas-30d8d88656534222949d7210eccfa608

想必各位看到这里一定晕头转向了,虽然这是我自己写的,看起来也晕晕的,但其实这是非常简单的一段代码,说白了就是利用Date属性计算阅读开始和结束时间的时间差,即读完一本书所需的时间。对于未读完的书,则可以计算现在距离开始时的时间差。

OnBoard属性是用于判断一本书是否显示在看板上。

为什么要特地设置一个OnBoard属性呢?

假如读书积累到了一定程度,Finished属性的图书将变得非常多,这会导致在Finished栏目下的图书显示很长一串,显然这是非常不必要且不雅观的。OnBoard结合Filter(筛选)将解决这个问题。

OnBoard代码如下:

if(prop("Status") == "Finished" and (dateBetween(now(), end(prop("Date")), "days") <= 21 or dateBetween(now(), prop("Date"), "days") <= 30) or prop("Status") == "In Progress" or prop("Status") == "Suspended" o
r prop("Status") == "Not Started" or prop("Status") == "Wishlist", true, false)

代码解释是,如果为在读、暂停、未读和心愿单将选择为Onboard,如果是已读则将判断是否为最近一个月读的书,大于一个月前读的书或二十一天前读的书将不选择为Onboard

以下为建立数据库后表格显示的内容,以后每添加一本书(实例),将会自动带上属性供选择。

image-20200104180619628

2.制作看板

  1. 在左上角Table View下,点击Add a View,选择Board,之后在右上角Group by 选择Status(即之前设置的属性)。
image-20200104193630391
  1. 设置Filter(筛选),选择Onboard属性,如下图:
image-20200104194142847
  1. Properties内容选择为:
image-20200104194338985
  1. Sort(排序)设置为:Date -> Descending

最终,看板效果如下:

image-20200104184515520

3.添加新建图书模板

在右上角可以看到一个New按钮,下拉选项中有一个新建模板的选项,点击New Template。

image-20200104194856435

命名为New Book,并编辑内容大概如下,也可以根据自己的需要作修改。

image-20200104195030384

编辑完成后新建一本书时就可以直接套用模板了。

好啦,以上就是全部过程了,欢迎各位在看或者收藏!我的读书页面已经分享出来,打开以下网址即可查看:

https://www.notion.so/hchgfxfz/88c12fe2f70a433faf00fa5637536126?v=f6091eadbe924fe99aef94e2e48f03be

此外

对了,用Notion也可以制作旅行清单!效果如下图,至于如何实现在页面中插入地图,还容我下次再告诉大家!

One thought on “用Notion管理读书项目”

Leave a Reply to crossairplane Cancel reply

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.