// +---------------------------------------------------------------------- // $Id$ /** +------------------------------------------------------------------------------ * Think模板引擎解析类 +------------------------------------------------------------------------------ * @category Think * @package Think * @subpackage Util * @author liu21st * @version $Id$ +------------------------------------------------------------------------------ */ class TemplateThink { /** +---------------------------------------------------------- * 渲染模板输出 +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $templateFile 模板文件名 * @param array $var 模板变量 * @param string $charset 模板输出字符集 * @param string $varPrefix 模板变量前缀 +---------------------------------------------------------- * @return void +---------------------------------------------------------- */ public function fetch($templateFile,$var,$charset) { if(!$this->checkCache($templateFile)) { // 缓存无效 重新编译 $tpl = Think::instance('ThinkTemplate'); // 编译并加载模板文件 $tpl->load($templateFile,$var,$charset); }else{ // 缓存有效 直接载入模板缓存 // 模板阵列变量分解成为独立变量 extract($var, EXTR_OVERWRITE); //载入模版缓存文件 include C('CACHE_PATH').md5($templateFile).C('TMPL_CACHFILE_SUFFIX'); } } /** +---------------------------------------------------------- * 检查缓存文件是否有效 * 如果无效则需要重新编译 +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $tmplTemplateFile 模板文件名 +---------------------------------------------------------- * @return boolen +---------------------------------------------------------- */ protected function checkCache($tmplTemplateFile) { if (!C('TMPL_CACHE_ON')) // 优先对配置设定检测 return false; $tmplCacheFile = C('CACHE_PATH').md5($tmplTemplateFile).C('TMPL_CACHFILE_SUFFIX'); if(!is_file($tmplCacheFile)) return false; elseif (filemtime($tmplTemplateFile) > filemtime($tmplCacheFile)) { // 模板文件如果有更新则缓存需要更新 return false; } elseif (C('TMPL_CACHE_TIME') != -1 && time() > filemtime($tmplCacheFile)+C('TMPL_CACHE_TIME')) { // 缓存是否在有效期 return false; } //缓存有效 return true; } } ?>