請在您動手編寫外掛之前,還需要仔細的閱讀以下原則,遵循這些原則,將有效的避免可能發生的問題:
- 所有與外掛的程式,包括其全部的前後臺程式,請全部放入 source/plugin/
目錄中,同時在外掛的安裝說明中指出,外掛的檔案需要複製到哪些目錄。為了避免與其他外掛衝突,請儘量建立 source/plugin/
下的子目錄,並將外掛程式放置於子目錄下,這樣您編寫的外掛將獲得更好的相容性。 - 如果您的外掛包含 「導航欄」 模組,該模組將統一用
plugin.php?identifier=xxx&module=yyy 的方式呼叫,請在相應連結、表單中使用此方式。其中 xxx
為外掛的惟一識別符號,yyy 為模組名稱。前臺外掛外殼程式 plugin.php 已經載入了通用初始化模組
/source/class/class_core.php,不需再次引用。 - 如果您的外掛包含 「管理中心」 模組,該模組將統一用
admin.php?action=plugins&identifier=xxx&pmod=yyy
的方式呼叫,請在相應連結、表單中使用此方式。其中 xxx 和 yyy 的定義與 「導航欄」 模組中的相同。系統還允許用
admin.php?action=plugins&edit=$edit&pmod=$mod
的方式來生成連結和表單地址,$edit 和 $mod 變數已經被外掛後臺管理介面賦值,因此將這兩個變數值帶入 URL
中也是被支援的。由於後臺模組是被 admin.php 呼叫,因此已載入了通用初始化模組 /source/class/class_core.php
並進行了後臺管理人員許可權驗證,因此模組程式中可直接寫功能程式碼,不需再進行驗證。 - 請勿繞過外掛的前後臺外殼 (plugin.php 和
admin.php) 而以直接呼叫某程式的方式編寫外掛,因為這樣既導致了使用者使用不便,程式碼冗餘和不規範,同時又產生了因驗證程式考慮不周到而帶來的安
全隱患。您可以在任何地方,包括連結、表單等處方便的使用上述 URL 地址對外掛模組進行呼叫。 - 所有與外掛有關的程式,包括全部的前臺程式,因全部使用外殼呼叫,請務必在第一行加入
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
後臺程式第一行加入
if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
exit('Access Denied');
}
- 以免其被 URL 直接請求呼叫,產生安全問題。
- 一般情況下,您釋出外掛請使用外掛匯出的功能,以方便使用者一次性匯入外掛的配置資料,極特殊的情況下,也可以分步驟告知使用者如何進行外掛配置管理和安裝此外掛。
- 如果功能獨立,請儘量使用單獨程式的方式編寫外掛 (即外掛型外掛),而儘量少的對論壇本身程式碼進行修改,這將為使用者今後的升級帶來很大方便。
- 您可以修改 Discuz!
本身的資料結構,但更推薦在不很影響效率的前提下將外掛資料用另外的資料表儲存,因為不能排除您增加的欄位或索引和今後版本 Discuz!
核心資料欄位重名的可能。在任何情況下,請不要刪除 Discuz! 標準版本資料結構中已有的欄位或索引。 - 請在外掛說明書中對外掛做以詳盡的描述,例如增加了哪些欄位、哪些表,修改了或新增了哪些程式,版本相容性,後續支援的提供方式 (例如
不提供支援,或以什麼樣的方式提供) 。如果方便,請儘可能提供外掛的解除安裝方法,例如去除哪些欄位、刪除哪些新增的程式、將哪些被外掛修改的程式恢復原狀等
等,使用者會感激您為此付出的辛勤勞動,甚至願意支付相應的費用支援您未來的發展。 - 如果外掛使用另外的資料表儲存,請在外掛管理中準確的設定外掛所使用的資料表名稱 (不包含字首),這樣使用者在備份資料的時候,能夠把外掛資料一同備份。
- Discuz! 內建了 8 種自定義積分,儲存於 common_member 表中的 extcredits1 至 extcredits8 欄位中,型別為有符號整數。