开启Redis缓存之后,由于访问是缓存页面,所以会导致页面的浏览量是缓存的浏览量,绕过了数据库的读取,导致统计的计算和显示都不准。
但是缓存可以加快访问速度,而浏览量又丰富了页面显示,所以为了解决这两个问题,开发了这个插件:DamonHu/ViewCount-typecho。
这个统计的特殊之处就是深度适配typecho,只记录文章页的浏览量。通过固定的节点id,js异步请求和局部刷新统计数据,从而即便使用了TpCache等缓存插件,也可以记录数据。
接口api在仓库文档里面写的很清楚,例如在页面显示的地方,调用功能显示浏览量。like和dislike是开发的文章点赞和点踩的功能。在需要的地方自定义显示即可。
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) ?> <?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)); ?> <?php _me('次浏览'); ?></span></li>文章页的点赞和踩
修改主题目录的libs/content/PostContent.php,去掉原点赞部分代码,在第40行增加插件点赞功能。按钮样式可以通过view-count-like-btn和view-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);版权属于:胡东东博客 - hudd.cn
本文链接:https://blog.hudd.cn/1419.html
本文采用知识共享署名4.0 国际许可协议进行许可。转载或大段使用必须添加本文链接,否则您将构成侵权!
微信公众号: 东哥探索笔记
