帝国CMS后台完整获取当前页面ID、菜单标识、页面类型方法(原创实测)
时间:2026-07-17 22:58:33 来源:aliz.cn 作者:SKY 阅读:
很多开发者在二开帝国CMS后台、自定义后台UI、制作后台权限判断、页面专属样式、功能差异化开发时,都会遇到一个核心问题:如何准确获取后台当前所在页面ID、顶部菜单标识、页面文件标识。
帝国CMS前台自带成熟的栏目ID、内容ID变量,但后台并未公开官方调用教程,网上大多教程零散、不全、适配性差。本文结合框架原理、iframe架构、JS+PHP双方案,整理出全网最全、可直接商用的帝国CMS后台当前页面标识获取方法,适配官方原版后台、自定义UI后台、多iframe框架后台。
适用场景:后台自定义样式适配、菜单高亮判断、页面权限差异化、功能模块独立开发、后台二开功能判断、页面数据精准调用。
一、帝国CMS后台架构认知(必看)
帝国CMS后台采用三层iframe嵌套框架,和普通单页网站完全不同,这也是很多开发者获取页面ID失败的核心原因:- 顶层框架:index.php(顶部导航菜单、二级快捷导航、全局控制)
- 左侧菜单框架:left.php 系列(对应各模块左侧菜单栏)
- 主内容框架:main.php 系列(实际功能页面、列表、新增、编辑、统计)
二、获取后台顶部菜单ID(核心模块标识)
后台顶部十大核心菜单(系统、信息、栏目、模板、用户、插件等)都有专属固定ID,切换菜单时系统会自动写入全局变量,可全局读取,用于模块级判断、菜单高亮、模块差异化功能。1、顶部菜单ID对照表(官方固定)
| 菜单ID | 对应后台模块 |
|---|---|
| dosysmenu | 系统设置模块 |
| doinfomenu | 信息管理模块 |
| doclassmenu | 栏目管理模块 |
| dotempmenu | 模板管理模块 |
| dousermenu | 用户/会员模块 |
| dotoolmenu | 插件/工具模块 |
| doshopmenu | 商城模块 |
| doextmenu | 扩展模块 |
| doothermenu | 其他管理模块 |
| dofastmenu | 常用快捷模块 |
2、通用JS获取当前菜单ID(全页面适配)
该方法适配所有子iframe页面(左侧菜单、主内容区、所有功能页),自动向上追溯顶层框架,兼容性100%。// 获取帝国CMS后台当前顶部激活菜单ID function getEcmsAdminMenuId(){ let topWin = window; // 追溯到最顶层父框架 while(topWin.parent !== topWin){ topWin = topWin.parent; } // 读取全局存储的当前菜单ID return topWin.document.menuform.onclickmenu.value || ''; } // 调用输出 let nowMenuId = getEcmsAdminMenuId(); console.log('当前后台模块ID:', nowMenuId);
3、精准获取高亮激活菜单ID(防空容错)
解决切换页面后变量残留问题,通过DOM样式精准判断当前激活菜单,准确率更高:function getActiveMenuId(){ const menuIds = ['dosysmenu','doinfomenu','doclassmenu','dotempmenu','dousermenu','dotoolmenu','doshopmenu','doextmenu','doothermenu','dofastmenu']; let topWin = window; while(topWin.parent !== topWin){ topWin = topWin.parent; } // 遍历匹配高亮菜单 for(let id of menuIds){ let el = topWin.document.getElementById(id); if(el && el.style.backgroundColor !== ''){ return id; } } return ''; }
三、获取后台当前页面文件ID(PHP原生方案)
如果需要在PHP层面判断当前后台页面(用于权限判断、功能拦截、数据差异化调用),可直接获取当前运行文件名,精准区分新增、编辑、列表、统计等页面。1、获取当前后台页面文件名
<?php // 获取当前后台页面文件名(如 main.php、ListAllInfo.php、AddInfoChClass.php) $adminPageName = basename(__FILE__); echo '当前页面文件ID:'.$adminPageName; ?>
2、常用后台页面标识对照表
- main.php:后台首页
- ListAllInfo.php:信息列表管理页
- AddInfoChClass.php:信息新增页
- ListClass.php:栏目管理页
- ListMember.php:会员管理页
- ReHtml/ChangeData.php:数据更新页
3、PHP判断当前页面并执行差异化代码
<?php $pageId = basename(__FILE__); if($pageId == 'main.php'){ // 后台首页专属代码 echo '当前为后台首页'; }elseif($pageId == 'ListAllInfo.php'){ // 信息列表页专属代码 echo '当前为信息管理列表页'; } ?>
四、左侧菜单页面ID传递与获取方案
左侧菜单left.php为独立iframe,默认无法读取顶层菜单ID,推荐URL传参永久解决(最稳定、无兼容问题)。1、顶层菜单跳转携带ID参数
修改顶部菜单跳转链接,跳转左侧菜单时携带当前模块ID:// 示例:系统菜单跳转传参 JumpToLeftMenu('adminstyle/1/left.php?ecms=system&menuid=dosysmenu<?=$ecms_hashur['ehref']?>');
2、left.php 接收页面ID
<?php // 获取顶层传递的菜单ID $currMenuId = $_GET['menuid'] ?? ''; echo '当前左侧菜单所属模块:'.$currMenuId; ?>
五、永久存储当前页面ID(全局通用)
如需在所有页面、任意时机调用当前页面ID,可通过 localStorage 永久缓存,切换菜单自动更新:1、菜单切换时自动缓存ID
// 写入全局缓存(放入顶层菜单切换函数内) function DoOnclickMenu(m){ // 原有代码不变... // 缓存当前菜单ID localStorage.setItem('ecms_admin_current_menu', m); }
2、任意页面读取缓存ID
// 全局读取当前后台模块ID function getCacheMenuId(){ return localStorage.getItem('ecms_admin_current_menu') || ''; }
六、实战应用示例(二开必备)
示例1:后台模块菜单高亮自定义样式
let mid = getEcmsAdminMenuId(); if(mid === 'doinfomenu'){ document.body.style.background = '#f0f7ff'; alert('当前处于信息管理模块'); }
示例2:仅在后台首页加载专属统计代码
<?php if(basename(__FILE__) == 'main.php'){ // 加载首页专属统计、看板代码 echo '<script src="stat.js"></script>'; } ?>
七、常见问题答疑
1、为什么子页面直接读取不到菜单ID?
帝国后台为iframe嵌套架构,子页面作用域独立,必须向上追溯顶层window对象,无法直接读取父框架变量。2、PHP能否直接读取JS菜单ID?
不能。JS变量属于前端客户端,PHP为后端服务端,无法直接互通,必须通过URL传参、cookie、localStorage中转。3、哪种方法最稳定适合商用?
页面判断优先用 PHP文件名判断,模块判断优先用 跨框架JS读取菜单ID,无bug、兼容所有版本帝国CMS。总结
本文全覆盖帝国CMS后台页面标识获取方案:顶层模块菜单ID、页面文件ID、跨iframe读取、全局缓存、差异化开发实战,解决了后台二开中页面判断、样式适配、权限区分、功能定制的核心痛点。所有代码实测可用、无冗余、无兼容问题,可直接部署到正式项目。本文配套模板、静态源码可前往艾立兹素材库alisucai.com下载
发表评论
共有0条评论