本文非教程文章,只是对HDWIKI框架结构有一个简要的说明。
熟悉HDWIKI代码的和不想接触HDWIKI代码的可以掠过
目录结构:
control 所有的控制器
data 日志文件、备份、缓存等文件存放。
install 安装文件
js JS文件
lang 语言文件 包含所有公共固定的文字显示,开发多语言版本,修改里面变量就好,不用开发多套模板
lib 主类文件存放 例如: 模板、邮件、字符串等··
model 服务(或者是应用)对应类文件存放
plugins 第三那方插件 目前集成 UCENTER
style 样式文件
uploads 上传文件存放 新上传图片,按月份散列文件夹
view 模板文件
项目流程:
项目以根目录下index.php文件为入口文件。包入model/hdwiki.class.php 这个主文件,同时此文件包含 /config.php 、/lib/string.class.php 、/model/base.class.php 这三个重要文件
在hdwiki.class.php 中分析URL,根据情况调入需要的控制器和方法。
拆分链接用 INDEX.PHP?之后的字符串,‘-’号分隔,依次为: 控制器名称–方法名–条目号。 根据获得的控制器名称,用 load_control()函数 包含入需要得到控制器,如: control/控制器名称.PHP
在 run() 中调用控制器中方法
控制器都是继承 /model/base.class.php 的类。程序执行后,bash() 初始化网站必要的信息,比如:时间、数据库、缓存、用户信息、模板、全局用到的方法等,
然后在控制器中用 load() 函数来调用对应服务的类。应用时传入服务名称即可,例如:load(‘category’) 即可调用 model/category.class.php 并初始化此类,同时将类和base()中获得的信息装入 $_ENV['category'] ,以备调用
在调用bash的时候,已经初始化了模板文件,“lib\template.class.php” 在页面中用 $this->view() 调用,使用方法类似 smarty,只是所有函数均封装在 lib\template.class.php 中
通过模板赋值函数 $this->view->assign() 赋值后,$this->view->display() 这个函数可以调用模板函数编译模板并最终展现页面 ,页面路径在 bash的$this->init_template() 中定义,而且此处不用写路径和文件扩展名
一个URL过来后,项目执行流程:
通过 ‘?’ 后字符串,hdwiki.class.php 中函数调用相应的控制器,run函数执行控制器,并调用相应方法。
拆分链接用 INDEX.PHP?之后的字符串,‘-’号分隔,依次为: 控制器名称–方法名–条目号。
控制器通过构造函数,传入相应参数,获得BASH提供的基本信息,以及调用指定的类(服务),然后根据调用的方法,执行相应方法
页面数据赋值,编译并最终显示
hdwiki.class.php 和 base.class.php 类的说明:
hdwiki.class.php 主要用于分析 url,调用指定控制器文件,执行相应函数。
base.class.php 初始化信息 数据库连接、缓存、用户信息、模板信息。所有控制器继承这个类
用户登陆:
会用到control/user.php 这个控制器和 model/user.class.php 这个类
用户执行登陆操作前,在页面会判断用户名和密码。其中用户名会用AJAX去库中判断,在控制器中 checkusername 这个方法进行判断,在user 表中用 username 进行判断,如果库中没有,则去UCENTER 中寻找。返回可用或者用户名不存在
点击登陆,调用 dologin() 这个函数,根据用户名,通过 表user 中username 字段获得用户信息,然后在返回信息中匹配 密码,匹配成功则登陆成功
如果登陆时间超过一天,则重新调用 add_credit() 添加用户登陆记录 (creditdetail) 更新 user 表中 credit2(经验) 和 credit1。获得用户组在 usergroup,?
然后分别调用 update_user() 更新最后登陆时间,refresh_user () 更新SESSION、 更新cookie
在 usergroup 中获得用户头衔 。在用户信息中 获得 创建词条数,人气指数,编辑词条等
最后还范围页面顶端登陆信息
如何新开发一个应用?
添加新的应用,需要在在 control/下添加控制器,model/下添加应用需要的类,view/default/ 下添加需要的页面。
注意文件名和方法名。 假设,新添加服务名字为: services 控制器文件名为:control/services.php 。 这个类须是 bash 的继承类 其中,每个方法名要加 do 前缀。例如 function dodefault() {};
服务类文件名为 model/services.class.php 类名字为 servicesmodel {}; 其中的方法名无特别前缀
怎样调用model的?
在控制器中建立一个构造函数:
function control(& $get,& $post){
$this->base( & $get,& $post);
$this->load(‘services’);
}
即可!新建的类封装在 $_ENV['services'] 中。