說明:接口模式復(fù)制自Z-Blog ASP版葫督。
定義常量
PLUGIN_EXITSIGNAL_NONE '' 插件運(yùn)行中斷方式:無
PLUGIN_EXITSIGNAL_RETURN 'return' 插件中斷方式:return
PLUGIN_EXITSIGNAL_BREAK 'break' 插件中斷方式:break
定義公共變量
$GLOBALS['plugins'] = array(); 總插件激活函數(shù)數(shù)組列表
$GLOBALS['hooks'] = array(); 總插件接口列表 P.S. 1.5版啟用穗泵,逐漸過度到hooks
函數(shù)說明
1.注冊插件函數(shù)虎谢,由插件主動調(diào)用脉顿。
參數(shù)1:插件ID
插件2:插件激活時執(zhí)行的函數(shù)名
返回:沒有
RegisterPlugin($strPluginName, $strPluginActiveFunction)
$GLOBALS['plugins'][$strPluginName] = $strPluginActiveFunction;
如上代碼倔监,這個函數(shù)實際就是將相關(guān)值寫入公共數(shù)組戒幔。
2.安裝插件函數(shù)访递,這個函數(shù)只會在安裝插件時運(yùn)行一次。
參數(shù):插件ID
返回:沒有
InstallPlugin($strPluginName)
if(function_exists($f = 'InstallPlugin_' . $strPluginName)){
$f();
}
如果對應(yīng)的函數(shù)存在亮航,執(zhí)行之荸实。
3.插件刪除函數(shù),這個函數(shù)只會在刪除插件時運(yùn)行一次缴淋。
參數(shù):插件ID
返回:沒有
UninstallPlugin($strPluginName)
if(function_exists($f = 'UninstallPlugin_' . $strPluginName) == true){
$f();
}
為什么這里要用true准给?
3.創(chuàng)建插件接口函數(shù) DefinePluginFilter($strPluginFilter)
判斷如果 $GLOBALS['hooks'][$strPluginFilter] 的值是否定義。如果沒有重抖,則定義對應(yīng)空數(shù)組圆存,且將該變量地址引用給 $GLOBALS[$strPluginFilter] 對應(yīng)公共變量。此時即可直接使用對應(yīng)插件相關(guān)數(shù)據(jù)仇哆。
4.檢查插件接口函數(shù) ExistsPluginFilter($strPluginFilter)
這個函數(shù)判斷 $GLOBALS['hooks'][$strPluginFilter] 的值是否存在沦辙,返回 bool。
5.調(diào)用插件接口函數(shù) &UsingPluginFilter($strPluginFilter)
這個函數(shù)判斷 $GLOBALS['hooks'][$strPluginFilter] 的值是否存在讹剔,如果存在就返回對應(yīng)的插件名字的數(shù)組油讯,否則返回空數(shù)組。
&符號用于函數(shù)的引用操作延欠,例如:$result = &UsingPluginFilter(); 則 $result 變量即指向函數(shù)的return的地址陌兑。修改變量可修改return對應(yīng)結(jié)果。
6.移除插件接口 RemovePluginFilter($strPluginFilter)
函數(shù)判斷對應(yīng)的 $GLOBALS['hooks'][$strPluginFilter] 是否存在由捎,如果存在兔综,則
unset $GLOBALS['hooks'][$strPluginFilter] 和 $GLOBALS[$strPluginFilter],返回true狞玛。
以上是插件相關(guān)基本函數(shù)软驰,下面即是過濾接口相關(guān)函數(shù)。也是本頁大部分內(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這個沒有固该?
返回:無
如果 isset($GLOBALS['hooks'][$plugname]) 插件名數(shù)組定義 且
isset($GLOBALS['hooks'][$plugname][$functionname]) 對應(yīng)下的函數(shù)名沒有定義
則 $GLOBALS['hooks'][$plugname][$functionname] = $exitsignal; 定義對應(yīng)函數(shù)名锅减,以及其中斷方式。用法:
執(zhí)行插件即 $Filter_Plugin_Zbp_LoadManage[$functionname](); 中斷方式即 $Filter_Plugin_Zbp_LoadManage[$functionname] 的值伐坏,這是一個插件的函數(shù)執(zhí)行怔匣,官方系統(tǒng)使用 foreach 將多個函數(shù)通過 $GLOBALS['hooks']['Filter_Plugin_Zbp_LoadManage'] 來執(zhí)行。
2.以下使用函數(shù)定義插件過濾接口著淆,只是定義劫狠。接口的相關(guān)位置在其他文章詳細(xì)解答拴疤。 $GLOBALS['hooks'][$strPluginFilter] = array()
一個空的數(shù)組永部。
調(diào)試關(guān)閉處理程序独泞,調(diào)試異常處理程序,調(diào)試錯誤處理程序
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過濾和統(tǒng)計方法接口
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類的顯示錯誤接口
DefinePluginFilter('Filter_Plugin_Zbp_ShowError');
Zbp類的顯示驗證碼接口苔埋,具有唯一性
DefinePluginFilter('Filter_Plugin_Zbp_ShowValidCode');
Zbp類的比對驗證碼接口懦砂,具有唯一性
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類的后臺管理初始加載接口
DefinePluginFilter('Filter_Plugin_Zbp_LoadManage');
Zbp類的終結(jié)接口(終結(jié)接口?)
DefinePluginFilter('Filter_Plugin_Zbp_Terminate');
前臺view,index相關(guān)
定義index.php接口 起動
DefinePluginFilter('Filter_Plugin_Index_Begin');
定義index.php接口 結(jié)束
DefinePluginFilter('Filter_Plugin_Index_End');
c_html_js_add.php腳本調(diào)用,JS頁接口需要強(qiáng)制開啟
DefinePluginFilter('Filter_Plugin_Html_Js_Add');
搜索頁接口组橄,可以接管搜索頁荞膘。
DefinePluginFilter('Filter_Plugin_Search_Begin');
搜索接口 結(jié)束
DefinePluginFilter('Filter_Plugin_Search_End');
Feed頁接口,可以接管Feed頁玉工。
DefinePluginFilter('Filter_Plugin_Feed_Begin');
Feed頁接口 結(jié)束
DefinePluginFilter('Filter_Plugin_Feed_End');
CMD里的接口
cmd.php的啟動接口,可以在這里攔截各種action
DefinePluginFilter('Filter_Plugin_Cmd_Begin');
cmd.php的Ajax命令專用接口羽资,插件需要自行判斷權(quán)限
DefinePluginFilter('Filter_Plugin_Cmd_Ajax');
后臺里的接口
定義Login.php首頁header接口
DefinePluginFilter('Filter_Plugin_Login_Header');
定義其它頁的header接口
DefinePluginFilter('Filter_Plugin_Other_Header');
c_system_misc里的接口
c_system_misc.php的啟動接口,可以在這里攔截各種type
DefinePluginFilter('Filter_Plugin_Misc_Begin');
后臺管理頁的啟動接口,可以攔截后臺管理請求實現(xiàn)自己的管理
DefinePluginFilter('Filter_Plugin_Admin_Begin');
后臺管理頁的終結(jié)接口
DefinePluginFilter('Filter_Plugin_Admin_End');
定義后臺首頁header接口
DefinePluginFilter('Filter_Plugin_Admin_Header');
定義后臺首頁footer接口
DefinePluginFilter('Filter_Plugin_Admin_Footer');
定義后臺左側(cè)欄接口
DefinePluginFilter('Filter_Plugin_Admin_LeftMenu');
定義后臺頂部導(dǎo)航欄接口
DefinePluginFilter('Filter_Plugin_Admin_TopMenu');
后臺首頁SubMenu
DefinePluginFilter('Filter_Plugin_Admin_SiteInfo_SubMenu');
文章管理SubMenu
DefinePluginFilter('Filter_Plugin_Admin_ArticleMng_SubMenu');
頁面管理
DefinePluginFilter('Filter_Plugin_Admin_PageMng_SubMenu');
分類管理
DefinePluginFilter('Filter_Plugin_Admin_CategoryMng_SubMenu');
評論管理
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');
編輯頁菜單(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Edit_SubMenu');
標(biāo)簽編輯頁菜單(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Tag_Edit_SubMenu');
模塊編輯頁菜單(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Module_Edit_SubMenu');
用戶編輯頁菜單(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Member_Edit_SubMenu');
分類編輯頁菜單(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Category_Edit_SubMenu');
文章管理頁表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_ArticleMng_Table');
頁面管理頁表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_PageMng_Table');
分類管理頁表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_CategoryMng_Table');
評論管理頁表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_CommentMng_Table');
會員管理頁表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_MemberMng_Table');
附件管理頁表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_UploadMng_Table');
Tag管理頁表處理(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Admin_TagMng_Table');
文章頁面編輯頁開始接口
DefinePluginFilter('Filter_Plugin_Edit_Begin');
文章頁面編輯頁結(jié)束接口
DefinePluginFilter('Filter_Plugin_Edit_End');
文章頁面編輯1號輸出接口
DefinePluginFilter('Filter_Plugin_Edit_Response');
文章頁面編輯2號輸出接口
DefinePluginFilter('Filter_Plugin_Edit_Response2');
文章頁面編輯4號輸出接口
DefinePluginFilter('Filter_Plugin_Edit_Response4');
文章頁面編輯5號輸出接口
DefinePluginFilter('Filter_Plugin_Edit_Response5');
文章頁面編輯3號輸出接口
DefinePluginFilter('Filter_Plugin_Edit_Response3');
分類編輯頁輸出接口
DefinePluginFilter('Filter_Plugin_Category_Edit_Response');
標(biāo)簽編輯頁輸出接口
DefinePluginFilter('Filter_Plugin_Tag_Edit_Response');
會員編輯頁輸出接口
DefinePluginFilter('Filter_Plugin_Member_Edit_Response');
模塊編輯頁輸出接口
DefinePluginFilter('Filter_Plugin_Module_Edit_Response');
c_admin_js_add.php腳本頁的接口
DefinePluginFilter('Filter_Plugin_Admin_Js_Add');
定義OutputOptionItemsOfCategories 類別的輸出選項函數(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');
會員編輯的核心接口
DefinePluginFilter('Filter_Plugin_PostMember_Core');
標(biāo)簽編輯的核心接口
DefinePluginFilter('Filter_Plugin_PostTag_Core');
分類編輯的核心接口
DefinePluginFilter('Filter_Plugin_PostCategory_Core');
評論發(fā)表的核心接口
DefinePluginFilter('Filter_Plugin_PostComment_Core');
文章編輯的核心接口
DefinePluginFilter('Filter_Plugin_PostArticle_Core');
頁面編輯的核心接口
DefinePluginFilter('Filter_Plugin_PostPage_Core');
會員編輯成功的接口
DefinePluginFilter('Filter_Plugin_PostMember_Succeed');
標(biāo)簽編輯成功的接口
DefinePluginFilter('Filter_Plugin_PostTag_Succeed');
分類編輯成功的接口
DefinePluginFilter('Filter_Plugin_PostCategory_Succeed');
評論發(fā)表成功的接口
DefinePluginFilter('Filter_Plugin_PostComment_Succeed');
頁面編輯成功的接口
DefinePluginFilter('Filter_Plugin_PostPage_Succeed');
文章編輯成功的接口
DefinePluginFilter('Filter_Plugin_PostArticle_Succeed');
模塊編輯成功的接口
DefinePluginFilter('Filter_Plugin_PostModule_Succeed');
會員刪除成功的接口
DefinePluginFilter('Filter_Plugin_DelMember_Succeed');
標(biāo)簽刪除成功的接口
DefinePluginFilter('Filter_Plugin_DelTag_Succeed');
分類刪除成功的接口
DefinePluginFilter('Filter_Plugin_DelCategory_Succeed');
評論刪除成功的接口
DefinePluginFilter('Filter_Plugin_DelComment_Succeed');
頁面刪除成功的接口
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類編譯一個模板前的接口
DefinePluginFilter('Filter_Plugin_Template_Compiling_Begin');
Template類編譯一個模板后的接口
DefinePluginFilter('Filter_Plugin_Template_Compiling_End');
Template類讀取一個模板前的接口
DefinePluginFilter('Filter_Plugin_Template_GetTemplate');
Template類讀取一個模板前的接口
DefinePluginFilter('Filter_Plugin_Template_MakeTemplatetags');
大數(shù)據(jù)文章接口
DefinePluginFilter('Filter_Plugin_LargeData_Article');
大數(shù)據(jù)頁面接口
DefinePluginFilter('Filter_Plugin_LargeData_Page');
大數(shù)據(jù)評論接口
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頁的begin接口(1.5.1加入)
DefinePluginFilter('Filter_Plugin_Xmlrpc_Begin');