你现在的位置:首页 > PHP网站建设知识库 > phpcms > 正文

phpcms的template函数分析

带大家一起分析phpcms模版机制
控制器 在进行一些 逻辑操作后 就开始渲染 视图显示 用到 template函数
所以要搞清phpcms模版机制 这个函数是必须看的

function template($module = ‘content’, $template = ‘index’, $style = ”) {
//默认模块为content.默认模版文件为index
if(strpos($module, ‘plugin/’)!== false) {
//检测模块里面是否包含plugin字符 这里进行了对插件模版的判断 插件模版需要用p_template解析
$plugin = str_replace(‘plugin/’, ”, $module);
return p_template($plugin, $template,$style);
}
$module = str_replace(‘/’, DIRECTORY_SEPARATOR, $module);
//路径兼容性处理
if(!empty($style) && preg_match(‘/([a-z0-9-_]+)/is’,$style)) {
} elseif (empty($style) && !defined(‘STYLE’)) {
//变量STYLE暂时不晓得在哪里初始化的 存在当前网站模版名
if(defined(‘SITEID’)) {
$siteid = SITEID;
} else {
$siteid = param::get_cookie(‘siteid’);
}
if (!$siteid) $siteid = 1;
$sitelist = getcache(‘sitelist’,'commons’);
if(!empty($siteid)) {
$style = $sitelist[$siteid]['default_style'];
}
} elseif (empty($style) && defined(‘STYLE’)) {
$style = STYLE;
} else {
$style = ‘default’;
}
if(!$style) $style = ‘default’;
//以上全部为判断 当前网站 应该用哪个模版 风格
$template_cache = pc_base::load_sys_class(‘template_cache’);
//载入template_cache类
$compiledtplfile = PHPCMS_PATH.’caches’.DIRECTORY_SEPARATOR.’caches_template’.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.php’;
//组合当前模块模版缓存文件地址
if(file_exists(PC_PATH.’templates’.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.html’)) {
//如果模版文件存在
if(!file_exists($compiledtplfile) || (@filemtime(PC_PATH.’templates’.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.html’) > @filemtime($compiledtplfile))) {//如果缓存文件不存在既没有编译模版 或者 模版的修改时间超过了系统设置缓存更新时间 从新编译模版缓存
$template_cache->template_compile($module, $template, $style);
}
} else {
//如果模版文件不存在
$compiledtplfile = PHPCMS_PATH.’caches’.DIRECTORY_SEPARATOR.’caches_template’.DIRECTORY_SEPARATOR.’default’.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.php’;
if(!file_exists($compiledtplfile) || (file_exists(PC_PATH.’templates’.DIRECTORY_SEPARATOR.’default’.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.html’) && filemtime(PC_PATH.’templates’.DIRECTORY_SEPARATOR.’default’.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.html’) > filemtime($compiledtplfile))) {//上面判断了模版不存在,这个时候开始判断默认模版路径对应模版是否存在,可以做到知道用默认default模版替换,如果默认的模版的 缓存 文件 不存在 或者 存在 默认的模版 但时间超过了 系统设置缓存时间 在从新编译模版
$template_cache->template_compile($module, $template, ‘default’);
} elseif (!file_exists(PC_PATH.’templates’.DIRECTORY_SEPARATOR.’default’.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.html’)) {//模版不存在
showmessage(‘Template does not exist.’.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.html’);
}
}
return $compiledtplfile;//返回编译文件
}
整个逻辑很简单 判断 稍微有点长
这里我们可以分析到 phpcms模拟为编译型的模版解析过程
template函数主要是控制 模版解析类工作 情况 整个编译 过程 由template_cache类完成,要想了解整个模版编译过程 还需要读 这个类
下次日志一起分析这个类 编译过程