本文非教程文章,只是對(duì)HDWIKI框架結(jié)構(gòu)有一個(gè)簡(jiǎn)要的說明。
熟悉HDWIKI代碼的和不想接觸HDWIKI代碼的可以掠過
目錄結(jié)構(gòu):
control 所有的控制器
data 日志文件、備份、緩存等文件存放。
install 安裝文件
js JS文件
lang 語(yǔ)言文件 包含所有公共固定的文字顯示,開發(fā)多語(yǔ)言版本,修改里面變量就好,不用開發(fā)多套模板
lib 主類文件存放 例如: 模板、郵件、字符串等··
model 服務(wù)(或者是應(yīng)用)對(duì)應(yīng)類文件存放
plugins 第三那方插件 目前集成 UCENTER
style 樣式文件
uploads 上傳文件存放 新上傳圖片,按月份散列文件夾
view 模板文件
項(xiàng)目流程:
項(xiàng)目以根目錄下index.php文件為入口文件。包入model/hdwiki.class.php 這個(gè)主文件,同時(shí)此文件包含 /config.php 、/lib/string.class.php 、/model/base.class.php 這三個(gè)重要文件
在hdwiki.class.php 中分析URL,根據(jù)情況調(diào)入需要的控制器和方法。
拆分鏈接用 INDEX.PHP?之后的字符串,‘-’號(hào)分隔,依次為: 控制器名稱–方法名–條目號(hào)。 根據(jù)獲得的控制器名稱,用 load_control()函數(shù) 包含入需要得到控制器,如: control/控制器名稱.PHP
在 run() 中調(diào)用控制器中方法
控制器都是繼承 /model/base.class.php 的類。程序執(zhí)行后,bash() 初始化網(wǎng)站必要的信息,比如:時(shí)間、數(shù)據(jù)庫(kù)、緩存、用戶信息、模板、全局用到的方法等,
然后在控制器中用 load() 函數(shù)來(lái)調(diào)用對(duì)應(yīng)服務(wù)的類。應(yīng)用時(shí)傳入服務(wù)名稱即可,例如:load(‘category’) 即可調(diào)用 model/category.class.php 并初始化此類,同時(shí)將類和base()中獲得的信息裝入 $_ENV['category'] ,以備調(diào)用
在調(diào)用bash的時(shí)候,已經(jīng)初始化了模板文件,“lib\template.class.php” 在頁(yè)面中用 $this->view() 調(diào)用,使用方法類似 smarty,只是所有函數(shù)均封裝在 lib\template.class.php 中
通過模板賦值函數(shù) $this->view->assign() 賦值后,$this->view->display() 這個(gè)函數(shù)可以調(diào)用模板函數(shù)編譯模板并最終展現(xiàn)頁(yè)面 ,頁(yè)面路徑在 bash的$this->init_template() 中定義,而且此處不用寫路徑和文件擴(kuò)展名
一個(gè)URL過來(lái)后,項(xiàng)目執(zhí)行流程:
通過 ‘?’ 后字符串,hdwiki.class.php 中函數(shù)調(diào)用相應(yīng)的控制器,run函數(shù)執(zhí)行控制器,并調(diào)用相應(yīng)方法。
拆分鏈接用 INDEX.PHP?之后的字符串,‘-’號(hào)分隔,依次為: 控制器名稱–方法名–條目號(hào)。
控制器通過構(gòu)造函數(shù),傳入相應(yīng)參數(shù),獲得BASH提供的基本信息,以及調(diào)用指定的類(服務(wù)),然后根據(jù)調(diào)用的方法,執(zhí)行相應(yīng)方法
頁(yè)面數(shù)據(jù)賦值,編譯并最終顯示
hdwiki.class.php 和 base.class.php 類的說明:
hdwiki.class.php 主要用于分析 url,調(diào)用指定控制器文件,執(zhí)行相應(yīng)函數(shù)。
base.class.php 初始化信息 數(shù)據(jù)庫(kù)連接、緩存、用戶信息、模板信息。所有控制器繼承這個(gè)類
用戶登陸:
會(huì)用到control/user.php 這個(gè)控制器和 model/user.class.php 這個(gè)類
用戶執(zhí)行登陸操作前,在頁(yè)面會(huì)判斷用戶名和密碼。其中用戶名會(huì)用AJAX去庫(kù)中判斷,在控制器中 checkusername 這個(gè)方法進(jìn)行判斷,在user 表中用 username 進(jìn)行判斷,如果庫(kù)中沒有,則去UCENTER 中尋找。返回可用或者用戶名不存在
點(diǎn)擊登陸,調(diào)用 dologin() 這個(gè)函數(shù),根據(jù)用戶名,通過 表user 中username 字段獲得用戶信息,然后在返回信息中匹配 密碼,匹配成功則登陸成功
如果登陸時(shí)間超過一天,則重新調(diào)用 add_credit() 添加用戶登陸記錄 (creditdetail) 更新 user 表中 credit2(經(jīng)驗(yàn)) 和 credit1。獲得用戶組在 usergroup,?
然后分別調(diào)用 update_user() 更新最后登陸時(shí)間,refresh_user () 更新SESSION、 更新cookie
在 usergroup 中獲得用戶頭銜 。在用戶信息中 獲得 創(chuàng)建詞條數(shù),人氣指數(shù),編輯詞條等
最后還范圍頁(yè)面頂端登陸信息
如何新開發(fā)一個(gè)應(yīng)用?
添加新的應(yīng)用,需要在在 control/下添加控制器,model/下添加應(yīng)用需要的類,view/default/ 下添加需要的頁(yè)面。
注意文件名和方法名。 假設(shè),新添加服務(wù)名字為: services 控制器文件名為:control/services.php 。 這個(gè)類須是 bash 的繼承類 其中,每個(gè)方法名要加 do 前綴。例如 function dodefault() {};
服務(wù)類文件名為 model/services.class.php 類名字為 servicesmodel {}; 其中的方法名無(wú)特別前綴
怎樣調(diào)用model的?
在控制器中建立一個(gè)構(gòu)造函數(shù):
function control(& $get,& $post){
$this->base( & $get,& $post);
$this->load(‘services’);
}
即可!新建的類封裝在 $_ENV['services'] 中。