說(shuō)明:接口模式復(fù)制自Z-Blog ASP版。
定義常量
PLUGIN_EXITSIGNAL_NONE '' 插件運(yùn)行中斷方式:無(wú)
PLUGIN_EXITSIGNAL_RETURN 'return' 插件中斷方式:return
PLUGIN_EXITSIGNAL_BREAK 'break' 插件中斷方式:break
定義公共變量
$GLOBALS['plugins'] = array(); 總插件激活函數(shù)數(shù)組列表
$GLOBALS['hooks'] = array(); 總插件接口列表 P.S. 1.5版啟用,逐漸過(guò)度到hooks
函數(shù)說(shuō)明
1.注冊(cè)插件函數(shù),由插件主動(dòng)調(diào)用。
參數(shù)1:插件ID
插件2:插件激活時(shí)執(zhí)行的函數(shù)名
返回:沒(méi)有
RegisterPlugin($strPluginName, $strPluginActiveFunction)
$GLOBALS['plugins'][$strPluginName] = $strPluginActiveFunction;
如上代碼,這個(gè)函數(shù)實(shí)際就是將相關(guān)值寫(xiě)入公共數(shù)組。
2.安裝插件函數(shù),這個(gè)函數(shù)只會(huì)在安裝插件時(shí)運(yùn)行一次。
參數(shù):插件ID
返回:沒(méi)有
InstallPlugin($strPluginName)
if(function_exists($f = 'InstallPlugin_' . $strPluginName)){
$f();
}
如果對(duì)應(yīng)的函數(shù)存在,執(zhí)行之。
3.插件刪除函數(shù),這個(gè)函數(shù)只會(huì)在刪除插件時(shí)運(yùn)行一次。
參數(shù):插件ID
返回:沒(méi)有
UninstallPlugin($strPluginName)
if(function_exists($f = 'UninstallPlugin_' . $strPluginName) == true){
$f();
}
為什么這里要用true?
3.創(chuàng)建插件接口函數(shù) DefinePluginFilter($strPluginFilter)
判斷如果 $GLOBALS['hooks'][$strPluginFilter] 的值是否定義。如果沒(méi)有,則定義對(duì)應(yīng)空數(shù)組,且將該變量地址引用給 $GLOBALS[$strPluginFilter] 對(duì)應(yīng)公共變量。此時(shí)即可直接使用對(duì)應(yīng)插件相關(guān)數(shù)據(jù)。
4.檢查插件接口函數(shù) ExistsPluginFilter($strPluginFilter)
這個(gè)函數(shù)判斷 $GLOBALS['hooks'][$strPluginFilter] 的值是否存在,返回 bool。
5.調(diào)用插件接口函數(shù) &UsingPluginFilter($strPluginFilter)
這個(gè)函數(shù)判斷 $GLOBALS['hooks'][$strPluginFilter] 的值是否存在,如果存在就返回對(duì)應(yīng)的插件名字的數(shù)組,否則返回空數(shù)組。
&符號(hào)用于函數(shù)的引用操作,例如:$result = &UsingPluginFilter(); 則 $result 變量即指向函數(shù)的return的地址。修改變量可修改return對(duì)應(yīng)結(jié)果。
6.移除插件接口 RemovePluginFilter($strPluginFilter)
函數(shù)判斷對(duì)應(yīng)的 $GLOBALS['hooks'][$strPluginFilter] 是否存在,如果存在,則
unset $GLOBALS['hooks'][$strPluginFilter] 和 $GLOBALS[$strPluginFilter],返回true。
以上是插件相關(guān)基本函數(shù),下面即是過(guò)濾接口相關(guān)函數(shù)。也是本頁(yè)大部分內(nèi)容。
1.掛上Filter接口 Add_Filter_Plugin($plugname, $functionname, $exitsignal = PLUGIN_EXITSIGNAL_NONE)
參數(shù)1:插件名(ID)
插件2:要掛載的函數(shù)
參數(shù)3:插件中斷方式,默認(rèn)空??梢允强?return,break。continue這個(gè)沒(méi)有?
返回:無(wú)
如果 isset($GLOBALS['hooks'][$plugname]) 插件名數(shù)組定義 且
isset($GLOBALS['hooks'][$plugname][$functionname]) 對(duì)應(yīng)下的函數(shù)名沒(méi)有定義
則 $GLOBALS['hooks'][$plugname][$functionname] = $exitsignal; 定義對(duì)應(yīng)函數(shù)名,以及其中斷方式。用法:
執(zhí)行插件即 $Filter_Plugin_Zbp_LoadManage[$functionname](); 中斷方式即 $Filter_Plugin_Zbp_LoadManage[$functionname] 的值,這是一個(gè)插件的函數(shù)執(zhí)行,官方系統(tǒng)使用 foreach 將多個(gè)函數(shù)通過(guò) $GLOBALS['hooks']['Filter_Plugin_Zbp_LoadManage'] 來(lái)執(zhí)行。
2.以下使用函數(shù)定義插件過(guò)濾接口,只是定義。接口的相關(guān)位置在其他文章詳細(xì)解答。 $GLOBALS['hooks'][$strPluginFilter] = array()
一個(gè)空的數(shù)組。
調(diào)試關(guān)閉處理程序,調(diào)試異常處理程序,調(diào)試錯(cuò)誤處理程序
DefinePluginFilter('Filter_Plugin_Debug_Handler');
ZBlogException異常調(diào)試類Display函數(shù)處
DefinePluginFilter('Filter_Plugin_Debug_Display');
監(jiān)控autoload魔術(shù)方法
DefinePluginFilter('Filter_Plugin_Autoload');
監(jiān)控記錄函數(shù)
DefinePluginFilter('Filter_Plugin_Logs');
DbSql類的SQL過(guò)濾和統(tǒng)計(jì)方法接口
DefinePluginFilter('Filter_Plugin_DbSql_Filter');
Zbp類的魔術(shù)方法接口
DefinePluginFilter('Filter_Plugin_Zbp_Call');
DefinePluginFilter('Filter_Plugin_Zbp_Get');
DefinePluginFilter('Filter_Plugin_Zbp_Set');
Zbp類的檢查權(quán)限接口(檢查當(dāng)前用戶)
DefinePluginFilter('Filter_Plugin_Zbp_CheckRights');
Zbp類的顯示錯(cuò)誤接口
DefinePluginFilter('Filter_Plugin_Zbp_ShowError');
Zbp類的顯示驗(yàn)證碼接口,具有唯一性
DefinePluginFilter('Filter_Plugin_Zbp_ShowValidCode');
Zbp類的比對(duì)驗(yàn)證碼接口,具有唯一性
DefinePluginFilter('Filter_Plugin_Zbp_CheckValidCode');
Zbp類的重新編譯模板接口
DefinePluginFilter('Filter_Plugin_Zbp_BuildTemplate');
Zbp類的生成模板標(biāo)簽接口
DefinePluginFilter('Filter_Plugin_Zbp_MakeTemplatetags');
Zbp類的生成模塊內(nèi)容的接口
DefinePluginFilter('Filter_Plugin_Zbp_BuildModule');
Zbp類的加載接口
DefinePluginFilter('Filter_Plugin_Zbp_Load');
Zbp類的加載(預(yù)處理)接口
DefinePluginFilter('Filter_Plugin_Zbp_Load_Pre');
Zbp類的后臺(tái)管理初始加載接口
DefinePluginFilter('Filter_Plugin_Zbp_LoadManage');
Zbp類的終結(jié)接口(終結(jié)接口?)
DefinePluginFilter('Filter_Plugin_Zbp_Terminate');
前臺(tái)view,index相關(guān)
定義index.php接口 起動(dòng)
DefinePluginFilter('Filter_Plugin_Index_Begin');
定義index.php接口 結(jié)束
DefinePluginFilter('Filter_Plugin_Index_End');
c_html_js_add.php腳本調(diào)用,JS頁(yè)接口需要強(qiáng)制開(kāi)啟
DefinePluginFilter('Filter_Plugin_Html_Js_Add');
搜索頁(yè)接口,可以接管搜索頁(yè)。
DefinePluginFilter('Filter_Plugin_Search_Begin');
搜索接口 結(jié)束
DefinePluginFilter('Filter_Plugin_Search_End');
Feed頁(yè)接口,可以接管Feed頁(yè)。
DefinePluginFilter('Filter_Plugin_Feed_Begin');
Feed頁(yè)接口 結(jié)束
DefinePluginFilter('Filter_Plugin_Feed_End');
CMD里的接口
cmd.php的啟動(dòng)接口,可以在這里攔截各種action
DefinePluginFilter('Filter_Plugin_Cmd_Begin');
cmd.php的Ajax命令專用接口,插件需要自行判斷權(quán)限
DefinePluginFilter('Filter_Plugin_Cmd_Ajax');
后臺(tái)里的接口
定義Login.php首頁(yè)header接口
DefinePluginFilter('Filter_Plugin_Login_Header');
定義其它頁(yè)的header接口
DefinePluginFilter('Filter_Plugin_Other_Header');
c_system_misc里的接口
c_system_misc.php的啟動(dòng)接口,可以在這里攔截各種type
DefinePluginFilter('Filter_Plugin_Misc_Begin');
后臺(tái)管理頁(yè)的啟動(dòng)接口,可以攔截后臺(tái)管理請(qǐng)求實(shí)現(xiàn)自己的管理
DefinePluginFilter('Filter_Plugin_Admin_Begin');
后臺(tái)管理頁(yè)的終結(jié)接口
DefinePluginFilter('Filter_Plugin_Admin_End');
定義后臺(tái)首頁(yè)header接口
DefinePluginFilter('Filter_Plugin_Admin_Header');
定義后臺(tái)首頁(yè)footer接口
DefinePluginFilter('Filter_Plugin_Admin_Footer');
定義后臺(tái)左側(cè)欄接口
DefinePluginFilter('Filter_Plugin_Admin_LeftMenu');
定義后臺(tái)頂部導(dǎo)航欄接口
DefinePluginFilter('Filter_Plugin_Admin_TopMenu');
后臺(tái)首頁(yè)SubMenu
DefinePluginFilter('Filter_Plugin_Admin_SiteInfo_SubMenu');
文章管理SubMenu
DefinePluginFilter('Filter_Plugin_Admin_ArticleMng_SubMenu');
頁(yè)面管理
DefinePluginFilter('Filter_Plugin_Admin_PageMng_SubMenu');
分類管理
DefinePluginFilter('Filter_Plugin_Admin_CategoryMng_SubMenu');
評(píng)論管理
DefinePluginFilter('Filter_Plugin_Admin_CommentMng_SubMenu');
用戶管理
DefinePluginFilter('Filter_Plugin_Admin_MemberMng_SubMenu');
?
DefinePluginFilter('Filter_Plugin_Admin_UploadMng_SubMenu');
標(biāo)簽管理
DefinePluginFilter('Filter_Plugin_Admin_TagMng_SubMenu');
插件管理
DefinePluginFilter('Filter_Plugin_Admin_PluginMng_SubMenu');
主題管理
DefinePluginFilter('Filter_Plugin_Admin_ThemeMng_SubMenu');
模塊管理
DefinePluginFilter('Filter_Plugin_Admin_ModuleMng_SubMenu');
設(shè)置管理
DefinePluginFilter('Filter_Plugin_Admin_SettingMng_SubMenu');
編輯頁(yè)菜單(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Edit_SubMenu');
標(biāo)簽編輯頁(yè)菜單(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Tag_Edit_SubMenu');
模塊編輯頁(yè)菜單(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Module_Edit_SubMenu');
用戶編輯頁(yè)菜單(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Member_Edit_SubMenu');
分類編輯頁(yè)菜單(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Category_Edit_SubMenu');
文章管理頁(yè)表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_ArticleMng_Table');
頁(yè)面管理頁(yè)表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_PageMng_Table');
分類管理頁(yè)表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_CategoryMng_Table');
評(píng)論管理頁(yè)表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_CommentMng_Table');
會(huì)員管理頁(yè)表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_MemberMng_Table');
附件管理頁(yè)表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_UploadMng_Table');
Tag管理頁(yè)表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_TagMng_Table');
文章頁(yè)面編輯頁(yè)開(kāi)始接口
DefinePluginFilter('Filter_Plugin_Edit_Begin');
文章頁(yè)面編輯頁(yè)結(jié)束接口
DefinePluginFilter('Filter_Plugin_Edit_End');
文章頁(yè)面編輯1號(hào)輸出接口
DefinePluginFilter('Filter_Plugin_Edit_Response');
文章頁(yè)面編輯2號(hào)輸出接口
DefinePluginFilter('Filter_Plugin_Edit_Response2');
文章頁(yè)面編輯4號(hào)輸出接口
DefinePluginFilter('Filter_Plugin_Edit_Response4');
文章頁(yè)面編輯5號(hào)輸出接口
DefinePluginFilter('Filter_Plugin_Edit_Response5');
文章頁(yè)面編輯3號(hào)輸出接口
DefinePluginFilter('Filter_Plugin_Edit_Response3');
分類編輯頁(yè)輸出接口
DefinePluginFilter('Filter_Plugin_Category_Edit_Response');
標(biāo)簽編輯頁(yè)輸出接口
DefinePluginFilter('Filter_Plugin_Tag_Edit_Response');
會(huì)員編輯頁(yè)輸出接口
DefinePluginFilter('Filter_Plugin_Member_Edit_Response');
模塊編輯頁(yè)輸出接口
DefinePluginFilter('Filter_Plugin_Module_Edit_Response');
c_admin_js_add.php腳本頁(yè)的接口
DefinePluginFilter('Filter_Plugin_Admin_Js_Add');
定義OutputOptionItemsOfCategories 類別的輸出選項(xiàng)函數(shù)里的接口
DefinePluginFilter('Filter_Plugin_OutputOptionItemsOfCategories');
Event里的接口
VerifyLogin成功的接口
DefinePluginFilter('Filter_Plugin_VerifyLogin_Succeed');
Logout成功的接口
DefinePluginFilter('Filter_Plugin_Logout_Succeed');
定義GetPost輸出結(jié)果接口
DefinePluginFilter('Filter_Plugin_GetPost_Result');
定義GetList輸出結(jié)果接口
DefinePluginFilter('Filter_Plugin_GetList_Result');
定義ViewIndex輸出接口Begin
DefinePluginFilter('Filter_Plugin_ViewIndex_Begin');
定義ViewFeed輸出接口Begin
DefinePluginFilter('Filter_Plugin_ViewFeed_Begin');
定義ViewSearch輸出接口Begin
DefinePluginFilter('Filter_Plugin_ViewSearch_Begin');
定義ViewAuto輸出接口Begin
DefinePluginFilter('Filter_Plugin_ViewAuto_Begin');
定義ViewAuto輸出接口End
DefinePluginFilter('Filter_Plugin_ViewAuto_End');
定義列表輸出接口
DefinePluginFilter('Filter_Plugin_ViewList_Begin');
定義列表核心接口
DefinePluginFilter('Filter_Plugin_ViewList_Core');
定義搜索核心接口
DefinePluginFilter('Filter_Plugin_ViewSearch_Core');
定義Feed核心接口
DefinePluginFilter('Filter_Plugin_ViewFeed_Core');
定義列表輸出接口
DefinePluginFilter('Filter_Plugin_ViewPost_Begin');
?
DefinePluginFilter('Filter_Plugin_ViewList_Template');
?
DefinePluginFilter('Filter_Plugin_ViewPost_Template');
?
DefinePluginFilter('Filter_Plugin_ViewComments_Template');
?
DefinePluginFilter('Filter_Plugin_ViewComment_Template');
模塊編輯的核心接口
DefinePluginFilter('Filter_Plugin_PostModule_Core');
會(huì)員編輯的核心接口
DefinePluginFilter('Filter_Plugin_PostMember_Core');
標(biāo)簽編輯的核心接口
DefinePluginFilter('Filter_Plugin_PostTag_Core');
分類編輯的核心接口
DefinePluginFilter('Filter_Plugin_PostCategory_Core');
評(píng)論發(fā)表的核心接口
DefinePluginFilter('Filter_Plugin_PostComment_Core');
文章編輯的核心接口
DefinePluginFilter('Filter_Plugin_PostArticle_Core');
頁(yè)面編輯的核心接口
DefinePluginFilter('Filter_Plugin_PostPage_Core');
會(huì)員編輯成功的接口
DefinePluginFilter('Filter_Plugin_PostMember_Succeed');
標(biāo)簽編輯成功的接口
DefinePluginFilter('Filter_Plugin_PostTag_Succeed');
分類編輯成功的接口
DefinePluginFilter('Filter_Plugin_PostCategory_Succeed');
評(píng)論發(fā)表成功的接口
DefinePluginFilter('Filter_Plugin_PostComment_Succeed');
頁(yè)面編輯成功的接口
DefinePluginFilter('Filter_Plugin_PostPage_Succeed');
文章編輯成功的接口
DefinePluginFilter('Filter_Plugin_PostArticle_Succeed');
模塊編輯成功的接口
DefinePluginFilter('Filter_Plugin_PostModule_Succeed');
會(huì)員刪除成功的接口
DefinePluginFilter('Filter_Plugin_DelMember_Succeed');
標(biāo)簽刪除成功的接口
DefinePluginFilter('Filter_Plugin_DelTag_Succeed');
分類刪除成功的接口
DefinePluginFilter('Filter_Plugin_DelCategory_Succeed');
評(píng)論刪除成功的接口
DefinePluginFilter('Filter_Plugin_DelComment_Succeed');
頁(yè)面刪除成功的接口
DefinePluginFilter('Filter_Plugin_DelPage_Succeed');
文章刪除成功的接口
DefinePluginFilter('Filter_Plugin_DelArticle_Succeed');
模塊刪除成功的接口
DefinePluginFilter('Filter_Plugin_DelModule_Succeed');
類里的接口
干預(yù)Base類data屬性的接口
DefinePluginFilter('Filter_Plugin_Base_Data_Load');
干預(yù)Post類Url方法的接口
DefinePluginFilter('Filter_Plugin_Post_Url');
干預(yù)Category類Url方法的接口
DefinePluginFilter('Filter_Plugin_Category_Url');
干預(yù)Tag類Url方法的接口
DefinePluginFilter('Filter_Plugin_Tag_Url');
干預(yù)Member類Url方法的接口
DefinePluginFilter('Filter_Plugin_Member_Url');
Post類的CommentPostUrl接口
DefinePluginFilter('Filter_Plugin_Post_CommentPostUrl');
Post類的Prev接口
DefinePluginFilter('Filter_Plugin_Post_Prev');
Post類的Next接口
DefinePluginFilter('Filter_Plugin_Post_Next');
Post類的RelatedList 接口
DefinePluginFilter('Filter_Plugin_Post_RelatedList');
Post類的魔術(shù)方法接口
DefinePluginFilter('Filter_Plugin_Post_Call');
Comment類的魔術(shù)方法接口
DefinePluginFilter('Filter_Plugin_Comment_Call');
Tag類的魔術(shù)方法接口
DefinePluginFilter('Filter_Plugin_Tag_Call');
Category類的魔術(shù)方法接口
DefinePluginFilter('Filter_Plugin_Category_Call');
Member類的魔術(shù)方法接口
DefinePluginFilter('Filter_Plugin_Member_Call');
Post類的Del方法接口
DefinePluginFilter('Filter_Plugin_Post_Del');
Tag類的Del方法接口
DefinePluginFilter('Filter_Plugin_Tag_Del');
Comment類的Del方法接口
DefinePluginFilter('Filter_Plugin_Comment_Del');
Category類的Del方法接口
DefinePluginFilter('Filter_Plugin_Category_Del');
Member類的Del方法接口
DefinePluginFilter('Filter_Plugin_Member_Del');
Module類的Del方法接口
DefinePluginFilter('Filter_Plugin_Module_Del');
Post類的Save方法接口
DefinePluginFilter('Filter_Plugin_Post_Save');
Comment類的Save方法接口
DefinePluginFilter('Filter_Plugin_Comment_Save');
Tag類的Save方法接口
DefinePluginFilter('Filter_Plugin_Tag_Save');
Category類的Save方法接口
DefinePluginFilter('Filter_Plugin_Category_Save');
Member類的Save方法接口
DefinePluginFilter('Filter_Plugin_Member_Save');
Module類的Save方法接口
DefinePluginFilter('Filter_Plugin_Module_Save');
Mebmer類的Avatar接口
DefinePluginFilter('Filter_Plugin_Mebmer_Avatar');
Upload類的SaveFile方法接口
DefinePluginFilter('Filter_Plugin_Upload_SaveFile');
Upload類的SaveBase64File方法接口
DefinePluginFilter('Filter_Plugin_Upload_SaveBase64File');
Upload類的DelFile方法接口
DefinePluginFilter('Filter_Plugin_Upload_DelFile');
Upload類的Url方法接口
DefinePluginFilter('Filter_Plugin_Upload_Url');
Upload類的Dir方法接口
DefinePluginFilter('Filter_Plugin_Upload_Dir');
App類的Pack方法接口
DefinePluginFilter('Filter_Plugin_App_Pack');
Template類編譯一個(gè)模板前的接口
DefinePluginFilter('Filter_Plugin_Template_Compiling_Begin');
Template類編譯一個(gè)模板后的接口
DefinePluginFilter('Filter_Plugin_Template_Compiling_End');
Template類讀取一個(gè)模板前的接口
DefinePluginFilter('Filter_Plugin_Template_GetTemplate');
Template類讀取一個(gè)模板前的接口
DefinePluginFilter('Filter_Plugin_Template_MakeTemplatetags');
大數(shù)據(jù)文章接口
DefinePluginFilter('Filter_Plugin_LargeData_Article');
大數(shù)據(jù)頁(yè)面接口
DefinePluginFilter('Filter_Plugin_LargeData_Page');
大數(shù)據(jù)評(píng)論接口
DefinePluginFilter('Filter_Plugin_LargeData_Comment');
大數(shù)據(jù)增減文章標(biāo)簽關(guān)聯(lián)表
DefinePluginFilter('Filter_Plugin_LargeData_CountTagArray');
大數(shù)據(jù)GetList函數(shù)
DefinePluginFilter('Filter_Plugin_LargeData_GetList');
xml-rpc頁(yè)的begin接口(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Xmlrpc_Begin');