安菲多用戶商城系統(tǒng)主要提供基礎(chǔ)的系統(tǒng)功能,對于個性化的功能或者非必要的功能,建議采用插件的系統(tǒng)進(jìn)行開發(fā),這樣方便隨時啟用或者停用不同的插件功能。
系統(tǒng)插件最主要用到的函數(shù)庫是WSTMart/vendor下的函數(shù)庫,一些風(fēng)格位置和函數(shù)的使用都在里邊去定義,這一部分用戶可以根據(jù)實(shí)際情況去進(jìn)行擴(kuò)展,更歡迎開發(fā)者反饋開發(fā)中的函數(shù)給我們完善系統(tǒng)。下邊我們物流插件(快遞100)為例子講解如何進(jìn)行插件開發(fā):
1.準(zhǔn)備開發(fā)目錄,如下:
1)controller--插件控制器目錄
2)model---插件控模型目錄
3)view---插件視圖文件目錄
4)config.php---插件配置目錄,這里的配置會影響到管理后臺“擴(kuò)展管理-插件管理”里的插件描述,例如:
其中type類型有hidden(隱藏域)、text(輸入框)、radio(單選框)、textarea(文本域)、tips(提示信息)、checkbox(復(fù)選框)-需搭配options使用、group(分頁Tab)-需搭配options幾種類型。開發(fā)者在這里定義了不同的type.在插件設(shè)置界面就會生成不同的元素。
5)Kuaidi.php---插件主入口,凡是在插件里用到的鉤子,都需要在該文件中定義。例如該插件會在鉤子adminDocumentOrderView處執(zhí)行,那么就需要在該文件內(nèi)定義這個鉤子的函數(shù):
作為一個插件主入口必須的函數(shù)有install(插件安裝時執(zhí)行)、uninstall(插件卸載時執(zhí)行)、enable(插件啟用時執(zhí)行)、disable(插件禁用時執(zhí)行)、saveConfig(保存插件設(shè)置時執(zhí)行),這些是必須的函數(shù)。當(dāng)用戶在擴(kuò)展管理中安裝、卸載,啟用,禁用和保存插件設(shè)置時就需要調(diào)用這里的函數(shù)。
6)install.sql---安裝插件時需要執(zhí)行的sql。
7)uninstall.sql---卸載插件時需要執(zhí)行的sql。
2.在插件主入口創(chuàng)建插件必備的函數(shù)install(插件安裝時執(zhí)行)、uninstall(插件卸載時執(zhí)行)、enable(插件啟用時執(zhí)行)、disable(插件禁用時執(zhí)行)、saveConfig(保存插件設(shè)置時執(zhí)行)以及鉤子需要執(zhí)行的函數(shù)。
3.在model中定義插件的業(yè)務(wù)處理函數(shù),如圖:
其中install和uninstall是必須的插件業(yè)務(wù)處理動作。一個插件會監(jiān)聽那些鉤子,就需要在install里進(jìn)行定義,如圖$hooks中數(shù)組中的內(nèi)容“adminDocumentOrderView”,表示鉤子“adminDocumentOrderView”會被該快遞插件監(jiān)聽。當(dāng)用戶安裝插件之后,我們就在“拓展管理-擴(kuò)展管理-鉤子管理”中查看到改鉤子的監(jiān)聽插件情況:
當(dāng)用戶卸載了插件之后,此處也會看到這個插件名稱。
4.插件請求。如果和鉤子監(jiān)聽無關(guān)的跳轉(zhuǎn)或者請求,則用戶可以像一般的做法一樣,在controller里定義控制器,然后調(diào)用model進(jìn)行處理,最后返回到view里的視圖去顯示。
5.視圖參數(shù)定義。有時候我們需要在插件里引用到外部的布局,例如引用商品相應(yīng)頁的布局,那么我們就需要插件系統(tǒng)幫我們預(yù)定義一套參數(shù),這樣方便我們引用。注意:電商系統(tǒng)之所以要預(yù)定義一套參數(shù),主要是為了前臺風(fēng)格切換的時候不至于因?yàn)椴寮飳懰懒孙L(fēng)格路徑導(dǎo)致頁面錯位。具體的參數(shù)定義開發(fā)者可以參考文件vendor/5ini99/think-addons/src/Controller.php中的initLayout函數(shù),也可以自行對此文件進(jìn)行修改-不過為了兼容后續(xù)的升級,最好開發(fā)者反饋給官方進(jìn)行修改。有了官方的地方,開發(fā)者就可以在前臺類似這樣的引用了:
