產(chǎn)品框架

目錄結(jié)構(gòu)

目錄結(jié)構(gòu)

推薦視頻教程----->Discuz插件開發(fā)實戰(zhàn)視頻  Discuz模板制作視頻教程(實戰(zhàn)篇)

下面是Discuz! 的文件目錄及對應(yīng)的描述。日常的開發(fā)中主要會涉及到source和template目錄。雖然目錄和文件都很多,但是實際上結(jié)構(gòu)還是很清晰,大多數(shù)情況下通過文件名和目錄就能知道某個文件的作用。比如:

	\source\class\discuz\discuz_censor.php  用來處理敏感詞過濾的類
	\source\function\function_credit.php  處理積分操作的函數(shù)庫
	\source\module\forum\forum_viewthread.php 處理帖子顯示頁面的模塊
另外,source目錄下的class、function、module、include、admincp這幾個文件夾下的程序文件命名要遵守如下規(guī)則:文件名前綴為所在目錄的名字加上下劃線(_)

目錄結(jié)構(gòu)詳細(xì):
/┬── api 外部接口
 │      ├── connect	騰訊互聯(lián)
 │      ├── db	UCenter數(shù)據(jù)庫備份接口
 │      ├── google	Google引擎使用
 │      ├── javascript	數(shù)據(jù)和廣告的 JS調(diào)用
 │      ├── manyou	manyou應(yīng)用及搜索等相關(guān)服務(wù)
 │      └── trade	在線支付接口
 ├── archiver	論壇靜態(tài)化
 ├── config	站點配置文件
 ├── data	數(shù)據(jù)緩存及附件
 │      ├── attachment	上傳的文件目錄
 │      │      ├── album	相冊專用
 │      │      ├── block	DIY專用
 │      │      ├── common	公共上傳
 │      │      ├── forum	論壇附件專用
 │      │      ├── group	群組圖標(biāo)和頭部圖片專用
 │      │      ├── portal	門戶上傳文件專用
 │      │      ├── profile	個人資料專用
 │      │      └── temp	臨時文件
 │      ├── avatar	視頻認(rèn)證專用
 │      ├── backup	站點數(shù)據(jù)備份
 │      ├── cache	數(shù)據(jù)緩存
 │      ├── diy	DIY模塊緩存
 │      ├── ipdata	Discuz!IP庫
 │      ├── log	站點日志,前/后臺管理日志、錯誤日志等
 │      ├── plugindata	插件緩存數(shù)據(jù)
 │      ├── template	模板緩存目錄
 │      └── threadcache	帖子緩存
 ├── install 安裝目錄
 ├── source 代碼主目錄
 │      ├── admincp	后臺程序
 │      │      ├── cloud	Discuz!云平臺
 │      │      ├── menu	菜單
 │      │      └── moderate	審核功能
 │      ├── archiver	論壇靜態(tài)化功能代碼
 │      ├── class	類文件目錄
 │      │      ├── adv	站點廣告功能
 │      │      ├── block	DIY模塊功能文件
 │      │      ├── cache	緩存類
 │      │      ├── db	數(shù)據(jù)庫類
 │      │      ├── discuz	discuz類
 │      │      ├── forum	論壇
 │      │      ├── helper	存放從function_core分離出來的一部分函數(shù)
 │      │      ├── lib	工具類的集合類
 │      │      ├── magic	道具
 │      │      ├── memory	內(nèi)存類
 │      │      ├── secqaa	驗證問答
 │      │      ├── table	數(shù)據(jù)表操作類
 │      │      └── task	站點任務(wù)功能
 │      ├── function	函數(shù)文件
 │      │      └── cache	緩存功能拆分目錄
 │      ├── include	被包含的文件
 │      │      ├── collection	淘帖
 │      │      ├── cron	計劃任務(wù)
 │      │      ├── misc	雜項
 │      │      ├── modcp	前臺論壇管理
 │      │      ├── portalcp	前臺門戶管理
 │      │      ├── post	帖子相關(guān)
 │      │      ├── search	搜索功能
 │      │      ├── space	家園和個人相關(guān)功能
 │      │      ├── spacecp	個人設(shè)置相關(guān)
 │      │      ├── table	編碼轉(zhuǎn)換數(shù)據(jù)
 │      │      ├── thread	查看主題相關(guān)
 │      │      └── topicadmin	前臺主題管理
 │      ├── language	站點語言包
 │      │      ├── adv	廣告
 │      │      ├── block	DIY模塊
 │      │      ├── forum	論壇
 │      │      ├── group	群組
 │      │      ├── home	家園
 │      │      ├── magic	道具
 │      │      ├── member	登錄注冊頁面語言
 │      │      ├── mobile	手機(jī)訪問功能語言
 │      │      ├── portal	門戶語言
 │      │      ├── ranklist	排行榜語言
 │      │      ├── search	搜索
 │      │      ├── secqaa	安全問答
 │      │      ├── tag	標(biāo)簽
 │      │      ├── task	任務(wù)
 │      │      └── userapp	manyou應(yīng)用
 │      ├── module	功能模塊
 │      │      ├── connect	騰訊互聯(lián)
 │      │      ├── forum	論壇
 │      │      ├── group	群組
 │      │      ├── home	家園
 │      │      ├── member	登錄注冊
 │      │      ├── misc	雜項
 │      │      ├── portal	門戶
 │      │      ├── search	搜索
 │      │      └── userapp	應(yīng)用
 │      └── plugin	插件目錄
 │              ├── cloudstat	Discuz!云平臺
 │              ├── myapp	Manyou應(yīng)用
 │              ├── myrepeats	馬甲功能
 │              ├── qqconnect	騰訊互聯(lián)
 │              └── soso_smilies	騰訊搜搜表情
 ├── static	非PHP文件
 │      ├── image	界面圖片
 │      ├── js	站點JS腳本
 │      ├── space	空間皮膚
 │      └── topic	門戶皮膚
 ├── template	模板目錄
 │      └── default	默認(rèn)風(fēng)格
 ├── uc_client	UCenter客戶端程序
 └── uc_server	UCenter服務(wù)端程序

