静态页面的生成
index.php文件
在index.php中一旦get传递一个upcache变量或者是文件index.html不存在时候,就开发生成静态文件。
然后执行如下代码:
require_once (dirname(__FILE__) . "/include/common.inc.php");
require_once DEDEINC."/arc.partview.class.php";
$GLOBALS['_arclistEnv'] = 'index';
$row = $dsql->GetOne("Select * From `#@__homepageset`");
$row['templet'] = MfTemplet($row['templet']);
$pv = new PartView();
$pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);
$row['showmod'] = isset($row['showmod'])? $row['showmod'] : 0;
if ($row['showmod'] == 1)
{
$pv->SaveToHtml(dirname(__FILE__).'/index.html');
include(dirname(__FILE__).'/index.html');
exit();
} else {
$pv->Display();
exit();
}
引入common.inc.php文件
1.定义错误报告级别
2.定义系统常量
如根目录以及include、data等目录名
3.判断是否禁用了自动注册全局变量
4.检查和注册外部提交的变量
主要是过滤一些变量,如cfg_或者是globals开头的变量。
5.判断是否开启了mb_string扩展库。
如是否可以使用mb_substr、iconv_substr分别代替使用substr、iconv。
6.如果没有开启magic_quotes_gpc自动过滤post、get、cookie中的数据,则调用函数过滤
7.系统相关变量检测
8.Session保存路径设置
9.引入系统配置参数(data/config.cache.inc.php)
10.如果有上传文件,对上传文件进行相应的处理
11.引入数据库配置文件
12.载入系统验证安全配置
require_once(DEDEDATA."/config.cache.inc.php");
13.Session跨域设置
14.时区设置
date_default_timezone_set
15.定义一下文件目录变量
16.文档的默认命名规则
17.定义特殊全局变量
18.对全局分页传递参数进行过滤
19.设定缓存配置信息
20.自动加载类库处理
phpcms自动加载类,仍然使用的是__autoload函数
21.引入数据库类
if ($GLOBALS['cfg_mysql_type'] == 'mysqli' && function_exists("mysqli_init"))
{
require_once(DEDEINC.'/dedesqli.class.php');
} else {
require_once(DEDEINC.'/dedesql.class.php');
}
22.引入全局常用函数
require_once(DEDEINC.'/common.func.php');
在查看common.func.php代码可以发现,在该文件中又引入了扩展函数文件include/extend.func.php。
23.引入模块MVC框架需要的控制器和模型基类
require_once(DEDEINC.'/control.class.php');
require_once(DEDEINC.'/model.class.php');
24.引入data/helper.inc.php,调用helper函数,导入include/helpers文件夹下面的一些工具类
引入/include/arc.partview.class.php文件
在arc.partview.class.php文件中进行如下操作
引入/include/channelunit.class.php
引入/include/dedetag.class.php
其中定义了标签类(DedeTag)、标签解析类(DedeTagParse)、属性类(DedeAttribute)、属性解析类(DedeAttributeParse)
引入/include/channelunit.func.php
定义一些数组,做映射
定义频道模型单元类(ChannelUnit)
引入/include/typelink.class.php
在typelink.class.php文件中进行了如下操作:
引入/include/channelunit.func.php
定义栏目连接类(TypeLink)
引入/include/ftp.class.php
在该文件中定了定义FTP 操作类(FTP)
定义了视图类(PartView)
定义全局变量_arclistEnv
$GLOBALS['_arclistEnv'] = 'index';
获取#@__homepageset表中第一条数据,并进行相应的过滤
$row = $dsql->GetOne("Select * From `#@__homepageset`");
$row['templet'] = MfTemplet($row['templet']);
实例化视图类PartView
在构造函数里面,初始化了一些了变量。
接下来流程
简单说就是设置模板路径,加载生成html文件。
设置模板
调用了PartView对象的SetTemplet方法。在该方法中,调用了DedeTagParse对象的LoadTemplet或者LoadSource方法加载模板。然后在调用PartView对象的ParseTemplet方法进行解析。
—–待续——-