WIKI使用導(dǎo)航
站長百科導(dǎo)航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計算
- 微博營銷
- 虛擬主機管理系統(tǒng)
- 開放平臺
- WIKI程序與應(yīng)用
- 美國十大主機
Discuz: 插件設(shè)計:修訂間差異
來自站長百科
(新頁面: 您在開始論壇插件的設(shè)計之前,有必要了解一下我們所推薦的插件設(shè)計方式,更好的規(guī)范性和兼容性,將使得您設(shè)計的插件受到更多使用者的...) ? |
無編輯摘要 |
||
第3行: | 第3行: | ||
良好的編碼習(xí)慣,實現(xiàn)自身能力的提升。如果您有意編寫 Discuz! 論壇插件,請按照先后順序仔細(xì)閱讀本文檔。 | 良好的編碼習(xí)慣,實現(xiàn)自身能力的提升。如果您有意編寫 Discuz! 論壇插件,請按照先后順序仔細(xì)閱讀本文檔。 | ||
<div width="98%" style="font-size:14px; border:1px solid | <div width="98%" style="font-size:14px; border:1px solid darkslateblue; background:#f0f0f0; font-weight:bold; padding:0 5px; margin:20px 0 20px;"> | ||
準(zhǔn)備工作 ? | ====準(zhǔn)備工作==== | ||
</div> | </div> | ||
插件實現(xiàn)流程 | '''插件實現(xiàn)流程''' | ||
開始編寫論壇插件,您應(yīng)當(dāng)首先對插件實現(xiàn)的流程有一個大致的了解,以下是我們推薦的插件編寫流程: ? | 開始編寫論壇插件,您應(yīng)當(dāng)首先對插件實現(xiàn)的流程有一個大致的了解,以下是我們推薦的插件編寫流程: ? | ||
<div width="98%"><pre style="border:1px solid #cccccc; background:white; padding:5px 5px; line-height:19px;"> | |||
? ? 1. 熟練使用 Discuz! 論壇系統(tǒng)后,對希望完善或補充的個性化功能進(jìn)行評估,進(jìn)而提出插件的功能需求。 | |||
? ? 2. 對插件做一個概括性的設(shè)計,例如:需要使用什么菜單、什么參數(shù),配置哪些選項、數(shù)據(jù)結(jié)構(gòu)如何設(shè)計、前后臺實現(xiàn)哪些功能等等。 | |||
? ? 3. 閱讀本文檔并在系統(tǒng)設(shè)置中實際體驗 Discuz! 插件接口所實現(xiàn)的功用,例如:您的插件應(yīng)當(dāng)如何設(shè)計才能良好的掛接到論壇系統(tǒng)中 | |||
? ? ? ? 來。插件接口能夠?qū)崿F(xiàn)哪些功能、不能實現(xiàn)哪些功能,插件為此而需要做的優(yōu)化、改造和取舍。 | |||
? ? 4. 編寫相應(yīng)程序代碼和模板語句,實現(xiàn)所需的功能并進(jìn)行代碼測試、兼容性測試和代碼改進(jìn)。 | |||
? ? 5. 如果需要公開您的插件,可以用插件導(dǎo)出的方式,將插件配置信息導(dǎo)出到一個文本文件中,連同相應(yīng)的程序和模板文件一同打包。同 | |||
? ? ? ? 時,編寫一個適合新手的插件的說明書也是必不可少的,其中包括:插件適用的 Discuz! 版本、功能概述、兼容性聲明、安裝方 | |||
? ? ? ? 法、使用方法、卸載方法等等。 | |||
? ? 6. 將插件提供給他人,或自己使用,根據(jù)使用者反饋,對插件進(jìn)行完善。插件實現(xiàn)流程至此結(jié)束。 | |||
</pre></div> | |||
? | '''文件命名規(guī)范''' | ||
文件命名規(guī)范 | |||
Discuz! 按照如下的規(guī)范對程序和模板進(jìn)行命名,請在設(shè)計插件時盡量遵循此命名規(guī)范: ? | Discuz! 按照如下的規(guī)范對程序和模板進(jìn)行命名,請在設(shè)計插件時盡量遵循此命名規(guī)范: ? | ||
<div width="98%"><pre style="border:1px solid #cccccc; background:white; padding:5px 5px; line-height:19px;"> | |||
? ? 1. 可以直接通過瀏覽器訪問的普通程序文件,以 .php 后綴命名。 | |||
? ? 2. 被普通程序文件引用的程序文件,以 .inc.php 后綴命名。 | |||
? ? 3. 被普通程序文件,或引用程序文件引用的函數(shù)庫或類庫,以 .func.php(函數(shù)庫) 或 .class.php(類庫) 后綴命名。 | |||
? ? 4. 模板文件,以 .htm 后綴命名,模板文件只存在于 ./templates 目錄中。 | |||
? ? 5. 模板語言包文件,以 .lang.php 后綴命名,語言包文件只存放于 ./templates 目錄中,與模板文件同級目錄。 | |||
? ? 6. 被編譯后的模板文件,以 .tpl.php 后綴命名,前面的數(shù)字是模板套系的 ID,下劃線后面的是模板原名,編譯模板文件只存在于 ./forumdata/templates 目錄中。 | |||
? ? 7. 動態(tài)緩存文件,存放于 ./forumdata/cache 目錄中,依據(jù)不同的功用進(jìn)行獨立的命名。 | |||
? ? 8. 使用后臺數(shù)據(jù)備份功能生成的備份文件,通常以 .sql 為后綴,存放于 ./forumdata/ 目錄中。 | |||
? ? 9. 有些目錄中存在內(nèi)容為空白的 index.htm 文件,此類文件是為了避免 Web 服務(wù)器打開 Directory Index 時可能產(chǎn)生的安全問題 | |||
</pre></div> | |||
'''common.inc.php 模塊功能白皮書''' | |||
./include/common.inc.php 是 Discuz! 的通用初始化模塊程序,其幾乎被所有的外部代碼所引用,在您開始插件設(shè)計之前,可以先對該模 | |||
塊的大致功能做一定的了解。common.inc.php 主要完成了以下任務(wù): | |||
<div width="98%"><pre style="border:1px solid #cccccc; background:white; padding:5px 5px; line-height:19px;"> | |||
? ? ? 1. 對不同 PHP 及操作系統(tǒng)環(huán)境做了判斷和兼容性處理,使得 Discuz! 可以運行于各種不同配置的服務(wù)器環(huán)境下。 ? | |||
? ? ? 2. 初始化常量 IN_DISCUZ 為 TRUE,用于 include 或 require 后續(xù)程序的判斷,避免其他程序被非法引用。 ? | |||
? ? ? 3. 讀取論壇所在絕對路徑,存放于常量 DISCUZ_ROOT 中。 ? | |||
? ? ? 4. 加載所需的基本函數(shù)庫 include/global.func.php。 ? | |||
? ? ? 5. 通過 config.inc.php 中提供的數(shù)據(jù)庫賬號信息,建立數(shù)據(jù)庫連接。Discuz!支持?jǐn)?shù)據(jù)表的前綴,如需獲得表的全名,可使? | |||
? ? ? ? 用”{$tablepre}tablename” 或 $tablepre.’tablename’的方式。 ? | |||
? ? ? 6. 判斷用戶是否登錄,如登錄標(biāo)記 $discuz_uid 為非 0,同時將 $discuz_user(加了 slash 的用戶名,可用于不加修改的插入數(shù) | |||
? ? ? ? 據(jù)庫)、 $discuz_userss(原始的用戶名,可用于頁面顯示)、$discuz_pw(用戶密碼的MD5串)、$discuz_secques(登錄提示 | |||
? | ? ? ? ? 問題的加密串)等相應(yīng)用戶信息賦值。 | ||
? ? ? 7. 判斷用戶管理權(quán)限,將管理權(quán)限標(biāo)記 $adminid 為 -1~3 中間的值。-1 代表為特殊用戶組用戶。0 代表普通用戶;1 代表論壇管 | |||
? | ? ? ? ? 理員;2 代表超級版主;3 代表論壇版主。將用戶權(quán)限按照其所在的主用戶組 ID 標(biāo)記為 $groupid,相關(guān)權(quán)限從該 $groupid 所 | ||
? | ? ? ? ? 對應(yīng)的系統(tǒng)緩存中讀出(./forumdata/cache/usergroup_$groupid.php)。將用戶擴(kuò)展權(quán)限按照其擴(kuò)展用戶組 ID 標(biāo)記為 $ | ||
對不同 PHP 及操作系統(tǒng)環(huán)境做了判斷和兼容性處理,使得 Discuz! 可以運行于各種不同配置的服務(wù)器環(huán)境下。 ? | ? ? ? ? extgroupids,中間以 \t(tab) 分隔,格式為“$groupid1\t$groupid2...”,擴(kuò)展用戶組用于確定用戶的擴(kuò)展瀏覽權(quán)限,例如 | ||
初始化常量 IN_DISCUZ 為 TRUE,用于 include 或 require 后續(xù)程序的判斷,避免其他程序被非法引用。 ? | ? ? ? ? 能否訪問某些有特殊權(quán)限設(shè)定的論壇等。 | ||
讀取論壇所在絕對路徑,存放于常量 DISCUZ_ROOT 中。 ? | ? ? ? 8. 讀入系統(tǒng)設(shè)置中的各種變量,并根據(jù) Cache 模塊的設(shè)定,根據(jù)當(dāng)前被調(diào)用的程序文件名(如 index.php,forumdisplay.php 等 | ||
加載所需的基本函數(shù)庫 include/global.func.php。 ? | ? ? ? ? 等)讀入相應(yīng)的緩存代碼。緩存代碼被存放于 ./forumdata/cache/ 中。除了對應(yīng)當(dāng)前程序的緩存,可能還會加載一些通用的緩存 | ||
通過 config.inc.php 中提供的數(shù)據(jù)庫賬號信息,建立數(shù)據(jù)庫連接。Discuz! | ? ? ? ? 數(shù)據(jù),例如整個論壇的設(shè)置(./forumdata/cache/cache_settings.php)、界面風(fēng)格(./forumdata/cache/style_x.php)、當(dāng) | ||
判斷用戶是否登錄,如登錄標(biāo)記 $discuz_uid 為非 0,同時將 $discuz_user(加了 slash | ? ? ? ? 前用戶的用戶組(./forumdata/cache/usergroup_x.php)、管理組權(quán)限(./forumdata/cache/adminusergroup_x.php)等。 ? | ||
判斷用戶管理權(quán)限,將管理權(quán)限標(biāo)記 $adminid 為 -1~3 中間的值。-1 代表為特殊用戶組用戶。0 代表普通用戶;1 | ? ? ? 9. 緩存數(shù)據(jù)的格式,大多是存放在 $_DCACHE['cachename'] 數(shù)組中,有些常用的參數(shù),如系統(tǒng)設(shè)置中的參數(shù)、風(fēng)格界面等,通常還 | ||
讀入系統(tǒng)設(shè)置中的各種變量,并根據(jù) Cache 模塊的設(shè)定,根據(jù)當(dāng)前被調(diào)用的程序文件名(如 index.php,forumdisplay.php | ? ? ? ? 被進(jìn)行了展開操作(extract)或使用常量進(jìn)行賦值。 | ||
緩存數(shù)據(jù)的格式,大多是存放在 $_DCACHE['cachename'] | ? ? 10. 用戶如果處在登錄狀態(tài),會自動讀出 members 表相關(guān)用戶的參數(shù)值,用戶的個性設(shè)置參數(shù):如時差、時間格式、界面風(fēng)格等等,會 | ||
用戶如果處在登錄狀態(tài),會自動讀出 members | ? ? ? ? 根據(jù)實際情況覆蓋系統(tǒng)默認(rèn)值,因此在后續(xù)程序通常不用再做判斷。 | ||
如果程序提交的 URL 中包含 tid=x 或 fid=x,common.inc.php 模塊會自動讀出其所對應(yīng)的論壇記錄及包括 access | ? ? 11. 如果程序提交的 URL 中包含 tid=x 或 fid=x,common.inc.php 模塊會自動讀出其所對應(yīng)的論壇記錄及包括 access masks、版 | ||
? ? ? ? 主設(shè)定等相應(yīng)權(quán)限,記錄在 $forum 變量中。后續(xù)程序只要通過URL將tid或fid傳遞過來,便可通過 $forum 數(shù)組的存在性或相關(guān) | |||
? ? ? ? 參數(shù)來對論壇權(quán)限進(jìn)行判斷,不需要再讀 forums 表的資料。 | |||
</pre></div> |
2008年3月25日 (二) 14:21的版本
您在開始論壇插件的設(shè)計之前,有必要了解一下我們所推薦的插件設(shè)計方式,更好的規(guī)范性和兼容性,將使得您設(shè)計的插件受到更多使用者的歡 迎,對于程序員而言,也有助于形成
良好的編碼習(xí)慣,實現(xiàn)自身能力的提升。如果您有意編寫 Discuz! 論壇插件,請按照先后順序仔細(xì)閱讀本文檔。
準(zhǔn)備工作
插件實現(xiàn)流程
開始編寫論壇插件,您應(yīng)當(dāng)首先對插件實現(xiàn)的流程有一個大致的了解,以下是我們推薦的插件編寫流程:
1. 熟練使用 Discuz! 論壇系統(tǒng)后,對希望完善或補充的個性化功能進(jìn)行評估,進(jìn)而提出插件的功能需求。 2. 對插件做一個概括性的設(shè)計,例如:需要使用什么菜單、什么參數(shù),配置哪些選項、數(shù)據(jù)結(jié)構(gòu)如何設(shè)計、前后臺實現(xiàn)哪些功能等等。 3. 閱讀本文檔并在系統(tǒng)設(shè)置中實際體驗 Discuz! 插件接口所實現(xiàn)的功用,例如:您的插件應(yīng)當(dāng)如何設(shè)計才能良好的掛接到論壇系統(tǒng)中 來。插件接口能夠?qū)崿F(xiàn)哪些功能、不能實現(xiàn)哪些功能,插件為此而需要做的優(yōu)化、改造和取舍。 4. 編寫相應(yīng)程序代碼和模板語句,實現(xiàn)所需的功能并進(jìn)行代碼測試、兼容性測試和代碼改進(jìn)。 5. 如果需要公開您的插件,可以用插件導(dǎo)出的方式,將插件配置信息導(dǎo)出到一個文本文件中,連同相應(yīng)的程序和模板文件一同打包。同 時,編寫一個適合新手的插件的說明書也是必不可少的,其中包括:插件適用的 Discuz! 版本、功能概述、兼容性聲明、安裝方 法、使用方法、卸載方法等等。 6. 將插件提供給他人,或自己使用,根據(jù)使用者反饋,對插件進(jìn)行完善。插件實現(xiàn)流程至此結(jié)束。
文件命名規(guī)范
Discuz! 按照如下的規(guī)范對程序和模板進(jìn)行命名,請在設(shè)計插件時盡量遵循此命名規(guī)范:
1. 可以直接通過瀏覽器訪問的普通程序文件,以 .php 后綴命名。 2. 被普通程序文件引用的程序文件,以 .inc.php 后綴命名。 3. 被普通程序文件,或引用程序文件引用的函數(shù)庫或類庫,以 .func.php(函數(shù)庫) 或 .class.php(類庫) 后綴命名。 4. 模板文件,以 .htm 后綴命名,模板文件只存在于 ./templates 目錄中。 5. 模板語言包文件,以 .lang.php 后綴命名,語言包文件只存放于 ./templates 目錄中,與模板文件同級目錄。 6. 被編譯后的模板文件,以 .tpl.php 后綴命名,前面的數(shù)字是模板套系的 ID,下劃線后面的是模板原名,編譯模板文件只存在于 ./forumdata/templates 目錄中。 7. 動態(tài)緩存文件,存放于 ./forumdata/cache 目錄中,依據(jù)不同的功用進(jìn)行獨立的命名。 8. 使用后臺數(shù)據(jù)備份功能生成的備份文件,通常以 .sql 為后綴,存放于 ./forumdata/ 目錄中。 9. 有些目錄中存在內(nèi)容為空白的 index.htm 文件,此類文件是為了避免 Web 服務(wù)器打開 Directory Index 時可能產(chǎn)生的安全問題
common.inc.php 模塊功能白皮書
./include/common.inc.php 是 Discuz! 的通用初始化模塊程序,其幾乎被所有的外部代碼所引用,在您開始插件設(shè)計之前,可以先對該模
塊的大致功能做一定的了解。common.inc.php 主要完成了以下任務(wù):
1. 對不同 PHP 及操作系統(tǒng)環(huán)境做了判斷和兼容性處理,使得 Discuz! 可以運行于各種不同配置的服務(wù)器環(huán)境下。 2. 初始化常量 IN_DISCUZ 為 TRUE,用于 include 或 require 后續(xù)程序的判斷,避免其他程序被非法引用。 3. 讀取論壇所在絕對路徑,存放于常量 DISCUZ_ROOT 中。 4. 加載所需的基本函數(shù)庫 include/global.func.php。 5. 通過 config.inc.php 中提供的數(shù)據(jù)庫賬號信息,建立數(shù)據(jù)庫連接。Discuz!支持?jǐn)?shù)據(jù)表的前綴,如需獲得表的全名,可使 用”{$tablepre}tablename” 或 $tablepre.’tablename’的方式。 6. 判斷用戶是否登錄,如登錄標(biāo)記 $discuz_uid 為非 0,同時將 $discuz_user(加了 slash 的用戶名,可用于不加修改的插入數(shù) 據(jù)庫)、 $discuz_userss(原始的用戶名,可用于頁面顯示)、$discuz_pw(用戶密碼的MD5串)、$discuz_secques(登錄提示 問題的加密串)等相應(yīng)用戶信息賦值。 7. 判斷用戶管理權(quán)限,將管理權(quán)限標(biāo)記 $adminid 為 -1~3 中間的值。-1 代表為特殊用戶組用戶。0 代表普通用戶;1 代表論壇管 理員;2 代表超級版主;3 代表論壇版主。將用戶權(quán)限按照其所在的主用戶組 ID 標(biāo)記為 $groupid,相關(guān)權(quán)限從該 $groupid 所 對應(yīng)的系統(tǒng)緩存中讀出(./forumdata/cache/usergroup_$groupid.php)。將用戶擴(kuò)展權(quán)限按照其擴(kuò)展用戶組 ID 標(biāo)記為 $ extgroupids,中間以 \t(tab) 分隔,格式為“$groupid1\t$groupid2...”,擴(kuò)展用戶組用于確定用戶的擴(kuò)展瀏覽權(quán)限,例如 能否訪問某些有特殊權(quán)限設(shè)定的論壇等。 8. 讀入系統(tǒng)設(shè)置中的各種變量,并根據(jù) Cache 模塊的設(shè)定,根據(jù)當(dāng)前被調(diào)用的程序文件名(如 index.php,forumdisplay.php 等 等)讀入相應(yīng)的緩存代碼。緩存代碼被存放于 ./forumdata/cache/ 中。除了對應(yīng)當(dāng)前程序的緩存,可能還會加載一些通用的緩存 數(shù)據(jù),例如整個論壇的設(shè)置(./forumdata/cache/cache_settings.php)、界面風(fēng)格(./forumdata/cache/style_x.php)、當(dāng) 前用戶的用戶組(./forumdata/cache/usergroup_x.php)、管理組權(quán)限(./forumdata/cache/adminusergroup_x.php)等。 9. 緩存數(shù)據(jù)的格式,大多是存放在 $_DCACHE['cachename'] 數(shù)組中,有些常用的參數(shù),如系統(tǒng)設(shè)置中的參數(shù)、風(fēng)格界面等,通常還 被進(jìn)行了展開操作(extract)或使用常量進(jìn)行賦值。 10. 用戶如果處在登錄狀態(tài),會自動讀出 members 表相關(guān)用戶的參數(shù)值,用戶的個性設(shè)置參數(shù):如時差、時間格式、界面風(fēng)格等等,會 根據(jù)實際情況覆蓋系統(tǒng)默認(rèn)值,因此在后續(xù)程序通常不用再做判斷。 11. 如果程序提交的 URL 中包含 tid=x 或 fid=x,common.inc.php 模塊會自動讀出其所對應(yīng)的論壇記錄及包括 access masks、版 主設(shè)定等相應(yīng)權(quán)限,記錄在 $forum 變量中。后續(xù)程序只要通過URL將tid或fid傳遞過來,便可通過 $forum 數(shù)組的存在性或相關(guān) 參數(shù)來對論壇權(quán)限進(jìn)行判斷,不需要再讀 forums 表的資料。