自動加載

Discuz! X2.5要求PHP版本大于5.1,拋棄了對PHP4的支持,因此支持更多的PHP新特性,自動加載類文件就是其中一個。在class_core.php中有這樣一段代碼:

if(function_exists('spl_autoload_register')) {
	spl_autoload_register(array('core', 'autoload'));
} else {
	function __autoload($class) {
		return core::autoload($class);
	}
}

當(dāng)調(diào)用不存在的類的時候就會調(diào)用core::autoload方法來加載相應(yīng)的類文件。所以我們在開發(fā)的過程中就要用到某個類的時候就不需要include或者require了。只要對應(yīng)的類文件存在,并且命名符合規(guī)范,直接調(diào)用即可。
注意:產(chǎn)品中個別特殊類由于歷史原因無法實現(xiàn)自動加載,需手動處理 include或require

class_core.php 流程控制的說明

class_core.php是入口啟動文件,主要實現(xiàn)了以下功能:

  • 注冊 autoload 方法和異常處理方法:具體參見自動加載
  • C::t 方法的實現(xiàn):通過 C::t 方法來調(diào)用數(shù)據(jù)層對應(yīng)表的對象來實現(xiàn)對數(shù)據(jù)的操作
  • memory 的初始化:主要由 discuz_memory 類來實現(xiàn)
  • 創(chuàng)建 discuz_application 實例 ( discuz_application 是原來 discuz! X2 的 discuz_core):進(jìn)行核心的初始化操作,主要有加載配置文件、加載環(huán)境變量、連接數(shù)據(jù)庫、加載setting信息、初始化用戶數(shù)據(jù)、session的初始、計劃任務(wù)等
  • 簡寫類的映射:將 class core 映射為 C,discuz_database 映射為 DB,僅為方便使用,代碼如下
class C extends core {}
class DB extends discuz_database {}

更多相關(guān):
1、Discuz! X2.5 程序目錄結(jié)構(gòu)注釋說明
2、Discuz模板中插件嵌入點顯示位置的注釋圖
3、Discuz x2.5 模板文件中的插件鉤子(插件嵌入點)
4、Discuz! 插件開發(fā)實例講解(抽獎插件)

返回頂部