背景

目前使用的是 xaoxuu/hexo-theme-stellar: 内置文档系统的简约商务风Hexo主题,支持大量的标签组件和动态数据组件 这个主题。

xaoxuu/hexo-theme-stellar stars forks updated release release date

Stellar 是一个内置文档系统的简约商务风 Hexo 主题,支持丰富的标签和动态数据组件,帮助您简单从容地应对各种表达需求,十分推荐内容创作者使用 Stellar 开始您全新的博客之旅。

非常的简约优雅,完全落在我的审美上,而且有独创的 wiki 文档系统,使得站点可以不仅仅是一个博客,还可以是一个或多个项目的文档站点。

Stellar 独创了其它 Hexo 主题所没有的 Wiki 文档系统,可以自动找到一个项目的所有文档分页,生成一个目录树,还可以手动指定顺序、标题、分组,而非依赖文件路径、文件名来排序和显示。

不过我更想要的是一种更接近于本地笔记软件的系统,博客体系还是不太适合,而 wiki 体系比较接近但仍然有一些差异。

博客、专栏、文档、笔记

这里涉及到几个不同的概念:博客、专栏、文档(知识库,Wiki)、笔记。简单整理一下我对这几个感念之间区别的理解。

博客说白了就是公开的日记,抛开纯日常的那种不谈,技术类博客里的内容基本上都是技术相关的文章,一篇一篇地发布。专栏是在一个具体话题下,前后连续性比较强的一系列文章。文档是一个项目的文档树或者知识库,比如用户手册。笔记是关于特定内容的信息收集、整理、沉淀或创作。

博客主要在意发布时间,毕竟本质上还是一种日记。虽然发布之后也会进行修改,但一般是做简单的修订、补充、额外说明等,很少会对原本发布的内容做很大的改变。小的改动一般都可以不用说明更新时间。页面展示的时候,也是优先展示发布时间,弱化或者不展示更新时间。

专栏跟博客类似,只是更加强调前后顺序,这个顺序是依靠发布时间串联的。用专栏的好处是,不用担心在一个专栏的两篇相邻文章之间发布了与其无关的其他文章,会影响读者快速定位同主题的上一篇、下一篇。

知识库强调目录结构,关注更新时间,一般不太关注发布时间。知识库中的内容是会频繁更新的,保持其内容始终跟对应项目的最新状态相对应。相对于专栏的时间线性关联,知识库对结构关系的要求会更强一些,通常会需要手动指定前后顺序以及层级关系。

笔记有点儿像知识库,内容也是持续更新的。但是它的组织结构更松散一些,一般不需要像知识库那样需要手动排列成目录树,也不像博客或专栏那样在意各篇笔记之间的发布顺序,可以简单地按照比如更新时间、标题、发布时间等不同的顺序排列。笔记之间的联系其实会更紧密,而且一般是网状的(相较之下,博客以为理解为没有,专栏是线状,知识库是树状),这种网状结构更适合直接基于每篇笔记的内容进行控制(比如在一篇笔记中引用另外一篇)。如果笔记涉及到的领域比较多,用 tag 来自动维护分组也是比较普遍的做法。

系统 页面数量 组织方式 内容更新 更关注什么时间
博客 无限,持续增加 按发表时间自然排列 较少(修补为主) 发表时间
专栏 无限,持续增加 按时间线性且聚集 较少(修补为主) 发表时间
文档 较少,通常不变 树状目录结构 持续 最后更新时间
笔记 无限,持续增加 标签树 + 引用网 持续 最后更新时间

预期的效果

之前一直使用 Bear 做为桌面/手机上的笔记软件,可以说是最优雅的笔记软件(没有之一)。我希望可以在 Stellar 主题的基础上,也可以打造出类似的效果,来承载笔记这块内容。

可以考虑支持多个笔记本(notebook),一个笔记本相当于现在 Stellar 中的一个 Wiki 或专栏。

笔记的组织方式主要应依赖于 tag,最好支持层级。

笔记页面的左边栏,展示当前笔记本的 tag 树,方便定位到某个具体的 tag。笔记本的首页,或者任何一个标签的首页,可以是类似于博客首页那样的列表(无限加载最好,分页也可以接受)。点击列表中的卡片,打开具体的那篇笔记内容页面。

标签树的排序不需要支持太多可能性,就简单地按照字母顺序排列即可。如果能像 Bear 那样,自动或手动给标签指定 icon 就更好了。

笔记列表(全局或某个标签下)的排序默认是按照更新时间,可以允许设置成按发布时间或标题(如果是生成静态站点,是不是只能是构建时调整顺序,访问时无法调整?)。可以考虑支持置顶功能,

笔记内容页面中展示更新时间,支持查看发布时间但不突出。

不支持 category 或者 folder。category 如果支持多选就跟 tag 类似,只能单选就跟 folder 类似。最上层如果支持多个笔记本,就没有增加 folder 的必要。

在 Stellar 的基础上改造,尽量降低代码冲突的可能性。如果将来原作者愿意把这个功能合并进去当然更好,不愿意的话就在我的 fork 中维护,但还得要保证其他功能继续跟原始版本同步。