纠结要不要统一博客和 memos 动态的评论好久了!
因为我的主题对于评论显示进行了优化,是自己比较喜欢的风格;而 memos 动态不得不使用了一个叫做 Artalk 的评论系统。两套评论数据不共享问题成了一直以来的痛点。
这次我狠下心来,总算是完成了这个艰巨的任务。
一、思路
- 用 AI 做一个 Artalk 评论插件,分离原来 memos 动态插件集成的 Artalk 功能,这样我的文章和 memos 笔记就都可以用统一接口注入 Artalk 评论了。
- 用工具将博客评论数据转换为 Artrans 格式,迁移至 Artalk 评论数据库。
- 做一个页面,将 Artalk 数据库中的 page_key 格式从
/archives/{cid}/和{slug}.html之间相互转换,以适配博客的显示风格。
二、开发并启用 Artalk 插件
配置好 Artalk服务器地址、博客评论站点名、memos 笔记站点名后,在主题模板中进行注入。
插件也将一些内置的 CSS 样式进行了复写,让其稍微美化了一下。
// 文章页面中显示评论
if (\Typecho\Plugin::exists('Artalk')) {
echo Artalk_Plugin::toggleBtn($this->cid, parse_url($this->permalink, PHP_URL_PATH), $this->title);
}
// memos 笔记列表中显示评论按钮
if (\Typecho\Plugin::exists('Artalk')) {
echo Artalk_Plugin::toggleBtn($name, $key, $name, \Artalk_Plugin::configVal('artalkSiteMemos'));
}
// 仅链接至文章评论页面
if (\Typecho\Plugin::exists('Artalk')) {
echo Artalk_Plugin::commentCount(parse_url($this->permalink, PHP_URL_PATH))
}如果是新搭建的博客,至此就已经算完成了评论系统的转换。但如果博客已经有一些评论数据,要想使用新的评论系统,就必须先做一番数据迁移才行。
三、评论数据迁移
首先需要理解下面两点:
- Artalk 评论支持一个叫做数据行囊(Artrans = Art + Ran)的持久化数据保存的规范格式。
- typecho 可以用工具将评论数据导出为 Artrans 格式的文件。
接下来就围绕 typecho -> Artrans -> Artalk 的转换来完成评论数据的迁移。
1. 使用 Artransfer-CLI 工具来导出 Artrans 格式的文件
下载和解压 Artransfer-CLI 之后,运行下面的命令来生成 Artrans 格式的文件
./artransfer typecho \
--db="mysql" \
--host="localhost" \
--port="3306" \
--user="数据库用户名" \
--password="数据库密码" \
--name="typecho博客的数据库名" \
--table-prefix="数据表前缀_"2. 登陆 Artalk 评论后台将 Artrans 格式的文件数据导入 Artalk 评论系统
这里要注意填写正确的目标站点名和目标站点URL
3. 修正数据
对于独立页面,数据迁移时默认会将 page_key 直接生成为{slug}.html的格式;但对于博客文章,数据迁移时默认会将 page_key 生成为/archives/{cid}/的格式,如果我们的站点也是使用这种风格,则完美匹配;如果我们的站点使用的是 wordpress 风格,也就是/archives/{slug}.html格式,则需要进行转换。
这是数据库中刚刚转换的数据,可以看到这些数据的 page_key 都是 /archives/{cid}/`格式,而我网站使用的是wrodpress风格路由,因此需要转换。
我直接做了一个页面来进行转换,下面是转换的截图:
同时也支持在站点根目录下,执行下面的语句来进行转换
# 预览不执行:/archives/{cid}/ → /archives/{slug}.html
php usr/plugins/Artalk/migrate.php --to slug --dry-run
# 执行转换
php usr/plugins/Artalk/migrate.php --to slug --yes
# 反向转换:/archives/{slug}.html → /archives/{cid}/
php usr/plugins/Artalk/migrate.php --to cid --yes下面就是我成功执行脚本文件后的提示信息。
$ php usr/plugins/Artalk/migrate.php --to cid --yes
PHP Warning: Constant __TYPECHO_ROOT_DIR__ already defined in /home/hy/www/config.inc.php on line 3
Typecho 文章数: 77
匹配到可转换的 pageKey: 49 条
转换预览(前 10 条):
------------------------------------------------------------
/archives/159.html → /archives/159/
/archives/261.html → /archives/261/
/archives/262.html → /archives/262/
/archives/266.html → /archives/266/
/archives/51towuhan.html → /archives/251/
/archives/83.html → /archives/83/
/archives/add-bilibilivideo.html → /archives/44/
/archives/addcrontab.html → /archives/144/
/archives/addfootmap.html → /archives/140/
/archives/alist.html → /archives/132/
... 等 39 条
转换完成!
hollowman_pages: 50 条
hollowman_comments: 988 条
hollowman_notifies: 0 条至此,评论迁移工作大功告成!!!
By:ymz316
In:




