HDWiki/运行机制和原理
基本原理[ ]
HDwiki运行机制和原理很简单,一句话:通过传入特定的URL以分发给相应的控制器中某个函数进行处理,最后将控制器处理后信息呈现于所包含的视图中。
在WEB开发中,主要工作无外呼是显示页面和提交表单这两个工作。因此控制器通过URL访问来确定显示页面,得到信息后那么只需要显示的视图”。而处理表单只需要处理完后重定向或者输出某个信息。
为了最简单完成MVC模式开发的要求,在开发过程中,需要遵循3个规则:
1、URL中都必须带有两个参数 ,分别是control和method,用于表明改URL将由哪一控制器及方法处理
2、表单提交中的参数统一被处理,防SQL注入等,在一个control的方法里面不能带用$_POST或$_GET。如果要访问表单提交的参数,则通过$this->post['username']或 $this->get[3]类似的形式。
3、控制器类的文件名定义了控制器能做到事情,如user.php,表示这个是和用户相关的控制器,所以注册登录等都应该写道user.php里面。这里框架设计的时候,考虑到不需要控制器去调用控制器,所以所有的控制器的类名都是相同,名字就叫做 control
另外注意linux下区分大小写,建议统一使用小写.
HDwiki运行机制和原理[ ]
index.php文件中有两个参数control和method,此两个参数会交由../model/HDwiki.class.php文件以分发到user控制器中的doregister方法,也就是说control和method用来指定哪一控制器和控制器中的那个方法处理。最后将处理后的数据显示到view下view/default/register.htm中.
如何找到HDwiki相关代码[ ]
当大家想改动某个功能的代码的时候,一定要先看清这个功能的URL。
例如:浏览词条的URL为 :doc-view-1
那么,说明这个浏览词条的相关代码在 control/doc.php 里面的 doview方法。
其中URL中的第一段为doc,表明代码在 control/doc.php 里面,第二段为view,表示调用的方法是 doview
再如:百科分类的URL为:category.html
其中URL中的第一段为category,表明代码在 control/category.php 里面,第二段为空,表示调用的方法是默认方法 dodefault
例子:想改动后台seo设置的代码
后台的SEO设置的url为:index.php?admin_setting-seo
那么,你就找到 control/admin_setting.php 这个文件
然后 查找 function doseo()
这个里面的代码就是你需要改动的地方。
开发实例[ ]
步骤:
(1)、建立注册的模板页面 view\default\register.htm
(2)、 打开control目录,建立一个文件user.php,代码内容如下:
<?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> 注册成功!'; } } ?>
(3)、打开model目录,建立一个文件user.class.php ,代码内容如下:
<?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 即可看到效果
注意事项[ ]
在control中获得页面提交的参数共有两种方法:
1、$this->get[2]; //获取get方式的参数,按照数字序号
2、$this->post['username']; //获取post的参数,按照表单名字
相关调用代码[ ]
1、获取ip $this->ip;
2、获取设置参数 $this->setting['site_name'];
3、获得当前用户 $this->user;
4、获得语言文件变量 $this->view->lang['adduserSuccess'];
5、页面上需要显示时间的时候,请注意,需要调用date方法
while($user=$this->db->fetch_array($query)){ $user['lasttime']=$this->date($user['lasttime']); $user['regtime']=$this->date($user['regtime']); $userlist[]=$user; }
参考来源[ ]
HDWIKI使用手册导航 | ||||||
---|---|---|---|---|---|---|
|