海洋CMS如何设置播放记录/观看历史?

chinaz
chinaz 正式会员超兽战士
发布于 2026-10-07 11:42 ·1 浏览 ·0 回复

海洋CMS的播放记录(观看历史)不是后台一个开关就能打开的功能,它由模板里的前端 JavaScript 配合浏览器 localStorage 实现;要开启或修改它,改的是 /template/你的模板名/ 下的模板文件,改完在后台清一次缓存即可生效。

播放记录是后台功能还是模板功能?

结论:海洋CMS(SeaCMS,一套 PHP+MySQL 的影视建站系统)没有独立的「观看历史」后台开关,播放记录属于模板前端功能。

后台的系统设置管的是站点名、伪静态规则、播放器、采集接口这些服务端配置;而观看历史是每个访客自己的数据,存在访客浏览器里,服务器只负责把模板输出出去。所以你换模板、改模板,播放记录的表现就跟着变——这也是为什么同一套海洋CMS程序,不同站的播放记录样子完全不同。

播放记录存在哪里?

结论:海洋CMS主流模板用 localStorage 存,键名一般是 history、seacms_history、player_history 这类。

localStorage 是浏览器提供的本地存储,容量 5MB,除非用户手动清缓存或换浏览器,否则一直保留。部分老模板用 Cookie,单个 Cookie 只能存 4KB,记录条数一多就会被截断。

判断方法:打开播放页按 F12 → Application → Local Storage → 展开你的域名,看有没有对应的 key。有就是 localStorage,没有再看 Cookies。

怎么开启/添加播放记录?

结论:分三步——播放页写记录、目标页面读记录、渲染成列表。

第一步,在播放页模板(文件名一般是 player.html 或 play.html,以你模板实际文件为准)的播放器初始化之后加记录函数:

function saveHistory(item){
  var key='seacms_history';
  var list=JSON.parse(localStorage.getItem(key)||'[]');
  list=list.filter(function(v){return v.id!==item.id;});
  list.unshift(item);
  localStorage.setItem(key,JSON.stringify(list.slice(0,50)));
}

第二步,在播放器的 timeupdate 事件里把当前进度写进去:

player.on('timeupdate',function(){
  saveHistory({
    id:'{$vod_id}', name:'{$vod_name}', url:location.href,
    pic:'{$vod_pic}', sec:Math.floor(player.currentTime), time:Date.now()
  });
});

{$vod_id}、{$vod_name} 是海洋CMS的模板标签,直接写在模板文件里会被解析成当前影片数据。不同模板的标签前缀可能不一样,以你模板里已有的写法为准。

第三步,在首页、会员中心或播放页侧栏加读取渲染代码,把 localStorage.getItem('seacms_history') 拿到后遍历拼 HTML 输出。

观看历史不显示、不同步怎么办?

结论:先查有没有写进去,再查渲染时机和跨端问题。

  • F12 里没有 key:写入代码没执行。检查模板标签是否被解析成了空字符串、JS 有没有报错。
  • 有 key 但列表不显示:渲染脚本放在了容器 DOM 之前,把 <script> 挪到容器之后,或包一层 DOMContentLoaded。
  • 换手机、换电脑看不到历史:这是正常的。localStorage 不跟随账号,要做跨设备同步必须自己建表写后端接口,属于二次开发。
  • 用户清完浏览器缓存历史全没了:localStorage 被清空,想长期保存只能存服务端。

建议保留多少条、要不要存播放进度

结论:留 20–50 条,并且把播放到第几秒一起存下来。

上面代码里的 slice(0,50) 就是条数上限,50 条记录转成 JSON 的体积在 20–50KB 之间,离 5MB 上限还很远,不用担心撑爆。多存一个 sec 字段的好处是用户点历史记录时可以直接跳回上次位置,比只存影片链接实用得多。

另外提醒一句:海洋CMS升级程序或更换模板时,用户浏览器里的旧数据不会自动迁移,key 的名字尽量不要改,否则老用户的历史会「凭空消失」。

总的来说,海洋CMS的播放记录是纯前端活儿,核心就两件事:播放页把影片信息和进度写进 localStorage,任意页面读出来渲染;跨设备同步需要你自己写服务端接口。改完模板记得在后台清一次缓存再验证。

版权声明:本文来自 GJ站长论坛《海洋CMS如何设置播放记录/观看历史?》
原文链接:https://www.gj0.com/thread-261.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~