外掛實現流程
開始編寫社群外掛,您應當首先對外掛實現的流程有一個大致的瞭解,以下是我們推薦的外掛編寫流程:
- 熟練使用 Discuz! 社群系統後,對希望完善或補充的個性化功能進行評估,進而提出外掛的功能需求。
- 對外掛做一個概括性的設計,例如:需要使用什麼選單、什麼引數,配置哪些選項、資料結構如何設計、前後臺實現哪些功能等等。
- 閱讀本檔案並在系統設定中實際體驗 Discuz! 外掛介面所實現的功用,例如:您的外掛應當如何設計才能良好的掛接到社群系統中來。外掛介面能夠實現哪些功能、不能實現哪些功能,外掛為此而需要做的最佳化、改造和取捨。
- 編寫相應程式程式碼和模板語句,實現所需的功能並進行程式碼測試、相容性測試和程式碼改進。
- 如果需要公開您的外掛,可以用外掛匯出的方式,將外掛配置資訊匯出到一個 XML
檔案中,連同相應的程式和模板檔案一同打包。同時,編寫一個適合新手的外掛的說明書也是必不可少的,其中包括:外掛適用的 Discuz!
版本、功能概述、相容性宣告、安裝方法、使用方法、解除安裝方法等等。 - 將外掛提供給他人,或自己使用,根據使用者反饋,對外掛進行完善。外掛實現流程至此結束。
檔案命名規範
Discuz! 按照如下的規範對程式和模板進行命名,請在設計外掛時儘量遵循此命名規範:
- 可以直接透過瀏覽器訪問的普通程式檔案,以 .php 字尾命名。
- 被普通程式檔案引用的程式檔案,以 .inc.php 字尾命名。
- 被普通程式檔案,或引用程式檔案引用的函式庫或類庫,以 .func.php(函式庫) 或 .class.php(類庫) 字尾命名。
- 模板檔案,以 .htm 字尾命名,外掛模板檔案存在於 source/plugin/identifier/template/ 目錄中,手機版外掛模板存在於 source/plugin/identifier/template/mobile/目錄中
- 模板語言包檔案,以 .lang.php 字尾命名,外掛語言包檔案開發時存放於 data/plugindata/ 目錄中,檔名為 identifier.lang.php 。
- 動態快取檔案,存放於 ./data/cache 目錄中,依據不同的功用進行獨立的命名。
- 使用後臺資料備份功能生成的備份檔案,通常以 .sql 為字尾,存放於 data/ 目錄中。
- 有些目錄中存在內容為空白的 index.htm 檔案,此類檔案是為了避免 Web 伺服器開啟 Directory Index 時可能產生的安全問題。
- [X2.5 新增內容] 從 Discuz! X2.5 開始,產品對資料表進行了封裝,封裝後的檔案統一命名為 Table 類,透過 「C::t(Table 類檔名)」 方式呼叫。外掛如需封裝自己的資料表,可將 Table 類檔案存放於 source/plugin/identifier/table/ 目錄下,並以 table_表名.php 格式命名,詳見 X2.5 的新程式架構。
class_core 模組功能
source/class/class_core.php 是 Discuz! 的通用初始化模組程式,其幾乎被所有的外部程式碼所引用,在您開始外掛設計之前,可以先對該模組的大致功能做一定的瞭解。 class_core.php 主要完成了以下任務:
- 對不同 PHP 及作業系統環境做了判斷和相容性處理,使得 Discuz! 可以執行於各種不同配置的伺服器環境下。
- 初始化常量 IN_DISCUZ 為 TRUE,用於 include 或 require 後續程式的判斷,避免其他程式被非法引用。
- 讀取社群程式所在絕對路徑,存放於常量 DISCUZ_ROOT 中。
- 載入所需的基本函式庫 source/function/function_core.php 。
- 透過 config/config_global.php 中提供的資料庫賬號資訊,建立資料庫連線。 Discuz! 支援資料表的字首,如需獲得表的全名,可使用 「DB::table('tablename')」 方式。
- 判斷使用者是否登入,如登入標記 $_G['uid'] 為非 0,同時將 $_G['username'](加了
addslashes 的使用者名稱,可用於不加修改的插入資料庫) 、
$_G['member']['username'](原始的使用者名稱,可用於頁面顯示) 、 $_G['member']['password'](使用者密碼
的 MD5 串) 等相應使用者資訊賦值,其他使用者資訊存放於 $_G['member'],更多資訊可透過 「getuserprofile()」 獲取。 - 判斷使用者管理許可權,將管理許可權標記 $_G['adminid'] 為 1~3 中間的值。 0 代表普通使用者;1 代表論壇管理員;2
代表超級版主;3 代表論壇版主。 將使用者許可權按照其所在的主使用者組 ID 標記為 $_G['groupid'],相關許可權從該
$_G['groupid'] 所對應的系統快取中讀出,存放於 $_G['group'] 。 - 預置讀入了每個模組的各種設定變數。
- [X2.5 變更內容] $_G['username'] 將不進行 addslashes 處理。