后台自定义动作分发
Filter_Plugin_Admin_Other_Action 挂载在后台入口 admin/index.php 处理 $zbp->action 的 switch 语句的 default 分支中:当请求的后台动作不属于系统内置动作(ArticleMng、PageMng、CategoryMng、CommentMng、MemberMng、UploadMng、TagMng、PluginMng、ThemeMng、ModuleMng、SettingMng、admin)时触发,插件可以借此实现自己的后台动作页面。
接口信息
| 接口 | 参数 | 说明 |
|---|---|---|
Filter_Plugin_Admin_Other_Action | 无 | 后台管理页拦截后台管理请求实现自己的 Action |
完整案例
下例实现一个 act=demoAPP_Panel 的自定义后台页面:注册动作权限、在回调中认领动作并把管理函数指向插件自己的渲染函数:
php
<?php
RegisterPlugin("demoAPP", "ActivePlugin_demoAPP");
function ActivePlugin_demoAPP()
{
// 注册自定义动作的权限门槛,等级数字越小权限越高,1 表示管理员可用
global $zbp;
$zbp->actions['demoAPP_Panel'] = 1;
Add_Filter_Plugin('Filter_Plugin_Admin_Other_Action', 'demoAPP_Admin_Other_Action');
}
function demoAPP_Admin_Other_Action($action, &$admin_function)
{
global $zbp;
// 只认领自己的动作,其余动作交回其他回调或系统处理
if ($action != 'demoAPP_Panel') {
return;
}
$admin_function = 'demoAPP_Panel';
// 返回 break 中断后续回调,防止其他插件覆盖本动作
return PLUGIN_EXITSIGNAL_BREAK;
}
function demoAPP_Panel()
{
// 自定义后台页面内容,输出在后台主区域 divMain 中
echo '<h2>演示面板</h2>';
echo '<p>这是由 demoAPP 插件提供的自定义后台页面。</p>';
}注意事项
- 触发位置在
zb_system/admin/index.php的switch ($zbp->action)的default分支,只有未被系统内置动作命中的act才会走到这里; - 回调收到两个参数:当前动作名
$zbp->action与尚未赋值的$admin_function;第二个参数按引用声明(&$admin_function),插件把它设为自己的函数名后,页面主区域会执行$admin_function()渲染内容; - 回调返回值会直接作为执行信号,返回
PLUGIN_EXITSIGNAL_BREAK或PLUGIN_EXITSIGNAL_RETURN(即字符串break、return)可中断后续插件回调; - 后台入口在进入分发前会先执行
$zbp->CheckRights($zbp->action),未注册的动作默认无权限会被拒绝,因此插件必须在ActivePlugin_demoAPP()中先通过$zbp->actions注册动作与等级门槛,回调内也可再做更细的权限校验; - 自定义管理函数应在插件主文件中定义(后台加载时插件代码已被引入),函数输出位于
admin_header.php、admin_top.php与admin_footer.php之间,可直接使用后台的样式与全局$zbp。