AI摘要
Typecho博客系统的访客统计插件VistorLoggerPro发布,提供访问国家/地区统计、IP分布统计等详细访问统计功能,并进行隐私保护处理。
前言
第一次使用原版插件时统计图是没加载出来的,然后看着整体有些复古感觉是一个古老插件(后面找到了原插件仓库,作者还在更新,尴尬了)。于是就自己着手进行优化,后来突然想到如果做成一个模板页面放前台是怎样的,也就有了现在本站左侧访客那个页面,以及右侧博客信息中的浏览总数,数据也是出自这里,不过我还没来得及发教程。
新版插件除了保留了原插件的一些功能,还对外观,性能做了巨大优化。并且在插件中做了一个适配器adapter.php,它可以实现原版插件与当前插件的无缝衔接,这个是我开发时遇到bug弄得,后面感觉可以不用删。
介绍
这是一个为 Typecho 博客系统开发的访客统计插件,基于原版的VistorLogger修改版本。该插件提供了详细的访问统计功能,包括访问国家/地区统计、IP分布等信息,并进行了隐私保护处理。
功能特点
功能分类 | 功能描述 |
---|---|
数据统计功能 | • 访问国家/地区统计(Top 30) • IP分布统计(已匿名化处理) • 省份访问统计图表(TOP 30) • 路由访问统计分析(页面访问量统计) • 访问时间统计(按日期分布) • 管理员访问自动排除 |
数据筛选功能 | • 日期范围选择器 • 快捷时间选择(今天、最近7天、最近30天、全部) • 按钮选中状态高亮显示 • 默认只加载近7天数据,优化首次加载速度 |
数据展示功能 | • ECharts环形图表展示方式 • 列表视图支持(详细数据展示) • 图表悬停效果(显示详细信息) • 自适应图表区域 |
数据管理功能 | • 删除特定IP记录功能(支持模糊匹配) • 数据库自动优化 • 时区自动转换功能,确保访客时间记录准确 |
兼容性功能 | • 适配器支持(adapter.php),实现原版VisitorLogger插件与当前插件的无缝衔接 • 自动数据迁移,保留原有统计数据 • 兼容新版Typecho(带命名空间版本) • 兼容不同主题,特别优化handsome主题 |
性能优化 | • 异步API数据加载(getVisitStatistic.php) • 解决大数据量加载问题,提高页面响应速度(从10s优化到2s) • 使用CDN加载ECharts图表库,减少插件体积 • 优化移动端显示 |
隐私保护 | • IP地址匿名化处理(只显示前两段) • 明确的隐私声明 • 符合相关法律法规要求 • 数据安全存储 |
界面特性 | • 移动端自适应布局 • 美观的图表展示 • 增高环形图展示区域,改善视觉效果 • 列表/图表切换视图 • 优雅的加载动画 |
页面预览
Handsome前台效果可参考本站左侧访客导航页面
安装及更新方法
- 下载插件文件(文末)
- 在本地解压后把目录名改为VisitorLoggerPro
- 将改后的文件上传到/usr/plugins目录下
- 在 Typecho 后台启用插件
- 要把该文件
visitor-stats.php
移动到handsome主题根目录(handsome主题适用) - 直接用新版本覆盖掉旧版本即可完成更新
系统要求
项目 | 要求 |
---|---|
PHP版本 | 推荐 7.4或 8.0 |
Typecho版本 | 推荐 1.2.1 |
数据库 | MySQL 5.5及以上或等效数据库 |
使用说明
基本使用(Handsome主题适用)
- 在 Typecho 后台创建新页面
- 在页面模板中选择"访客统计"
- 发布页面即可看到统计效果
- 创建新页面,选择"访客统计"模板
隐私保护
本插件已实现以下隐私保护措施:
- IP地址匿名化处理(只显示前两段)
- 明确的隐私声明
- 符合相关法律法规要求
技术实现
- 前端:ECharts 图表库
- 后端:PHP + MySQL
- 数据存储:Typecho 数据库
- 数据处理:通过API异步加载,提高性能
更新日志
版本 | 类型 | 更新内容 |
---|---|---|
v2.1.3 (2025-08-13) | 优化 | • 智能资源加载机制:实现ECharts和Flatpickr的CDN优先加载,失败时自动回退到本地文件 • 提升加载稳定性:解决网络环境不稳定时图表库加载失败的问题 • 优化用户体验:无需手动选择加载方式,系统自动选择最佳加载策略 • 增强容错能力:多重加载保障,确保图表功能正常运行 |
技术改进 | • 重构资源加载逻辑,采用Promise-based异步加载 • 添加详细的加载状态日志,便于问题排查 • 优化错误处理机制,提供友好的用户提示 | |
v2.1.1 (2025-06-21) | 优化 | • 移除本地chart.js文件(约200KB),减少插件体积 • 全部使用CDN加载ECharts图表库 |
修复 | • 删除panel.php中对本地chart.js的引用 | |
v2.1.0 (2025-06-18) | 前台优化 | • 新增API端点(getVisitStatistic.php)处理数据聚合 • 解决前台大数据量加载问题,提高页面响应速度(10到2s) • 添加日期范围选择器和快捷按钮(今天、最近7天、最近30天、全部) • 实现按钮选中状态高亮显示 • 优化首次加载速度,默认只加载近7天数据 • 增高环形图展示区域,改善视觉效果 • 修复图表悬停效果 |
后台优化 | • 添加删除特定IP记录功能(支持模糊匹配) • 重构图表加载逻辑,使用异步API获取数据 • 添加省份访问统计图表 • 优化后台路由统计,解决X轴信息重叠问题 • 优化日期选择功能 | |
修复 | • 修复内容解码错误(ERR_CONTENT_DECODING_FAILED) • 修复SQL错误(Unknown column 'province') | |
v2.0.2 (2025-06-13) | 功能增强 | • 新增后台忽略IP名单功能,支持多种IP格式 • 前台删除管理员(自己)访问记录功能,保持统计数据纯净 • 优化CDN环境下IP识别机制,解决IP不准确问题 • 添加IP地址过滤器,支持自定义过滤规则 |
修复 | • 修复PHP 8.0环境下的弃用函数警告 • 修复在某些主题下的样式冲突问题 • 修复日期选择器在移动端的显示问题 • 优化数据库查询,减少资源占用 | |
v2.0.1 (2025-05-15) | 功能改进 | • 修复时区问题:将数据库time字段从TIMESTAMP改为DATETIME类型 • 添加服务器时区自动转换功能,确保访客时间记录准确 • 优化数据迁移处理,自动转换已有记录的时区 • 添加适配器(adapter.php),实现原版插件与当前插件的无缝衔接 |
修复 | • 修复时区显示不正确的问题 • 修复数据库查询兼容性问题 | |
v2.0.0 (2025-04-23) | 主要功能 | • 初始版本发布 • 实现基本访客统计功能 • 国家/地区访问统计 • IP分布统计(已匿名化处理) • ECharts环形图表展示方式 • 列表视图支持 • 移动端适配 |
隐私保护 | • IP地址匿名化处理(只显示前两段) • 明确的隐私声明 • 符合相关法律法规要求 | |
其他 | • 优化移动端显示 • 管理员访问自动排除 |
问题说明
插件启用失败解决办法:
有一部分小伙伴之前使用过VisitorLogger插件,然后如果直接启用VisitorLoggerPro的话会报错
1、只需要把VisitorLogger相关文件全部删除即可,也就是两者不能共存。
2、数据库表不需要修改,但也可以把
bot_list
表删掉因为用不到。最后
希望大家顺手点点star
如果有使用问题或者开发建议,可在评论区提出
Github地址:
此处内容需要评论回复后(审核通过)方可阅读。
78 条评论
相见恨晚啊,真是一个宝藏博主,我现在也是一直用的这个原版插件,翻页查看及其操蛋(
这不得必须去试试看!୧(๑•̀⌄•́๑)૭
哈哈,试了之后可以反馈一下
才发现你在这里回复了,我还以为你博客会有回复邮件提醒插件,建议可以试一下装一个,我踩过坑了,找到了一个确定好使的,可以看看我的文章:https://www.nekopara.uk/archives/249.html
用了一天,提两点建议:
第一个是因为jsdelivr被墙的原因,不开梯子访问会导致js和css文件无法加载而报错,建议给一个选择,使用分发的css和js还是使用本地。不想写切换逻辑的话,也可以开两个仓库分支,应该是静态文件走分发,一个是直接走本地。不然下回来还要改一下代码是有点不方便。同时也建议换一个可靠一点的分发平台。
第二个是,插件查询ip的时候,会存在查询为空的BUG,如果访问记录变多,但是你查询的ip访问量较小,就会触发。不知道是不是普遍性BUG,我还没办法确定。如果是BUG的话,可以考虑修复一下。
插件做得不错,加油!
我用的就是CommentNotifier
js和css文件无法加载而报错,是后台的echarts图加载不出来吗
似乎整个界面都不太正常了,建议还是完善一下吧。我目前使用的是我自己静态资源本地化了的。
辛苦截个图我看一下
博主,为什么我这个访客页面创建完成后浏览的时候,必须要强刷新浏览器才可以有数据勒?我使用的是link页面的方式,不知道和你的方式是否一样?你的页面就没有这个问题
我看了一下,要加载一小会,不用强制刷新
你后台的pjax有没有设置函数,可以加个这个:
// 访客统计图表重载辅助函数 - 移到全局作用域 function reloadVisitorStats() { setTimeout(function() { if (typeof echarts !== 'undefined') { console.log("PJAX: 使用备用方法初始化图表"); // 重新初始化图表逻辑 if (document.getElementById('countryChart')) { try { const countryChart = echarts.init(document.getElementById('countryChart')); countryChart.showLoading({ text: '正在加载数据...', color: '#1c65d7', textColor: '#000', maskColor: 'rgba(255, 255, 255, 0.8)', fontSize: 14 }); } catch (err) { console.error("PJAX: 国家图表初始化失败", err); } } if (document.getElementById('provinceChart')) { try { const provinceChart = echarts.init(document.getElementById('provinceChart')); provinceChart.showLoading({ text: '正在加载数据...', color: '#1c65d7', textColor: '#000', maskColor: 'rgba(255, 255, 255, 0.8)', fontSize: 14 }); } catch (err) { console.error("PJAX: 省份图表初始化失败", err); } } // 触发一次查询按钮点击,以加载数据 const filterBtn = document.getElementById('filterBtn'); if (filterBtn) { filterBtn.click(); } else { // 如果没有查询按钮,尝试触发最近7天按钮 const last7DaysBtn = document.getElementById('last7DaysBtn'); if (last7DaysBtn) { last7DaysBtn.click(); } else { console.log("PJAX: 无法找到查询按钮,请手动刷新页面"); } } } else { console.log("PJAX: echarts库仍未加载,请手动刷新页面"); // 显示提示信息 const loadingStatus = document.getElementById('loadingStatus'); if (loadingStatus) { const errorMsg = document.createElement('p'); errorMsg.style.color = '#ff4d4f'; errorMsg.textContent = '图表加载失败,请刷新页面重试。'; loadingStatus.appendChild(errorMsg); } } }, 500); }加上后可以了!!!感谢大佬
支持博主
来了博主
不知道我的复古主题能不能使用,下载测试下。
应该能用
在 Typecho 后台创建新页面
在页面模板中选择"访客统计"
...在这个步骤卡住了,因为创建页面时,页面模板选择中没有“访客统计”这个模版选择(ó﹏ò。)
页面模板选择中的“访客统计“是handsome主题专属的,其他主题不需要设置这个( ,,´・ω・)ノ"(´っω・`。)
不错,来看看
启动插件时报错,麻烦大佬看一下
php 8.4.6
myspl 8.4.6
创建访客日志表或IP地址记录表失败: SQLSTATE[HY000]: General error: 1 near "UNSIGNED": syntax error
重新部署了一下,可以用了,可能是myspl版本太高的原因,换成5.7的就好了
那就好那就好
[强][强][强]
太不错了
回复
回复看看
学习学习
必须支持 ···博主
OωO
哈哈哈
学习下
滴!学生卡!打卡时间:09:12:38,请上车的乘客系好安全带~
OωO
大佬大佬,你的代码很强👍,但是我后台为什么看不见记录呢
有什么报错提示吗
很奇怪,没有看见报错
加我qq:676567473,发点截图看看
大佬,麻烦通过一下
滴!学生卡!打卡时间:04:33:19,请上车的乘客系好安全带~OωO
试试这款,期待呢
怎麽样٩(ˊᗜˋ*)و
先下载看看别的主题适配不适配
如何
滴!学生卡!打卡时间:21:17:42,请上车的乘客系好安全带~
滴!学生卡!打卡时间:15:36:57,请上车的乘客系好安全带~
太厉害了
我这两晚还没去你那里巡逻
滴!学生卡!打卡时间:20:44:50,请上车的乘客系好安全带~
图 好 涩 啊ヾ(≧∇≦*)ゝ
滴!学生卡!打卡时间:04:33:19,请上车的乘客系好安全带~
你的代码写的很好,不过很快就是我的了(滑稽)
哎我去,你的typecho和mysql都是哪个版本
不是 哥们,你要干神魔(/ω\)
实在不好意思,你刚才说“xuan”我实在没想到,不好意思给你删了
太酷啦bro
哈哈,可以帮忙点点star,后续还会优化
请问下不迁移visitor-stats.php会损失哪些功能呢,我目前在使用Single主题没法使用 handsome 的优化部分,试了下访客统计的功能是能正常使用的
可能没办法删除自己的浏览记录,因为 删除自己的记录 我在前台页面设置的。
但你可以在设置里的 忽略IP 中添加自己的访问ip,这样也不会统计自己的浏览记录。
后台有统计就行,visitor-stats.php这个是handsome主题的前台模板,不要也可以
明白了,感谢
看看
我这个访客数据量挺大的,需要加载挺长时间,后续还要优化
滴!学生卡!打卡时间:00:29:28,请上车的乘客系好安全带~
滴!学生卡!打卡时间:09:34:08,请上车的乘客系好安全带~
不错不错
666
有你在的日子才是我的日常。
牛皮轰轰
嘿嘿|´・ω・)ノ
滴!学生卡!打卡时间:00:01:39,请上车的乘客系好安全带~
滴!学生卡!打卡时间:21:25:32,请上车的乘客系好安全带~
滴!学生卡!打卡时间:21:40:46,请上车的乘客系好安全带~
可以的👍🏻
滴!学生卡!打卡时间:15:01:03,请上车的乘客系好安全带~
想请教下VisitorLoggerPro这个插件一直无法启动,又什么办法么
我更新了代码,你试试现在的版本
visitor-stats.php移动到handsome主题根目录了吗