新手Discuz!二次開發基本知識

前言:爲方便互聯網數萬Discuz!愛好者,更加深入瞭解Discuz!軟件,本人在熟悉Discuz!過程中,順便將個人經驗寫給大家。本貼內容由本人定期更新。本貼只介紹Discuz!中部分技術點,本貼緊屬個人觀點,不足之處,請各位多多指教,在下先此謝過!。“Discuz!”在下文中簡稱“DZ”。要弄DZ二次開發,必須至少具備如下技能:
1) 能夠理很好理解MVC構架的原理(雖然DZ不是MVC架構的)
2) 紮實的PHP基礎,熟悉結構化程序,OOP程序的寫法及應用
3) 熟悉MYSQL就用,掌握SQL語言,懂SQL優化者更佳
4) 熟悉使用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). $_DCACHE
b). $_COOKIE
c). $_DCOOKIE
d). $_DSESSION
e). $_DPLUGIN
b) 可以通過print_r($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都有$discuz_action定義,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 購買帖子
6.0 結構

管理程序(後臺): admincp.php  實際上是通過調用admin文件夾下面 *.inc.php 程序實現各個功能模塊      
AJAX功能:    ajax.php
論壇公告:    announcement.php
附件相關:    attachment.php
blog.php
配置文件:    config.inc.php
      crossdomain.xml
精華帖子:    digest.php
論壇版本:    discuz_version.php
      eccredit.php
論壇Faq(問題): faq.php
內容(板塊)列表: forumdisplay.php
frame.php
首頁:     index.php
安裝程序:    install.php
      invite.php
左右分欄:    leftmenu.php
登入登出程序:   logging.php
道具商店:    magic.php
會員信息:    member.php
會員控制面板:   memcp.php
零碎功能:    misc.php
提供雙擊編輯帖子: modcp.php
【我的】功能:   my.php
插件程序:    plugin.php
論壇短信息:   pm.php
發帖程序:    post.php
頁面重定向(跳轉): redirect.php
註冊程序:    register.php
relatekw.php
回覆帖子:    relatethread.php
RSS定製:    rss.php
論壇那搜索:   search.php
驗證碼程序:   seccode.php
論壇地圖:    sitemap.php
空間:     space.php
統計:     stats.php
標籤:     tag.php
首頁論壇專題:   topic.php
主題管理     topcadmin.php
trade.php
會員個人信息:   viewpro.php
查看帖子:    viewthread.php
文件夾:
admin 管理文件夾【包含後臺各個模塊功能】
api 接口文件夾【提供和其他CMS的接口】
archiver 靜態無圖文檔文件夾
attachments 附件【前臺上傳的各種文件】
customavatars 自定義表情
forumdata 論壇備份數據和緩存
images 圖片【論壇圖片包括各個模板用到的圖片】
include 公共文件夾【dz的核心程序都在裏面】
install 安裝包
ipdata ip地址
plugins 插件文件夾【標準插件】
templates 模板文件夾
wap 手機網站文件夾
到dz6.0後 對文件夾進行了歸類 將 js 和php 分開放置
JS 統一放在 javascript 文件夾裏
個人目前 discuz 的命名規則四類文件:
.php  呵呵,直接是程序咯~
.inc.php    是相關【功能文件】 比如:newthread.inc.php  是 新主題 相關的功能
.func.php  是相關【函數文件】 比如:global.func.php 是 全局函數
.class.php 是【類文件】 比如: 對mysql操作就放在 db_mysql.class.php 文件裏
+【文件夾include 】
+【crons文件夾】
   announcements_daily.inc.php
   birthdays_daily.inc.php
   cleanup_daily.inc.php
   cleanup_monthly.inc.php
   magics_daily.inc.php
   notify_daily.inc.php
   onlinetime_monthly.inc.php
   promotions_hourly.inc.php
   secqaa_daily.inc.php
   supe_daily.inc.php
   tags_daily.inc.php
   threadexpiries_hourly.inc.php
   todayposts_daily.inc.php
+【javascript文件夾】
   ajax.js
   bbcode.js
   calender.js
   common.js
   drag.js
   drag_space.js
   editor.js
   floatadv.js
   google.js
   iframe.js
   insenz_reg.js
   menu.js
   msn.js
   post.js
   post_attach.js
   qihoo.js
   tree.js
   viewthread.js
+【magic文件夾】
   magic_close.inc.php
   magic_color.inc.php
   magic_del.inc.php
   magic_hidden.inc.php
   magic_money.inc.php
   magic_move.inc.php
   magic_open.inc.php
   magic_renew.inc.php
   magic_reporter.inc.php
   magic_see.inc.php
   magic_top.inc.php
   magic_up.inc.php
+【tables文件夾】
   big5-unicode.table
   gb-unicode.table
  
advertisements.inc.php
attachment.func.php   附件函數集
cache.func.php    緩存函數集
category.inc.php   欄目
chinese.class.php
common.inc.php    最主要的頭文件
counter.inc.php    論壇計數
cron.func.php    計劃任務
db_mysql.class.php   數據庫
db_mysql.error.inc.php 數據庫錯誤
discuzcode.func.php   論壇代碼
ec_credit.func.php
editor.func.php    編輯器
editpost.inc.php   編輯帖子
forum.func.php    論壇函數集
ftp.func.php
gifmerge.class.php
global.func.php    全局函數
image.class.php
insenz.func.php
insenz_cron.func.php
magic.func.php   
misc.func.php    其它
moderatio.inc.php
newrepley.inc.php   新回覆
newthread.inc.php   新主題
newtrade.inc.php   新活動
pprompt.inc.php
post.func.php    發表主題
printable.inc.php   論壇打印
promotion.inc.php
search_qihoo.inc.php
search_trade.inc.php
search_type.inc.php
security.inc.php   安全
sendmail.inc.php   郵件
serverbusy.htm    系統繁忙
space.func.php
supesite.func.php
supesite_circle.inc.php
supesite_import.inc.php
temple.func.php    模板
treadpay.inc.php   購買帖子
viewpro.inc.php    個人信息
viewthread_activity.inc.php   活動主題
viewthread_debate.inc.php   辯論主題
viewthread_poll.inc.php    投票主題
viewthread_reward.inc.php   懸賞主題
viewthread_special.inc.php   活動主題
viewthread_trade.inc.php   商品主題
viewthread_video.inc.php   視頻主題
xmlparser.class.php
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章