請在您動手編寫插件之前,還需要仔細的閲讀以下原則,遵循這些原則,將有效的避免可能發生的問題:

  • 所有與插件的程序,包括其全部的前後台程序,請全部放入 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 字段中,類型為有符號整數。