现在短剧横行,动辄几十集上百集,会导致播放量失真,剧集类排行始终被短剧霸榜。为了解决这个问题制作了vodhits
插件:
只针对指定分类:例如“短剧”类别下,不论同一个访客看多少集,只在首次访问时给该视频 +1 次点击;
保留其他分类原有逻辑:非目标分类的视频仍然每次访问都累加点击;
支持详情页 & 播放页:确保无论用户是在详情页还是播放页,都只计一次。
功能概述
- 多分类支持:在插件配置里填入一个或多个分类 ID(英文逗号分隔),插件会自动只对这些分类生效。
- 开关控制:插件自带开关,随时可在后台启用或关闭功能。
- 零侵入核心:无需改动核心控制器,只需将插件放到
addons/vodhits
,后台安装并配置即可。
核心实现原理
- 钩子触发
采用view_filter
行为钩子,在视频控制器(Vod
)的show
和play
方法渲染后执行。 - Session 去重
通过 PHPsession
记录用户已访问过的vod_id
列表:- 首次访问:系统会先执行一次原生自增(
setInc('vod_hits')
),插件检测到该 ID 不在 Session 中,于是将其加入 Session; - 后续访问:再触发同样的自增后,插件马上执行
setDec('vod_hits')
(及日/周/月 点击),把多余的 +1 回滚,保证总量仅 +1。
- 首次访问:系统会先执行一次原生自增(
- 多分类判断
插件读取后台配置的分类 ID 数组,只对这些分类下的视频应用上述逻辑,其它分类不做任何干预。
安装与配置
- 目录结构
addons/
└─ vodhits/
├─ info.ini # 插件基础信息
├─ config.php # 后台配置项:status + typeids
└─ Vodhits.php # 插件核心逻辑
- 后台安装
- 上传
addons/vodhits
到项目根目录。 - 进入 苹果CMS 后台 → 应用 → 应用市场→ 安装 “访客唯一点击”。
- 上传
- 填写配置
- 插件开关:开启后生效;关闭则恢复系统原有点击逻辑。
- 分类ID:在“分类ID”输入框里填入要限制的类型,比如
3,5,8
。
使用效果与测试
- 首次访问:详情页或播放页访问后,数据库中的
vod_hits
由 0 变 1; - 重复刷新:同一个访客在同一浏览器里多次访问,同一
vod_id
的点击量始终保持 1; - 不同分类:未在配置里指定的分类,访问几次点击量都会正常累加;
- 不同访客:换设备或清除 Cookie 后再次访问,同一视频点击量可继续 +1。
源码下载:
另外,后台把采集参数中随机点击量范围设为 0,只是屏蔽了随机生成;如果采集的上游数据里带了点击量,就还会写进去;如果上游没带,就为 0。要彻底禁用“采集原始数据”自带的点击量,可以在代码里把赋值部分全部改成 0
。
打开application/common/model/Collect.php 搜索找到 if($config['hits_start']>0 && $config['hits_end']>0)
共5处,:
//if($config['hits_start']>0 && $config['hits_end']>0) {
// $v['vod_hits'] = rand($config['hits_start'], $config['hits_end']);
// $v['vod_hits_day'] = rand($config['hits_start'], $config['hits_end']);
// $v['vod_hits_week'] = rand($config['hits_start'], $config['hits_end']);
// $v['vod_hits_month'] = rand($config['hits_start'], $config['hits_end']);
//}
//强制将采集入库的 vod_hits(含日/周/月)全部设为0
$v['vod_hits'] = 0;
$v['vod_hits_day'] = 0;
$v['vod_hits_week'] = 0;
$v['vod_hits_month'] = 0;