admin 發表於 2020-3-13 14:53:45

Discuz二次開發基本知識總結

一) Discuz!的檔案系統目錄
注:想搞DZ開發,就得弄懂DZ中每個檔案的功能。
a) Admin:後臺管理功能模組
b) Api:DZ系統與其它系統之間介面程式
c) Archiver:DZ中,用以搜尋引擎優化的無圖版
d) Attachments:DZ中 ,使用者上傳附件的存放目錄
e) Customavatars:DZ中,使用者自定義頭像的目錄
f) Forumdata:DZ快取資料的存放目錄
g) Images:DZ模板中的圖片存放目錄
h) Include:DZ常用函式庫,基本功能模組目錄
i) Ipdata:DZ統計IP來路用的資料
j) Plugins:DZ外掛資訊的存放目錄
k) Templates:DZ模板檔案的存放目錄
l) Wap:DZ無線,Wap程式處理目錄
二) 必須記熟Discuz!資料庫設計的每個表的功能,每個表中每個欄位的功能。
關於DZ資料庫設計文件,請參閱DZ相關的專案文件(請從本貼附件中下載)
三) Discuz!的流程控制
a) 後臺流程控:DZ後臺所有的功能,均需要註冊到admincp.php檔案,每個功能都至少有一個或一個以上的Action(動作),在admincp.php中,可以定義Action的執行許可權,分別為:“admin==1”管理員,或“admin==2 || admin==3”超級版主和版主,每個Action對應一個指令碼檔案,指令碼檔案的命名為action.inc.php(*.inc.php),並存放在admin目錄下,如執行:admincp.php?action=dodo,相當於執行admin目錄下的dodo.inc.php檔案
b) 前臺流程控制:前臺的流程控制比較簡單:流程是自由的,如:
首頁:index.php
會員註冊:register.php;
會員登入:logging.php
發貼程式:post.php
會員資訊:member.php
論壇內容:forumdisplay.php
檢視貼子:viewthread.php
…大部分功能,此處不一一列出…
c) DZ根目下的config.inc.php屬於整個DZ系統的配置檔案
四) Discuz!的資料處理過程
a) DZ對mysql的資料庫操作處理全部封裝在dbstuff(db_mysql.class.php)類中
b) 所在的外部資料均通過“daddslashes()”初步過濾,然後再過濾,再根據需要處理
五) Discuz!的顯示控制(網站多樣式風格輸出)
a) 顯示層就是大家通常所看到的網站風格了。DZ中每套風絡分別在templates及images下對應一個風格檔案的存放目錄。網站風格的製作,請參閱詳細的DZ風格製作文件
b) DZ網站風格檔案處理的原理:其實很簡單,DZ使用template.func.php中的parse_template()以PHP正則運算把htm模檔案中的模板標籤,轉換成了PHP程式碼,並根據styleid儲存在forumdata/templates下,這個有點像Smarty中的技術。
六) DZ中的語言處理
a) DZ前臺及後臺中、英語言的實現,均是把語句定義成了語變數,然後在模板輸入,語句變數的賦值,均放在模板目錄中的*.lang.php檔案中,DZ在生成網站風格時就載入了這相應的語言包。
七) DZ如何處理使用者資訊(存取、計算、更新過程)
新手要做二次開發,都必須掌握這陣列中,每個陣列元素的意義。
a) DZ的基本資訊,如使用者資訊,Session資訊存在如下變數中:
a). DCACHEb)._COOKIE
c). DCOOKIEd)._DSESSION
e). DPLUGINb)可以通過printr(GLOBALS),列印全部變數
八) DZ中快取處理機制
a) DZ中快取處理過程都放在“cache.func.php”中,DZ的快取處理比較簡單,其原理是把一個數組轉換成了PHP程式碼,並儲存在快取目錄下,大家可開啟快取檔案檢視便知。
b) 使用方法:如果在新開的功能中,需要快取某部分資料,基本上就是:
1)定義並註冊快取名字。
2)從資料讀取相應的資料。
3)資料在寫入快取前作相應處理。
4)最後寫入快取。
具體操作,可以看檔案中的程式碼,做相應的修改即可
九) DZ中模板處理機制
a) DZ獨創的模板處理技術,類似於Smarty中的模板處理,只是具體演算法,過程不同,Smarty是一種重型模板引擎方案。其原理都是把模板中的變數轉換成相應的PHP程式碼,這個過程實際是模訪JAVA中的一次編譯,多處執行。
十) DZ中許可權處理機制
a) 對於DZ中前臺的每相action都有discuzaction定義,DZ根據用戶所在的用戶組來判定用戶是否具有相應操作discuz_action的許可權。至於後臺的許可權權驗證,則更簡單了,依據“admin==1”來確定的
十一) DZ中如何實現URL靜態化
a) DZ中的靜態有兩法,只要懂ReWrite規劃的朋友,一看就知。
十二) DZ獨創的HTML編輯器,如何擷取並使用,如果進行Discuz!代和Html程式碼的轉換
a) 這也算是DZ比較牛的一項技術了,在早期版中,因DZ編輯器的不足,使得很多使用者放棄了DZ。實現原理:通過JS把用的一些操作轉換成了DZ的bbcode程式碼。這樣子提交了安全性,將帶有bbcode程式碼的內容存入資料,在使用者開啟頁頁時,又把bbcode程式碼轉換成html程式碼
本貼宣告:由於時間有限,本貼只有關於DZ部分功能的簡短分析。若各位網友,對本文感興趣並想更為深入瞭解DZ,請在本貼後回貼!我將盡可能多的DZ技術分析寫在本文,不斷更新本貼內容。
部分檔案說明:
admincp.php 管理
ajax.php ajax功能
announcement.php 公告
attachment 附件
board.php 真正的首頁
config.inc.php 這個是配置檔案
corpus.php 論壇文集
digest.php 精華帖子
discuz_version.php 論壇版本號
faq.php 問題列表
forumdisplay.php 論壇列表
index.php 跳轉頁面
loggin.php 認證頁面(登入退出)
mail_config.inc.php 郵件配置
member.php 使用者操作
memcp.php 個人控制面版
misc.php 零碎功能
my.php 我的帖子
plugin.php 外掛
pm.php 簡訊
post.php 傳送帖子
redirect.php 頁面重定向
register.php 註冊
robots.txt 限制搜尋
rss.php rss資訊釋出
search.php 論壇查詢
secode.php 驗證碼
stats.php 統計
topic.php 首頁論壇專題
topicadmin 主題管理
viewpro.php 顯示個人資訊
viewthread.php 主題顯示
資料夾
admin 管理
api 介面
archiver 文件
attachments 附件
customavatars 自定義表情
forumdata 論壇資料包含緩衝資料
images 圖片
include 公共檔案
install 安裝包
ipdata ip地址
plugins 外掛
readme 幫助文件
templates 模板
utilities 工具包
wap 手機網站
資料夾include
advertisements.inc.php 廣告管理
ajax.js ajax相關
attachment.func.php 附件函式集
bbscode.js 論壇表情
cache.fun.php 快取函式集
category.inc.php 欄目
chinese.class.php
common.inc.php 最主要的標頭檔案
common.js 最主要的js檔案
corpus.func.php 論壇文集函式
counter.inc.php 論壇計數
cron.func.php 計劃任務
db_mysql.class.php 資料庫
db_mysql_error.inc.php 資料庫錯誤
debug.php 除錯資訊
discuzcode.func.php 論壇程式碼
editor.func.php 編輯器
editor.js 編輯器
editpost.inc.php 編輯帖子
floatadv.js 浮動廣告
forum.func.php 論壇函式集
global.func.php 全域性函式
menu.js 選單
misc.func.php 其它
newreply.inc.php 新回覆
newthread.inc.php 新主題
*pmprompt.inc.php
post.fun.php 發表主題
printable.inc.php 論壇列印
qihoo.js qihoo
relatethreads.inc.php 相關主題
security.inc.php 安全
sendmail.inc.php 郵件
serverbusy.htm 系統繁忙
template.func.php 模板
threadpay.inc.php 購買帖子

頁: [1]
查看完整版本: Discuz二次開發基本知識總結