博客装修记:评论回复,OpenGraph
其实有修补博客程序之后略微做记录的习惯,但是如果每次都单独发文,就显得有些杂乱了,因此凑一批再说。不过这次嘛...OpenGraph支持已经足够单独当一批了,因此一起发出来。

1. 前言
闲下来的时候就会没事干,没事干就会折腾这个博客。
总的来说,OpenGraph是功能,评论回复是外观,别的地方暂时好像没有什么能动的,再加上过多的PHP动作比较吃机器性能,所以还是少动一点为妙。
2. 评论回复
应该说,指的是评论条目的回复按钮,也就是下面红色的那个:

如图所示,Typecho其实支持评论回复功能,但是主题并未显示,甚至用F12检查都能看见这个回复按钮,但是在waxy-main.css中,被人为设置为了不显示。
/* 在1173行 */
.about-author .comment-reply {display:none;}至于为什么主题作者需要设置为不显示,笔者并不清楚,但一个可能的猜测是:回复的评论其实是缩进进去的,如果追加评论层数过深,会导致缩进深度过大,导致展示效果不佳。实测在回复到5层左右的时候,最后一层在手机端就会被挤到最右侧,成了一长条,很难阅读。
我不确定这个功能是不是在旧版Typecho年代传下来的,就笔者目前用的这个版本而言,他支持在后台设置最大评论深度(目前设置为3层),达到这个深度,就不再输出回复按钮了。此外,这行CSS往上几行,有一个控制评论回复缩进深度的选项:
.about-author .comment-list .comment-list {
padding-left: 200px;
}只需要适当缩小这个值(目前为80px),再加上后台限制层数,就可以放心地取消掉主题中对于回复按钮的屏蔽。
3. OpenGraph
在把网页分享到QQ,Twitter等社交平台时,有时候会看到很好看的分享卡片:
比如这样的这其实就是OpenGraph规范(下面简称OG)的功劳,他提供了一种通用的元数据表示方式,让遵守此规范的社交平台,能快速获取站点信息,文章信息,从而生成适合这个平台的分享卡片。比如上面那篇博文对应的OG标签如下:
<meta property="og:locale" content="zh_CN" />
<meta property="og:url" content="https://blog.mfwt.top/index.php/archives/857/" />
<meta property="og:type" content="article" />
<meta property="og:title" content="如何正确使用一台(多波段)收音机 - 枫林灯语" />
<meta property="og:description" content="上次介绍了关于桦加沙来之前的准备..." />
<meta property="og:image" content="http://blog.mfwt.top/usr/uploads/img/favicon.big.png" />
<meta property="og:logo" content="http://blog.mfwt.top/usr/uploads/img/favicon.big.png" />要生成这样的内容,用插件是一个很好的选择。站点上本来就有一个用来生成JSON-LD的插件,因此只需要在这个上面修改就行了。
打开插件代码,先准备数据:
$siteName = $option -> title;
$archiveTitle = $t -> getArchiveTitle() ?? $siteName;
$archiveTitle = ($archiveTitle == $siteName) ? $archiveTitle : $archiveTitle.' - '.$siteName;
$articleCreateTime = date('Y-m-d\TH:i:sP', $t -> created);
$articleModifiedTime = date('Y-m-d\TH:i:sP', $t -> modified);
$description = $t -> getDescription();
$url = $t -> getArchiveUrl();
$siteImage = '此处硬编码了一个图像地址';
$ogData = [
'site_name' => $siteName,
'title' => $archiveTitle,
'description' => $description,
'url' => $url,
'logo' => $siteImage,
'image' => $siteImage,
'type' => 'website',
'locale' => 'zh_CN'
];
数组中的字段,在下面的代码里是可以覆写和追加的。原来生成JSON-LD的时候,已经有判断当前页面类型的操作,因此可以直接复用原来的代码,在判断完页面类型后,覆写部分字段,就可以动态生成所需要的OG数据了:
// 文章页,修改类型为文章
// 然后加上文章专有的字段
$ogData['type'] = 'article';
$ogData['article:author'] = $authorName;
$ogData['article:published_time'] = $articleCreateTime;
$ogData['article:modified_time'] = $articleModifiedTime;最后,输出:
// 输出OG标签
foreach($ogData as $k => $v) {
if($v == '') {
// 空白字段,跳过
continue;
}
echo("<meta property=\"og:{$k}\" content=\"{$v}\">\n");
}就可以在页面上得到动态的OG标签了。

4. 写在最后
只是简单修补了一下这个博客,让他能更好地运行而已。
(完)