您的位置:首页 > 编程语言 > PHP开发

【phpcms-v9】phpcms-v9中模板载入函数template详解

2012-11-28 12:18 405 查看
/**

 * 模板调用

 *

 * @param $module

 * @param $template

 * @param $istag

 * @return unknown_type

 */

function template($module = 'content', $template = 'index', $style = '') {

if(strpos($module, 'plugin/')!== false) { //一般情况下不会执行if里面的代码
$plugin = str_replace('plugin/', '', $module);
return p_template($plugin, $template,$style);
}
$module = str_replace('/', DIRECTORY_SEPARATOR, $module);
//将前者替换为后者,一般情况下$module中不会出现分隔符
//第一种情况:模板风格参数3不为空的情况
if(!empty($style) && preg_match('/([a-z0-9\-_]+)/is',$style)) {//如果模板风格不为空,即:参数3不为空的情况

//第二种情况:模板风格参数3为空,并且在添加栏目时未指定模板风格的情况,将获取站点中设置的模板风格
} elseif (empty($style) && !defined('STYLE')) {
  //两个条件:1.如果模板风格为空,即,参数3为空  2.如果模板风格常量也未定义
if(defined('SITEID')) {
  //如果站点id常量SITEID被定义过,那么将常量中的站点id作为当前站点id
$siteid = SITEID;
  //注意:SITEID与STYLE常量的定义最有可能的地方是在当前控制器文件中
} else {
$siteid = param::get_cookie('siteid');
   //从cookie中获取站点id
}
if (!$siteid) $siteid = 1;
//如果获取不到站点id,则设置默认站点id值为1
$sitelist = getcache('sitelist','commons');
//站点缓存文件:获取站点缓存文件中所有站点的详细配置信息
if(!empty($siteid)) {
//如果站点id不为空
$style = $sitelist[$siteid]['default_style'];
//获取当前站点下的默认模板风格,即:在设置站点信息时选择的模板风格
}
//第三种情况:模板风格参数3为空,并且在添加栏目时指定了模板风格的情况,将获取添加栏目时指定的模板风格
} elseif (empty($style) && defined('STYLE')) {
//两个条件:1.参数3为空   2.模板风格常量在控制器中定义
$style = STYLE;
//第四种情况:默认模板风格
//将控制器中定义的模板风格常量作为当前模板风格
} else {
//STYLE:添加栏目时选择的模板风格
$style = 'default';
//默认模板风格
}
if(!$style) $style = 'default';
$template_cache = pc_base::load_sys_class('template_cache');//模板解析类,路径:phpcms/libs/classes/template_cache.class.php
//编译文件缓存路径:根目录/caches/caches_template/default/content/index.php
$compiledtplfile = PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_template'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.php';
//路径:phpcms/templates/dafault/content/index.html ,如:首页模板文件
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);//适用模板风格不是default的情况
}
} else {
//编译文件缓存路径:根目录/caches/caches_template/default/content/index.php
$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))) {
//重新编译
$template_cache->template_compile($module, $template, 'default');//适用于模板风格为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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: