一款基于 typecho
的浏览量、点赞量统计插件。
本插件是基于typecho 1.3.0
版本,并采用php 8
的语法开发的,如果您的typecho
版本低于1.3.0
,请先升级到该版本,否则会存在兼容性问题,由于typecho 1.3.0
目前还是alpha
版,保险起见,你可以直接通过如下地址下载:
https://pan.baidu.com/s/1kuCOQ2KrRCjT79LTLGFfcQ?pwd=yyds
该代码是从作者官方镜像joyqi/typecho:nightly-php8.2-fpm
中复制出来的,未作任何修改。我的网站正在运行的也是这个版本,已经经过了我和朋友们的检验,目前运行良好,可以放心使用。
插件特色
- 支持浏览量统计与显示
- 支持点赞量统计与显示
- 支持文章列表自定义排序
- 支持浏览量、点赞量异步接口调用
- 实现浏览量、点赞量当天不重复计算
- 支持点赞在当天取消
- 实现防抖策略,避免多次重复提交
实现榜单查询功能
插件安装
- 下载 LZStat ,解压到
usr/plugins/
目录下,将文件夹命名为LZStat
,确保Plugin.php
文件直接在LZStat
文件夹下; - 登录博客后台,进入
控制台
->插件
,选择LZStat
插件; 启用
插件即可。
功能介绍
1. 浏览量统计与显示
插件启用之后,代码无需任何改动,也不需要配置,默认就可以实现对文章浏览量
的统计,然后你就可以在你的页面中,通过如下代码显示统计结果了。
<?php $this->viewsNum(); ?>
2. 点赞量统计与显示
点赞量统计与浏览量统计类似,只是没有默认统计一说,而是必须手动点击触发。因此,你必须在被点击的元素上,加上set-likes
类和data-cid
属性,示例代码如下:
<i class="set-likes iconfont icon-zan" data-cid="<?php $this->cid(); ?>"></i>
然后,通过如下代码显示点赞量:
<?php $this->viewsNum(); ?>
当然,如果你点错了或者后悔了,再次点击,就会取消点赞,即点赞数减一。
你也可以在自己的css
文件中加入如下样式,以实现鼠标悬停的效果(因为每个人想要的效果可能不一样,所以该样式没有内置到插件中)。
.set-likes:hover {
cursor: pointer;
color: #dc3545;
}
如果你希望点赞
完成后,点赞量在当前页面无刷新的更新,则需要在显示点赞量的标签上加上get-likes
类和data-cid
属性,示例代码如下:
<span class="get-likes" data-cid="<?php $this->cid(); ?>"><?php $this->likesNum(); ?></span>
3. 自定义排序
文章列表默认按照创建时间
降序排序,但你可以通过修改插件的设置,实现按创建时间
、浏览量
、点赞量
、权重
(点赞量 * 100 + 浏览量
)等更多形式的排序。例如,本文中提到的 导航网站 就是按照权重
排序的。
4. 榜单查询
你也可以手动根据创建时间
、浏览量
、点赞量
、权重
排序,查询前N
条数据,主要用于侧边栏的最新文章
、热门文章
等功能,调用示例如下:
<?php $rank = \TypechoPlugin\LZStat\Plugin::getRank(); ?>
<h3><?= $rank["title"]; ?></h3>
<?php if (empty($rank["posts"])) : ?>
<div>暂无数据</div>
<?php else : ?>
<div>
<?php $posts = $rank["posts"];
while ($posts->next()) : ?>
<a href="<?php $posts->permalink() ?>"><?php $posts->title() ?></a>
<?php endwhile; ?>
</div>
<?php endif; ?>
排序方式(created
,viewsNum
,likesNum
,weight
)可以通过插件设置,也可以通过参数传递,查询条数通过博客控制台的 设置->阅读->文章列表数目 指定。考虑到每个人想要的显示效果不同,该功能只提供了数据查询接口,界面渲染需要自己写代码实现。
统计接口
如果上述方式都不能满足你的需求,你也可以直接通过调用下面的接口实现统计功能,然后自行实现界面渲染。
接口名称 | 请求类型 | 接口地址 | 返回值示例 |
---|---|---|---|
浏览量统计 | GET | /action/stat?do=views&cid=${cid} | {"total":0} |
点赞量统计 | GET | /action/stat?do=likes&cid=${cid} | {"total":0} |
适配主题
本插件目前已在以下主题中测试通过:
你可以转到主题源码,查看具体用法,后续还会尝试让其适配更多类型的主题,以实现更通用、易用的目的!
不足之处
由于本插件是基于Cookie
实现的,因此,如果用户在浏览器中禁用了Cookie
,则无法实现浏览量、点赞量不重复计算,取消点赞等功能;另外,更换浏览器或者手动删除Cookie
,也都会导致数据统计不准确。
插件的复杂性和数据准确性,鱼和熊掌二者不可兼得,权衡利弊之后,我认为浏览量和点赞量的准确性相对而言不那么重要,因而依然选择了基于Cookie
的实现方式,因此,在你使用本插件之前,也必须认可这一点才行。
总结
浏览量和点赞量统计几乎是所有类型的网站都需要的功能,网上也有很多的版本,但始终没有合我心意的。因此,我自己实现了这个插件,希望在满足自己需求的基础上,通过后续适配更多不同类型的主题,也能满足更多人的需求!
评论10
HYN
补充,404时地址为……/index.php/action/plugins-edit?activate=LZStat-1.2.3&_=7db3c96e8ed6e9f53b39f3fcd1ad2814
老朱
B站回复你了,信息太少,具体的我也不太清楚,你根据我提供的思路排查看看
HYN
您好,我使用WaterDrop这个模板之后启用这个插件会显示404,别的插件有的时候也这样,没办法启用
我是小白,第一次接触WEB制作,希望大佬讲的细一点,谢谢
小白
不错,很详细,思路清晰。 👍
老朱
有朋友反馈启用插件时报”Call to undefined method mysqli_result::rowCount()“错误,这是因为我只实现了pdo_mysql这一个版本,没有兼容mysqli,也没有支持其它数据库,这位朋友最后也是通过换成pdo_mysql解决的。兼容各种数据库版本从我内心来讲是拒绝的,因为我觉得其他的都不常用,mysqli也有点过时了,大家有用到其它数据库链接方式吗?如果多的话,我就还是支持一下😁
老孙
我试了下sqlite数据库无法使用Database Query Error
老朱
我只支持了MySql数据库