开启Redis缓存之后,由于访问是缓存页面,所以会导致页面的浏览量是缓存的浏览量,绕过了数据库的读取,导致统计的计算和显示都不准。

但是缓存可以加快访问速度,而浏览量又丰富了页面显示,所以为了解决这两个问题,开发了这个插件:DamonHu/ViewCount-typecho

这个统计的特殊之处就是深度适配typecho,只记录文章页的浏览量。通过固定的节点id,js异步请求和局部刷新统计数据,从而即便使用了TpCache等缓存插件,也可以记录数据。

接口api在仓库文档里面写的很清楚,例如在页面显示的地方,调用功能显示浏览量。likedislike是开发的文章点赞和点踩的功能。在需要的地方自定义显示即可。

echo ViewCount_Plugin::show($this->cid, array('pv' => true, 'like' => false, 'dislike' => false));

拓展阅读

handsome主题本身已经支持显示浏览统计,但是默认因为性能问题不开启,所以这里写一下使用内置的和插件的区别。

文章列表页的统计显示

使用内置浏览统计:

修改Content.php文件的echoPostList函数,将$options->commentChoice != "0"的判断修改为

if (true || $options->commentChoice != "0") {
    $parameterArray['viewNum'] = get_post_view($obj);
} else {
    $parameterArray['viewNum'] = 0;
}

修改returnPostItem函数,增加浏览数变量

$viewNum = $parameterArray['viewNum'];
$viewNumString = $viewNum . " " . _mt("次浏览");

使用插件统计

修改Content.php文件的echoPostList函数,在parameterArray初始化时,增加cid读取

$parameterArray = array();
$parameterArray['cid'] = $obj->cid;

修改returnPostItem函数,增加浏览数变量

$count = ViewCount_Plugin::getCount($parameterArray['cid']);
$viewNum = $count['pv'];
$viewNumString = $viewNum . " " . _mt("次浏览");

这样就支持了文章列表页的浏览数的数据支持,然后在后面需要显示的地方增加显示即可。

文章页的显示

内置统计是

<li class="meta-views"><span class="post-icons"><i data-feather="eye"></i></span><span class="meta-value"><?php echo get_post_view($this) ?>&nbsp;<?php _me('次浏览'); ?></span></li>

使用插件的话就是

<li class="meta-views"><span class="post-icons"><i data-feather="eye"></i></span><span class="meta-value"><?php echo ViewCount_Plugin::show($this->cid, array('pv' => true, 'like' => false, 'dislike' => false)); ?>&nbsp;<?php _me('次浏览'); ?></span></li>

文章页的点赞和踩

修改主题目录的libs/content/PostContent.php,去掉原点赞部分代码,在第40行增加插件点赞功能。按钮样式可以通过view-count-like-btnview-count-dislike-btn样式修改来自定义显示样式。

$returnHtml .= '<div class="my-custom-wrapper" style= "margin-bottom: 25px;">' . ViewCount_Plugin::show( $cid, array('pv' => false)) . '</div>';

数据写入

handsome自带的字段读取的是typecho_contents表cid、views和likes字段,插件为了避免污染主表数据库,所以新建了typecho_post_view_count表,表有cid、pv、likes字段。所以把typecho_contents表中的views和likes根据cid覆盖写入到typecho_post_view_count中即可恢复老的点赞和浏览量。

INSERT INTO typecho_post_view_count (cid, pv, likes)
SELECT cid, views, likes 
FROM typecho_contents
ON DUPLICATE KEY UPDATE 
    pv = VALUES(pv),
    likes = VALUES(likes);
最后修改:2026 年 07 月 04 日
请我喝杯可乐,请随意打赏: ☞已打赏列表