在zblog下,我们一般挂载接口都是用 Add_Filter_Plugin 函数,如果有很多个插件挂了同样的接口,当系统在调用时,会以此按照挂载的顺序来调用插件。
有些时候,我们的插件需要调用最原始的数据,如果我们挂载的接口不是最先被调用,这样可能就无法得到最原始的数据,最终可能会导致插件达不到想要的效果。
有两种方法可以提高挂载的接口优先级:
方法一:
挂载接口时,不要将函数写在 ActivePlugin_xxx 函数里,直接写在函数外。zblog加载插件的原理是,系统在初始化时,先引入所有插件的include.php文件,再依次调用每个插件的 ActivePlugin_xxx 函数来挂载接口。这样写在此函数外,include文件被引用时就会被率先挂载
define('NICE_THUMB_SIZE_WIDTH',270); define('NICE_THUMB_SIZE_HEIGHT',180); define('NICE_THUMB_PAHT',ZBP_PATH .'zb_users/NiceThumb/'); RegisterPlugin("Nice","ActivePlugin_Nice") ; Add_Filter_Plugin('Filter_Plugin_Admin_TopMenu','kfuuNiceFilter::Admin_TopMenu'); function ActivePlugin_Nice( ){ Add_Filter_Plugin('Filter_Plugin_Admin_TopMenu','kfuuNiceFilter::Admin_TopNenu'); Add_Filter_Plugin('Filter_Plugin_Zbp_Load','kfuuNiceFilter::Zbp_Load'); Add_Filter_Plugin('Filter_Plugin_Zbp_CheckRights','kfuuNiceFilter::Zbp_CheckRights'); Add_Filter_Plugin('Filter_Plugin_Cmd_Begin','kfuuNiceFilter::Cmd_Begin'); Add_Filter_Plugin('Filter_Plugin_Cmd_Ajax','kfuuNiceFilter::Cmd_Ajax'); Add_Filter_Plugin('Filter_Plugin_Html_Js_Add','kfuuNiceFilter::Html_Js_Add'); Add_Filter_Plugin('Filter_Plugin_Category_Edit_Response','kfuuNiceresponse::Category_Edit_Response'); Add_Filter_Plugin('Filter_Plugin_Tag_Edit_Response','kfuuNiceresponse::Tag_Edit_Response');
方法二:
某些特殊的情况下,我们的接口并不需要zblog在初始化时添加挂载,而是需要的时候才添加,这样如果接口需要被最先调用,可以用下面的函数来添加。
Add_Filter_Plugin_First('Filter_Plugin_xxx_xxx','xxx'); function Add_Filter_Plugin_First($plugname, $functionname, $exitsignal = PLUGIN_EXITSIGNAL_NONE){ $GLOBALS['hooks'][$plugname] = array_reverse(UsingPluginFilter($plugname), true); Add_Filter_Plugin($plugname, $functionname, $exitsignal); $GLOBALS['hooks'][$plugname] = array_reverse($GLOBALS['hooks'][$plugname], true); return true; }
原理就是将接口钩子数组反转后挂载接口,然后再反转数组,这样我们的接口就被添加在第一位了,也就会最先调用
本文链接:http://78moban.cn/post/14595.html
版权声明:站内所有文章皆来自网络转载,只供模板演示使用,并无任何其它意义!