TemplateThink.class.php 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  8. // +----------------------------------------------------------------------
  9. // | Author: liu21st <liu21st@gmail.com>
  10. // +----------------------------------------------------------------------
  11. // $Id$
  12. /**
  13. +------------------------------------------------------------------------------
  14. * Think模板引擎解析类
  15. +------------------------------------------------------------------------------
  16. * @category Think
  17. * @package Think
  18. * @subpackage Util
  19. * @author liu21st <liu21st@gmail.com>
  20. * @version $Id$
  21. +------------------------------------------------------------------------------
  22. */
  23. class TemplateThink
  24. {
  25. /**
  26. +----------------------------------------------------------
  27. * 渲染模板输出
  28. +----------------------------------------------------------
  29. * @access public
  30. +----------------------------------------------------------
  31. * @param string $templateFile 模板文件名
  32. * @param array $var 模板变量
  33. * @param string $charset 模板输出字符集
  34. * @param string $varPrefix 模板变量前缀
  35. +----------------------------------------------------------
  36. * @return void
  37. +----------------------------------------------------------
  38. */
  39. public function fetch($templateFile,$var,$charset) {
  40. if(!$this->checkCache($templateFile)) {
  41. // 缓存无效 重新编译
  42. $tpl = Think::instance('ThinkTemplate');
  43. // 编译并加载模板文件
  44. $tpl->load($templateFile,$var,$charset);
  45. }else{
  46. // 缓存有效 直接载入模板缓存
  47. // 模板阵列变量分解成为独立变量
  48. extract($var, EXTR_OVERWRITE);
  49. //载入模版缓存文件
  50. include C('CACHE_PATH').md5($templateFile).C('TMPL_CACHFILE_SUFFIX');
  51. }
  52. }
  53. /**
  54. +----------------------------------------------------------
  55. * 检查缓存文件是否有效
  56. * 如果无效则需要重新编译
  57. +----------------------------------------------------------
  58. * @access public
  59. +----------------------------------------------------------
  60. * @param string $tmplTemplateFile 模板文件名
  61. +----------------------------------------------------------
  62. * @return boolen
  63. +----------------------------------------------------------
  64. */
  65. protected function checkCache($tmplTemplateFile)
  66. {
  67. if (!C('TMPL_CACHE_ON')) // 优先对配置设定检测
  68. return false;
  69. $tmplCacheFile = C('CACHE_PATH').md5($tmplTemplateFile).C('TMPL_CACHFILE_SUFFIX');
  70. if(!is_file($tmplCacheFile))
  71. return false;
  72. elseif (filemtime($tmplTemplateFile) > filemtime($tmplCacheFile)) {
  73. // 模板文件如果有更新则缓存需要更新
  74. return false;
  75. } elseif (C('TMPL_CACHE_TIME') != -1 && time() > filemtime($tmplCacheFile)+C('TMPL_CACHE_TIME')) {
  76. // 缓存是否在有效期
  77. return false;
  78. }
  79. //缓存有效
  80. return true;
  81. }
  82. }
  83. ?>