最近给本站增加了一个新的小功能:拾记。
平时上网,经常会遇到一些值得留下来的东西。
可能是一段文字、一个网页、一条命令,也可能只是突然冒出来的一个想法。
这些内容通常都很短,不值得专门写成一篇文章,但如果当时不记下来,过几天往往就忘了。
以前我会把它们放在浏览器收藏夹、备忘录、微信文件传输助手,或者干脆先丢进某篇文章的草稿里。时间长了以后,这些零散的信息散落在不同地方,真正需要的时候反而不好找。
所以,我想在自己的 WordPress 网站里专门留一个更轻、更随意的位置。
于是有了本站的:
「拾记」
我给它定下的一句话是:
拾取网络碎片,记录偶尔的想法。
它不是传统博客,也不是一个完整的笔记系统,更像是介于微博、备忘录和个人知识碎片之间的一块地方。
为什么做「拾记」
WordPress 很适合写完整文章。
标题、正文、分类、标签、特色图片,一篇文章从头到尾有比较完整的结构。
但生活中更多时候,我想记录的东西可能只有几句话。
比如:
- 今天看到一个不错的 WordPress 优化方法
- 一条以后可能会用到的 Docker 命令
- 一篇值得以后重新看的文章
- 对某件事情突然产生的一点想法
- 一个临时需要记住的网址
- 某个系统配置过程中遇到的小问题
- 一段以后写文章时可能会用到的材料
如果这些东西都单独写成博客文章,显得太重。
如果什么都不记,又很容易消失。
所以我想给它们找一个比“正式文章”更轻的地方。
本站的「拾记」,基本就是从这个想法开始的。
不需要标题,想到什么就记什么
做拾记时,我首先去掉了传统 WordPress 文章最明显的一个东西:
标题。
拾记本身就是碎片记录,不需要每写一句话都先想一个标题。
后台新增拾记时,直接写正文就可以。
前台快速录入也是一样。
例如想到一句:
今天重新整理了一下 WordPress 的缓存设置,发现有些以前习惯性的配置已经没有必要了。
直接输入,点发布。
完成。
整个过程尽量保持轻量。
这也是我比较喜欢 Memos 这类工具的地方:
不要让“记录”本身变成一件很重的事情。
不想每次都进 WordPress 后台
如果每次记一句话都需要:
登录 WordPress 后台
→ 拾记
→ 新增拾记
→ 编辑
→ 发布
那实际上还是有点麻烦。
所以后来我给本站拾记单独做了一套独立口令。
访问拾记页面后,可以直接在页面中输入拾记口令。
验证成功以后,就可以在前台直接进行:
- 新增拾记
- 编辑拾记
- 删除拾记
- 置顶
- 添加标签
- 设置公开或私密
- 复制永久链接
还可以选择:
记住 30 天。
这样自己的手机、电脑通常只需要第一次输入口令,以后打开拾记页面,就可以直接记录。
更重要的是:
这个口令不会把自己登录成 WordPress 管理员。
它不能进入 WordPress 后台,也没有插件、用户、主题等管理权限。
它只负责本站「拾记」这一套功能。
对于日常随手记录来说,这种方式比长期保持 WordPress 管理后台登录状态方便得多。
公开和私密
并不是所有拾记都适合公开。
有些可能只是自己的工作记录、临时想法、待办事项或者私人备忘。
所以每一条拾记都可以选择:
🌐 公开
或者:
🔒 私密
快速录入时,当前状态会直接显示出来。
点击一下:
🌐 公开 → 🔒 私密
再点一下:
🔒 私密 → 🌐 公开
比传统复选框更直观。
对于公开拾记,访客可以正常阅读。
对于私密拾记,未解锁时只能看到:
🔒 此条为私密拾记,仅自己可见
正文不会显示。
私密内容不是简单“隐藏”
做私密功能的时候,我比较在意一个问题:
不能只是用 CSS 把内容隐藏起来。
如果正文已经存在网页源代码里,只不过前端设置成:
display:none
那实际上还是可以被找到的。
所以本站拾记现在采用的方式是:
私密正文在未解锁时根本不会输出到公开页面 HTML 中。
访客看到的只有一条私密提示。
只有独立拾记口令验证通过以后,浏览器才会通过 AJAX 单独向服务器请求私密内容。
整个流程大致是:
拾记口令
↓
验证通过
↓
获得签名认证 Cookie
↓
AJAX 请求私密拾记
↓
服务器再次验证
↓
返回正文
这样比单纯在前端隐藏内容要可靠得多。
私密标签也不会提前暴露
除了正文以外,标签本身有时候也可能透露信息。
比如一条私密拾记的标签是:
#工作调整
#家庭
#财务
即使正文看不到,标签本身也可能泄露一些不想公开的信息。
所以现在的处理方式是:
如果某个标签只被私密拾记使用,那么在未解锁状态下,右侧标签栏也不会显示它。
只有输入拾记口令解锁以后:
- 私密正文才加载
- 私密拾记对应的标签才显示
- 私密标签才加入右侧筛选区域
如果某个标签同时被公开拾记使用,例如:
#WordPress
那么它在公开状态下仍然可以正常显示,因为公开内容本身已经使用了这个标签。
关闭 WordPress 的其他公开入口
因为拾记本质上还是建立在 WordPress 之上,所以除了页面本身,还要注意 WordPress 自带的一些数据访问入口。
目前我已经把拾记相关的公开入口进一步收紧。
拾记不会进入:
- WordPress 默认站内搜索
- 普通文章归档
- 默认单篇文章查询
- WordPress REST API
- REST 标签接口
- WordPress Core Sitemap
- 普通 Rewrite 地址
本站拾记真正需要的内容读取、发布、修改等操作,都通过自己控制的前台逻辑和 AJAX 完成。
这样可以尽量避免私密内容通过其他 WordPress 接口意外暴露。
当然,这里的“私密”属于访问控制。
正文仍然保存在自己的 WordPress 数据库里,并不是数据库字段层面的 AES 二次加密。
也就是说:
普通访客无法读取;
未解锁页面无法获得正文;
搜索引擎无法正常抓取;
REST API 也无法读取;
但如果本身已经拥有服务器、数据库或者 WordPress 管理权限,当然仍然可以接触这些数据。
对于个人网站来说,我觉得目前这种安全性和使用方便程度之间比较合适。
标签:给碎片增加一点秩序
碎片信息积累多了以后,最大的问题就是:
越来越乱。
所以本站拾记支持多个标签。
比如一条记录可以同时属于:
#WordPress
#Docker
#建站
快速录入时可以使用中文或英文逗号分隔:
WordPress, Docker, 建站
一条拾记可以使用多个标签。
实际使用中,我更倾向于每条控制在 1~3 个左右。
太多标签反而容易失去分类意义。
标签支持自动提示
如果标签越来越多,很容易出现:
WordPress
wordpress
WordPress
这种实际上意思一样,却被创建成不同标签的情况。
所以快速录入增加了标签自动提示。
例如输入:
Wor
系统会自动显示已有标签:
#WordPress
#WordPress建站
可以直接点击选择。
也支持键盘:
↑ / ↓ + Enter
这样可以尽量复用已有标签,而不是不断创建近似的新标签。
三列标签布局
右侧标签区域采用固定三列。
类似:
全部
#WordPress #Docker #网络
#建站 #生活 #收藏
“全部”单独放在左边,占一个标签宽度。
其他标签严格三列等宽。
如果标签名字太长,会自动显示省略号,但实际标签内容并没有被截断。
鼠标悬停时仍然可以看到完整标签名。
这样即使以后标签越来越多,页面也还能保持比较整齐。
时间流
拾记主要还是按照时间阅读。
页面主体就是一个简单的时间流:
9月3日
12:20
……
11:45
……
9月2日
18:35
……
没有复杂的层级。
没有文章目录。
也不需要给每一条内容单独起标题。
对这种碎片记录来说,我觉得时间本身就是最自然的组织方式。
日历
右侧还有一个简单的日历。
普通日期没有背景。
有拾记的日期,会使用淡蓝色的小圆形标记。
今天则使用实心蓝色。
如果点击一个有记录的日期,页面会自动跳到那一天的拾记。
对于这种长期积累的小记录,我觉得日历比传统 WordPress 的“月份归档”更加直观。
搜索
拾记越来越多以后,搜索是必不可少的。
右侧提供实时搜索。
输入关键词以后,页面会立即筛选对应内容。
不需要重新提交搜索页面。
公开状态下:
只能搜索公开拾记。
独立口令解锁后,私密正文被安全加载进当前页面,这时候自己的搜索也可以搜索私密内容。
也就是说:
普通访客的搜索不会搜索到私密正文。
置顶
有些内容虽然只是拾记,但可能经常要用。
例如:
- 常用服务器命令
- 某个后台入口
- 最近重点研究的内容
- 当前阶段的重要事项
- 经常需要查看的网址
所以本站拾记增加了:
置顶 / 取消置顶
置顶以后,这些内容会优先显示在页面前面。
不需要为了几句话再专门写一篇文章。
每条拾记都可以编辑
碎片记录有一个特点:
经常是在当时快速写下来。
所以很容易出现:
刚发完发现有错字;
过一会儿想补充一句;
标签选错;
原来公开的内容想改为私密。
现在独立口令解锁以后,每一条拾记右上角都有一个:
⋮
点击以后可以:
- 置顶 / 取消置顶
- 编辑
- 复制永久链接
- 删除
编辑窗口可以同时修改:
- 正文
- 标签
- 公开 / 私密状态
使用起来已经比较接近一个独立的小型 Memos。
删除先进入回收站
删除功能我没有设计成直接永久删除数据库内容。
点击删除以后,拾记会先进入:
WordPress → 拾记 → 回收站
这样如果误删,仍然可以恢复。
对于个人长期记录的数据,我觉得这种方式更稳妥。
每条拾记都有永久链接
虽然拾记大部分只是碎片内容,但有时候某一条本身也值得单独分享。
现在每条拾记都有自己的永久链接,例如:
点击一条拾记的时间,也可以进入对应永久链接。
右上角菜单中还可以:
复制永久链接
以后要把某一条公开拾记发给别人,不需要让对方打开整个拾记页面再找。
如果这个永久链接对应的是私密拾记,那么即使别人知道链接,也只能看到:
此条为私密拾记,仅自己可见
仍然需要拾记口令才能看到真正内容。
内容多以后使用「加载更多」
最初拾记只有十几条的时候,一次全部加载并没有什么问题。
但如果以后积累到:
几百条、
上千条,
每次打开页面都把所有内容加载出来就没有必要了。
所以现在改成:
首屏加载 30 条。
页面底部提供:
加载更多
每点击一次,再加载下一批。
这样随着拾记越来越多,页面也不会越来越重。
搜索、标签筛选或者日历定位到比较旧的内容时,也会继续按需要补载数据,避免出现:
“明明以前写过,但因为还没加载出来所以搜索不到”
这种情况。
草稿自动保存
快速记录还有一个比较实际的问题:
写到一半不小心刷新怎么办?
所以录入框增加了临时草稿。
正文、标签以及公开 / 私密状态都会自动保存。
如果误刷新页面,重新打开后还能继续写。
正式发布成功以后,再自动清除草稿。
目前草稿使用浏览器当前会话保存。
这样既可以避免误刷新造成内容丢失,又不会让尚未发布的内容长期残留在浏览器里。
手机端是重点
实际上,本站「拾记」一个很重要的使用场景就是手机。
电脑前如果有足够时间,完全可以直接写博客文章。
但很多零碎内容,往往是在手机上看到的。
所以移动端做了不少单独调整。
手机右下角快速录入
拾记解锁以后,手机页面右下角会出现一个:
+
不需要回到页面顶部。
点一下就可以打开快速录入窗口。
可以直接:
- 写正文
- 选标签
- 切换公开 / 私密
- 发布
对于随手记录来说,比传统 WordPress 后台方便很多。
自动避开本站手机底部菜单
本站手机页面本身还有固定底部导航。
如果简单把快速发布按钮固定在屏幕底部,很容易和底部菜单重叠。
所以现在的处理不是写死:
bottom: 60px
而是让拾记页面自动检测本站手机底部菜单的实际位置和高度。
然后:
- 右下角
+自动移动到底部菜单上方 - 快速录入窗口自动避开底栏
- 编辑窗口自动避开底栏
- “发布”按钮不会被菜单盖住
- “保存”按钮不会被菜单盖住
同时也处理了 iPhone 的底部安全区域。
即使以后底部导航高度发生变化,拾记页面也能跟着调整。
手机编辑弹窗自适应
编辑拾记时,手机页面不再简单使用:
width:100%
把弹窗顶满整个屏幕。
现在采用的是自适应宽度。
普通手机上约占屏幕宽度的 92%,左右保留一点空间,看起来更像一个独立的编辑卡片。
同时限制最大宽度,大屏手机也不会无限拉宽。
正文过长时内部滚动,底部“取消 / 保存”保持可见。
导出
虽然本站拾记的数据本身已经包含在 WordPress 数据库备份里,但我还是希望:
这些记录不要完全被某一个系统绑定。
所以拾记后台增加了单独导出。
目前支持:
JSON 导出
包含:
- ID
- 正文
- 发布时间
- 修改时间
- 标签
- 公开 / 私密
- 置顶状态
- WordPress 状态
- 永久链接
JSON 更适合:
备份、
程序处理、
以后迁移到其他系统。
Markdown 导出
Markdown 更适合长期阅读和个人保存。
即使以后不再使用 WordPress,也可以直接打开这些文字。
数据仍然存在 WordPress 数据库
本站拾记没有重新建立另一套数据库。
依然使用 WordPress 原生的数据结构。
大致包括:
wp_posts
保存:
- 正文
- 发布时间
- 修改时间
- 作者
- 状态
wp_postmeta
保存:
- 私密状态
- 置顶状态
- 其他扩展数据
wp_terms
wp_term_taxonomy
保存标签。
wp_term_relationships
保存拾记和标签之间的对应关系。
独立拾记口令本身保存的是:
密码哈希
而不是明文密码。
因此本站现有的 WordPress 数据库备份,也会自然包含拾记数据。
不用再单独维护另一套数据库备份方案。
为什么没有直接安装一个 Memos
其实 Memos 本身已经是非常成熟的工具。
如果单纯只是想找一个碎片记录工具,直接部署 Memos 当然更加简单。
但我最终还是想把这个功能放进本站 WordPress。
原因也很简单:
我希望这些东西最终还是属于自己的网站。
文章在这里。
以前整理的教程在这里。
自己的资料、经验和记录也在这里。
那这些还没形成完整文章的碎片,似乎也可以留在这里。
它们和正式文章并不是完全独立的。
很多正式文章,最开始可能就只是一个:
想法、
链接、
命令、
配置记录、
一段阅读笔记。
以后某一天重新看到,可能才会慢慢整理成一篇完整文章。
所以我更愿意把拾记理解成:
本站正式文章之前的一块草地。
有些内容最后会长成文章。
有些不会。
都没关系。
不准备把它做得越来越复杂
到目前为止,本站拾记已经有:
- 无标题快速记录
- 前台快速发布
- 独立拾记口令
- 记住 30 天
- 公开 / 私密
- 私密内容 AJAX 加载
- 私密标签保护
- 标签
- 标签自动提示
- 标签筛选
- 搜索
- 日历
- 时间流
- 编辑
- 删除
- 回收站
- 置顶
- 草稿自动保存
- 永久链接
- 加载更多
- 手机快速录入
- 手机底栏自动避让
- JSON 导出
- Markdown 导出
对于一个个人网站里的碎片记录功能来说,已经基本够用了。
后面可能还会继续做一些小优化。
但我暂时不准备加入:
点赞、
评论、
关注、
社交时间线、
复杂互动。
因为本站「拾记」的定位一直不是做另一个微博,也不是准备重新开发一个完整的 Memos。
它只是本站的一部分。
写完整的,放博客;没长成文章的,放拾记
对本站来说,我希望以后慢慢形成一种比较简单的内容分工。
完整的教程、经验总结、长期值得整理的内容:
写成博客文章。
只是几句话、一个链接、一点临时想法、一条以后可能有用的信息:
放进拾记。
有些拾记以后可能会整理成正式文章。
有些可能永远只是几句话。
但至少,它们不会因为当时觉得:
“这个不值得专门写一篇文章”
最后彻底消失。
这也是我给本站增加「拾记」最初的想法:
拾取网络碎片,记录偶尔的想法。
给那些还没长成文章的内容,
留一个属于本站、也属于自己的归处。
