HDWiki/運(yùn)行機(jī)制和原理
基本原理[ ]
HDwiki運(yùn)行機(jī)制和原理很簡單,一句話:通過傳入特定的URL以分發(fā)給相應(yīng)的控制器中某個(gè)函數(shù)進(jìn)行處理,最后將控制器處理后信息呈現(xiàn)于所包含的視圖中。
在WEB開發(fā)中,主要工作無外呼是顯示頁面和提交表單這兩個(gè)工作。因此控制器通過URL訪問來確定顯示頁面,得到信息后那么只需要顯示的視圖”。而處理表單只需要處理完后重定向或者輸出某個(gè)信息。
為了最簡單完成MVC模式開發(fā)的要求,在開發(fā)過程中,需要遵循3個(gè)規(guī)則:
1、URL中都必須帶有兩個(gè)參數(shù) ,分別是control和method,用于表明改URL將由哪一控制器及方法處理
2、表單提交中的參數(shù)統(tǒng)一被處理,防SQL注入等,在一個(gè)control的方法里面不能帶用$_POST或$_GET。如果要訪問表單提交的參數(shù),則通過$this->post['username']或 $this->get[3]類似的形式。
3、控制器類的文件名定義了控制器能做到事情,如user.php,表示這個(gè)是和用戶相關(guān)的控制器,所以注冊(cè)登錄等都應(yīng)該寫道user.php里面。這里框架設(shè)計(jì)的時(shí)候,考慮到不需要控制器去調(diào)用控制器,所以所有的控制器的類名都是相同,名字就叫做 control
另外注意linux下區(qū)分大小寫,建議統(tǒng)一使用小寫.
HDwiki運(yùn)行機(jī)制和原理[ ]
index.php文件中有兩個(gè)參數(shù)control和method,此兩個(gè)參數(shù)會(huì)交由../model/HDwiki.class.php文件以分發(fā)到user控制器中的doregister方法,也就是說control和method用來指定哪一控制器和控制器中的那個(gè)方法處理。最后將處理后的數(shù)據(jù)顯示到view下view/default/register.htm中.
如何找到HDwiki相關(guān)代碼[ ]
當(dāng)大家想改動(dòng)某個(gè)功能的代碼的時(shí)候,一定要先看清這個(gè)功能的URL。
例如:瀏覽詞條的URL為 :doc-view-1
那么,說明這個(gè)瀏覽詞條的相關(guān)代碼在 control/doc.php 里面的 doview方法。
其中URL中的第一段為doc,表明代碼在 control/doc.php 里面,第二段為view,表示調(diào)用的方法是 doview
再如:百科分類的URL為:category.html
其中URL中的第一段為category,表明代碼在 control/category.php 里面,第二段為空,表示調(diào)用的方法是默認(rèn)方法 dodefault
例子:想改動(dòng)后臺(tái)seo設(shè)置的代碼
后臺(tái)的SEO設(shè)置的url為:index.php?admin_setting-seo
那么,你就找到 control/admin_setting.php 這個(gè)文件
然后 查找 function doseo()
這個(gè)里面的代碼就是你需要改動(dòng)的地方。
開發(fā)實(shí)例[ ]
步驟:
(1)、建立注冊(cè)的模板頁面 view\default\register.htm
(2)、 打開control目錄,建立一個(gè)文件user.php,代碼內(nèi)容如下:
<?php !defined('IN_HDwiki') && exit('Access Denied'); class control extends base{ function control(& $get,& $post){ $this->base( & $get,& $post); $this->load('user'); } function doregister() { if(!isset($this->post['submit'])){ $this->view->display('register'); exit; } $user_nick=$this->post['nick_name']; $password=$this->post['password']; $this->post['re_password']; $email=$this->post['email_addr']; $_ENV['user']->add_user($user_nick, $password, $email); echo '恭喜 <b>'.$user_nick.'</b> 注冊(cè)成功!'; } } ?>
(3)、打開model目錄,建立一個(gè)文件user.class.php ,代碼內(nèi)容如下:
<?php !defined('IN_HDwiki') && exit('Access Denied'); class usermodel { var $db; var $base; function usermodel(&$base) { $this->base = $base; $this->db = $base->db; } function add_user($user_nick, $password, $email) { $password = md5($password); $user_nick_upper=strtoupper($user_nick); $this->db->query(" INSERT INTO ".DB_TABLEPRE."user(user_email,user_nick,user_nick_upper,user_password) values ('$email','$user_nick','$user_nick_upper','$password') "); return $this->db->insert_id(); } } ?>
(4)訪問: http://127.0.0.1/HDwiki/index.php?user-register 即可看到效果
注意事項(xiàng)[ ]
在control中獲得頁面提交的參數(shù)共有兩種方法:
1、$this->get[2]; //獲取get方式的參數(shù),按照數(shù)字序號(hào)
2、$this->post['username']; //獲取post的參數(shù),按照表單名字
相關(guān)調(diào)用代碼[ ]
1、獲取ip $this->ip;
2、獲取設(shè)置參數(shù) $this->setting['site_name'];
3、獲得當(dāng)前用戶 $this->user;
4、獲得語言文件變量 $this->view->lang['adduserSuccess'];
5、頁面上需要顯示時(shí)間的時(shí)候,請(qǐng)注意,需要調(diào)用date方法
while($user=$this->db->fetch_array($query)){ $user['lasttime']=$this->date($user['lasttime']); $user['regtime']=$this->date($user['regtime']); $userlist[]=$user; }
參考來源[ ]
HDWIKI使用手冊(cè)導(dǎo)航 | ||||||
---|---|---|---|---|---|---|
|