海洋 CMS 网站公告弹窗如何添加设置

juming
juming 初级会员超兽战士
发布于 2026-10-08 14:53 ·1 浏览 ·0 回复

海洋 CMS 加网站公告弹窗,最可靠的做法是不依赖后台插件、直接在模板的公共底部文件里贴一段 HTML+CSS+JS,用 localStorage 控制"只弹一次";后台如果有公告管理菜单,那就只在后台改文字,代码一次写好不用再动。

海洋 CMS 的公告弹窗有哪两种加法?

结论:分"后台公告"和"模板手写弹窗"两条路,前者管内容、后者管展示,能结合就结合。

第一种是看后台有没有公告功能。登录后台后,在左侧菜单里找带"公告"字样的项(不同版本菜单名可能是"网站公告""公告管理""系统公告",位置通常在"系统"或"内容"分组下)。海洋 CMS 各版本后台菜单结构有差异,v9.x 和 v10.x 就不完全一样,找不到这一项说明你的版本没内置公告模块,直接走第二种。

第二种是改模板。公告弹窗本质就是一段前端代码,跟 CMS 关系不大:弹窗是"谁弹"不重要,页面加载时执行一次 JS 就够了。

弹窗代码具体加在哪个文件?

结论:加在模板目录下被所有页面引用的公共底部文件里,一般是 /templets/你的模板名/foot.html,这样首页、列表页、内容页全站生效。

操作步骤:把模板目录下载到本地或直接用后台的"模板管理",打开 foot.html,在 </body> 标签前面粘贴下面这段,保存后到后台清一次缓存:

<!-- 海洋CMS 公告弹窗 开始 -->
<div id="seaNotice" style="display:none;position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);width:420px;max-width:90%;background:#fff;border-radius:8px;box-shadow:0 6px 30px rgba(0,0,0,.25);z-index:99999;padding:20px;">
  <h3 style="margin:0 0 10px;font-size:18px;color:#222;">网站公告</h3>
  <div style="line-height:1.8;color:#444;font-size:14px;max-height:50vh;overflow:auto;">
    这里写公告内容,支持换行和链接。
  </div>
  <a href="javascript:;" onclick="seaNoticeClose()" style="display:block;margin-top:14px;text-align:center;background:#ff5c00;color:#fff;padding:9px 0;border-radius:4px;text-decoration:none;">我知道了</a>
</div>
<script>
(function(){
  if(localStorage.getItem('sea_notice_v1')==='1'){return;}
  var box=document.getElementById('seaNotice');
  if(box){box.style.display='block';}
})();
function seaNoticeClose(){
  document.getElementById('seaNotice').style.display='none';
  localStorage.setItem('sea_notice_v1','1');
}
</script>
<!-- 海洋CMS 公告弹窗 结束 -->

注意三个参数:z-index:99999 要高于你模板里播放器、导航栏的层级,否则会被盖住;max-width:90% 是给手机端留边距,不加手机上会横向溢出;max-height:50vh; overflow:auto 是防止公告文字过长把弹窗顶出屏幕。

怎么让弹窗只弹一次、换内容后重新弹?

结论:靠 localStorage 的键名版本号控制——关闭时写入 sea_notice_v1,把代码里的 v1 改成 v2,全站所有访客会重新看到一次新公告。

逻辑是:页面加载先读 localStorage,值等于 1 就直接 return,弹窗保持隐藏(HTML 里默认 display:none,避免"闪现一下再消失")。访客点"我知道了",写入标记并隐藏。

如果想改成"每天弹一次"而不是"只弹一次",把存的值换成日期字符串,加载时比对当天日期即可:

var today=new Date().toDateString();
if(localStorage.getItem('sea_notice')===today){return;}
// 关闭时:
localStorage.setItem('sea_notice',new Date().toDateString());

这样同一个人每天最多看到一次,适合做每日签到、更新提醒类公告。

弹窗挡住内容、移动端错位怎么排查?

结论:90% 的错位来自定位方式和宽度写法,用 position:fixed 配 transform:translate(-50%,-50%) 是兼容性最好的居中方案,不要用 margin-left 负值硬调。

常见三个问题:一是弹窗被模板自带的 overflow:hidden 容器裁掉,解决办法是把弹窗代码放到 foot.html 的最外层,别塞进任何带定位的 div 里;二是点击后还能滚动背景,可以给 body 加 overflow:hidden、关闭时再移除;三是老版本浏览器不认 localStorage,可以加一句 try{}catch(e){} 兜底,最差情况下每次刷新都弹一次,不影响功能。

如果后台确实有公告管理功能,正确姿势是"后台填内容 + 模板取内容渲染到弹窗",这样运营改公告不用碰代码。标签调用语法各版本有出入,以你所用版本自带的模板文件里的写法为准,别直接照搬网上的代码,容易出现标签不解析、原样输出到页面上的情况。

总结一句:全站生效放在 foot.html,z-index 给足、宽度留 90%,localStorage 键名带版本号控制弹出频率,改内容只需换版本号或改后台。

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

全部回复 0

还没有回复,来抢沙发~