discuz代码解析(二、控制器与视图解析)
2014-08-27 20:52
148 查看
上接第一篇/article/9281678.html
home.php第10-24行,完成了一个应用的初始化,下面继续看第28-41行
链接:home.php?mod=spacecp&ac=profile&op=contact
现在进入./source/module/home/home_spacecp.php
14行 require_once libfile('function/spacecp');引入./source/function/function_spacecp.php函数库文件
15行 require_once libfile('function/magic');引入./source/function/function_magic.php函数库文件
17-26行,设置了可用的$ac和$op;$ac为操作名,$op和方法名
下面进行了一些用户的判断,没登陆的跳转,获得语言包$navtitle = lang('core', 'title_setup');
61行 require_once libfile('spacecp/'.$ac, 'include');
引入 ./source/include/spacecp/spacecp_profile.php 第14行$profilegroup = C::t('common_setting')->fetch('profilegroup', true);查询common_setting表中skey为common_setting的值,返回反序列化后的值
22行设置了$_GET['op']允许的值。
23行读取$space = getuserbyuid($_G['uid']);用户信息
读取配置信息、缓存等信息
58-286行,处理if(submitcheck('profilesubmit')){提交的表单,使用submitcheck函数处理,在函数中使用helper_form::submitcheck来进行检查,这个类在./source/class/helper/helper_form.php中,有空细看下}
286-372行,处理elseif(submitcheck('passwordsubmit', 0, $seccodecheck, $secqaacheck))修改密码的提交表单
374-399行,刚打开时$_GET['op']=='passwod'时的初处理
399-468行,刚打开时$_GET['op']!='passwod'时的初处理
471行 include template("home/spacecp_profile");这里是引入模板,位置./template/default/home/spacecp_profile.htm
template函数在function_core.php,是模板解析的函数,在函数中638行中使用checktplrefresh函数来解析模板,将模板中的标签替换成PHP代码,在checktplrefresh函数中,第500行require_once DISCUZ_ROOT.'/source/class/class_template.php';$template = new template(); 实例化了template类,并使用parse_template来解析标签,template类第115行 fwrite($fp,$template);将解析完成的模板缓存到'./data/template/'.(defined('STYLEID') ? STYLEID.'_' : '_').$templateid.'_'.str_replace('/', '_', $file).'.tpl.php'文件。
好了,至此我们看清了控制器和视图的真面目,控制器依靠 require_once libfile()来引入需要的模块和操作,转向的控制器实际上是一些函数,而操作则是一些if条件。而视图则是通过template函数来实现的,内部使用了template对象来解析模板中的标签,并将解析好的模板保存为缓存文件这样控制器和视图便完成了,而模型则是使用C::t('表名')->操作名(参数);,具体的模型存在./source/class/table/table_表名.php,处理过程在上一章中做了介绍,大家可以回去看看。好了一个完整的流程已经走完了,下一章将会介绍一个简单的插件的写法,并自己增加一个操作
转载自:http://hi.baidu.com/tong_jh/item/5ee69ffebcf59409c6dc45bd
home.php第10-24行,完成了一个应用的初始化,下面继续看第28-41行
require_once libfile( 'home/' . $mod , 'module' ); //转向控制器,关于libfile函数可以参数我写的另一篇文章 discuz常用函数说明 /article/9281677.html 这里的引用是 require_once ./source/module/home/home_$_GET['mod'].php |
现在进入./source/module/home/home_spacecp.php
14行 require_once libfile('function/spacecp');引入./source/function/function_spacecp.php函数库文件
15行 require_once libfile('function/magic');引入./source/function/function_magic.php函数库文件
17-26行,设置了可用的$ac和$op;$ac为操作名,$op和方法名
下面进行了一些用户的判断,没登陆的跳转,获得语言包$navtitle = lang('core', 'title_setup');
61行 require_once libfile('spacecp/'.$ac, 'include');
引入 ./source/include/spacecp/spacecp_profile.php 第14行$profilegroup = C::t('common_setting')->fetch('profilegroup', true);查询common_setting表中skey为common_setting的值,返回反序列化后的值
22行设置了$_GET['op']允许的值。
23行读取$space = getuserbyuid($_G['uid']);用户信息
读取配置信息、缓存等信息
58-286行,处理if(submitcheck('profilesubmit')){提交的表单,使用submitcheck函数处理,在函数中使用helper_form::submitcheck来进行检查,这个类在./source/class/helper/helper_form.php中,有空细看下}
286-372行,处理elseif(submitcheck('passwordsubmit', 0, $seccodecheck, $secqaacheck))修改密码的提交表单
374-399行,刚打开时$_GET['op']=='passwod'时的初处理
399-468行,刚打开时$_GET['op']!='passwod'时的初处理
471行 include template("home/spacecp_profile");这里是引入模板,位置./template/default/home/spacecp_profile.htm
template函数在function_core.php,是模板解析的函数,在函数中638行中使用checktplrefresh函数来解析模板,将模板中的标签替换成PHP代码,在checktplrefresh函数中,第500行require_once DISCUZ_ROOT.'/source/class/class_template.php';$template = new template(); 实例化了template类,并使用parse_template来解析标签,template类第115行 fwrite($fp,$template);将解析完成的模板缓存到'./data/template/'.(defined('STYLEID') ? STYLEID.'_' : '_').$templateid.'_'.str_replace('/', '_', $file).'.tpl.php'文件。
好了,至此我们看清了控制器和视图的真面目,控制器依靠 require_once libfile()来引入需要的模块和操作,转向的控制器实际上是一些函数,而操作则是一些if条件。而视图则是通过template函数来实现的,内部使用了template对象来解析模板中的标签,并将解析好的模板保存为缓存文件这样控制器和视图便完成了,而模型则是使用C::t('表名')->操作名(参数);,具体的模型存在./source/class/table/table_表名.php,处理过程在上一章中做了介绍,大家可以回去看看。好了一个完整的流程已经走完了,下一章将会介绍一个简单的插件的写法,并自己增加一个操作
转载自:http://hi.baidu.com/tong_jh/item/5ee69ffebcf59409c6dc45bd
相关文章推荐
- Discuz!NT 代码阅读笔记(8)--DNT的几个分页存储过程解析
- 【原】discuz! 7.2 超详细代码解析(1)
- iOS 7:用代码解决视图控制器的View整体上移问题
- iOS详细解析视图控制器的正向和逆向传值
- new 和 alloc init 的区别 和视图控制器创建到显示到屏幕上的代码执行顺序
- Discuz!NT代码阅读笔记(3)--网站安装也能自动化:DNT安装时使用到的几个函数解析
- 在OC代码中创建Swift编写的视图控制器
- discuz代码解析(一、初始化应用的过程)
- iOS 7:用代码解决视图控制器的View整体上移问题
- iOS 视图控制器(ViewController)中的代码规范
- 【原】discuz! 7.2 超详细代码解析(2)
- [IOS] 代码添加视图控制器和按钮部件
- Discuz!X模板代码解析--Header(头文件)
- iOS 7:用代码解决视图控制器的View整体上移问题
- MVC 在控制器中获取某个视图动态的HTML代码
- Discuz!NT 代码阅读笔记(9)--DNT数据库中唯一的用户函数解析
- Discuz!NT 代码阅读笔记(8.1)--DNT的几个分页存储过程解析
- 转载:discuz代码解析(一、初始化应用的过程)
- iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法
- 纯代码搭建首页,不实用storyboard作为window的根视图控制器