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

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

/**
 * 模板调用
 *
 * @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;
}