欢迎访问艾立兹站 Aliz- 专注建站教程与技术分享
您当前的位置:首页 > 建站教程 > 帝国 CMS 教程

帝国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、菜单标识都存储在顶层父框架,子框架无法直接读取,必须通过 JS跨框架读取URL传参 实现。

二、获取后台顶部菜单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条评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
公众号二维码

扫码关注公众号
获取全套技术教程