public function fetch($templateFile, $var, $charset, $varPrefix) { if (!$this->checkCache($templateFile)) { import('Think.Template.ThinkTemplate'); $tpl = ThinkTemplate::getInstance(); $tpl->load($templateFile, $charset, $var, $varPrefix); } else { extract($var, empty($varPrefix) ? EXTR_OVERWRITE : EXTR_PREFIX_ALL, $varPrefix); include CACHE_PATH . md5($templateFile) . C('CACHFILE_SUFFIX'); } }
/** +---------------------------------------------------------- * 渲染模板输出 +---------------------------------------------------------- * @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)) { // 缓存无效 重新编译 import('ThinkTemplate'); $tpl = ThinkTemplate::getInstance(); // 编译并加载模板文件 $tpl->load($templateFile, $var, $charset); } else { // 缓存有效 直接载入模板缓存 // 模板阵列变量分解成为独立变量 extract($var, EXTR_OVERWRITE); //载入模版缓存文件 include CACHE_PATH . md5($templateFile) . C('CACHFILE_SUFFIX'); } }
public function __construct($tagLib = '', $filename = '') { if (empty($tagLib)) { $tagLib = strtolower(substr(get_class($this), 6)); } $this->tagLib = $tagLib; $this->tpl = ThinkTemplate::getInstance(); if (!empty($filename)) { $this->xml = $filename; } else { $this->xml = dirname(__FILE__) . '/Tags/' . $tagLib . '.xml'; } if (method_exists($this, '_initialize')) { $this->_initialize(); } $this->load(); }
/** +---------------------------------------------------------- * 架构函数 +---------------------------------------------------------- * @access public +---------------------------------------------------------- */ public function __construct() { $this->tagLib = strtolower(substr(get_class($this), 6)); $this->tpl = ThinkTemplate::getInstance(); $this->_initialize(); $this->load(); }
/** +---------------------------------------------------------- * 加载模板和页面输出 +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $templateFile 模板文件名 留空为自动获取 * @param string $charset 模板输出字符集 * @param string $contentType 输出类型 * @param string $varPrefix 模板变量前缀 * @param integer $mode 0 返回 1 输出 2 下载 +---------------------------------------------------------- * @throws ThinkExecption +---------------------------------------------------------- */ public function fetch($templateFile = '', $charset = '', $contentType = 'text/html', $varPrefix = '', $display = false) { $startTime = microtime(TRUE); if (null === $templateFile) { // 使用null参数作为模版名直接返回不做任何输出 return; } if ('layout::' == substr($templateFile, 0, 8)) { $this->layout(substr($templateFile, 8)); return; } if (empty($charset)) { $charset = C('OUTPUT_CHARSET'); } // 网页字符编码 header("Content-Type:" . $contentType . "; charset=" . $charset); header("Cache-control: private"); //支持页面回跳 // 设置输出缓存 ini_set('output_buffering', 4096); $zlibCompress = ini_get('zlib.output_compression'); if (empty($zlibCompress) && function_exists('ini_set')) { ini_set('zlib.output_compression', 1); } $pluginOn = C('THINK_PLUGIN_ON'); if ($pluginOn) { // 缓存初始化过滤 apply_filter('ob_init'); } //页面缓存 ob_start(); ob_implicit_flush(0); if ($pluginOn) { // 缓存开启后执行的过滤 apply_filter('ob_start'); // 模版文件名过滤 $templateFile = apply_filter('template_file', $templateFile); } if ('' == $templateFile) { // 如果模板文件名为空 按照默认规则定位 $templateFile = C('TMPL_FILE_NAME'); } elseif (strpos($templateFile, '@')) { // 引入其它主题的操作模板 必须带上模块名称 例如 blue@User:add $templateFile = TMPL_PATH . str_replace(array('@', ':'), '/', $templateFile) . C('TEMPLATE_SUFFIX'); } elseif (strpos($templateFile, ':')) { // 引入其它模块的操作模板 $templateFile = TEMPLATE_PATH . '/' . str_replace(':', '/', $templateFile) . C('TEMPLATE_SUFFIX'); } elseif (!file_exists($templateFile)) { // 引入当前模块的其它操作模板 $templateFile = dirname(C('TMPL_FILE_NAME')) . '/' . $templateFile . C('TEMPLATE_SUFFIX'); } if (!file_exists_case($templateFile)) { throw_exception(L('_TEMPLATE_NOT_EXIST_') . '[' . $templateFile . ']'); } if ($pluginOn) { // 模版变量过滤 $this->tVar = apply_filter('template_var', $this->tVar); } $compiler = false; //根据不同模版引擎进行处理 if ('PHP' == $this->type || empty($this->type)) { // 模板阵列变量分解成为独立变量 extract($this->tVar, empty($varPrefix) ? EXTR_OVERWRITE : EXTR_PREFIX_ALL, $varPrefix); // 默认使用PHP模版 include $templateFile; } elseif ('THINK' == $this->type) { // 使用内置的ThinkTemplate模板引擎 if (!$this->checkCache($templateFile)) { // 缓存无效 重新编译 $compiler = true; import('Think.Template.ThinkTemplate'); $tpl = ThinkTemplate::getInstance(); // 编译并加载模板文件 $tpl->load($templateFile, $charset, $this->tVar, $varPrefix); } else { // 缓存有效 直接载入模板缓存 // 模板阵列变量分解成为独立变量 extract($this->tVar, empty($varPrefix) ? EXTR_OVERWRITE : EXTR_PREFIX_ALL, $varPrefix); //载入模版缓存文件 include CACHE_PATH . md5($templateFile) . C('CACHFILE_SUFFIX'); } } elseif ($pluginOn) { // 通过插件的方式扩展第三方模板引擎 use_compiler(C('TMPL_ENGINE_TYPE'), $templateFile, $this->tVar, $charset, $varPrefix); } // 获取并清空缓存 $content = ob_get_clean(); // 输出编码转换 $content = auto_charset($content, C('TEMPLATE_CHARSET'), $charset); if ($pluginOn) { // 输出过滤 $content = apply_filter('ob_content', $content); } if (C('HTML_CACHE_ON')) { // 写入静态文件 HtmlCache::writeHTMLCache($content); } if ($display) { $showTime = $this->showTime($startTime); echo $content; if (C('SHOW_RUN_TIME')) { echo '<div id="think_run_time" class="think_run_time">' . $showTime . '</div>'; } $this->showTrace($showTime, $charset, $compiler); return null; } else { return $content; } }