首页 > CMS > PhpCMS > 正文

PHPCMS模版解析之TEMPLATE函数

2024-09-10 07:15:40
字体:
来源:转载
供稿:网友

昨天跟到了phpcms系统初始化到控制器流程,今天阿唐屌丝带大家一起分析phpcms模版机制,控制器 在进行一些逻辑操作后 就开始渲染 视图显示 用到 template函数,所以要搞清phpcms模版机制,这个函数是必须看的,代码如下:

  1. function template($module = ‘content’, $template = ‘index’, $style = ”) { 
  2. //默认模块为content.默认模版文件为index 
  3. if(strpos($module, ‘plugin/’)!== false) { 
  4. //检测模块里面是否包含plugin字符 这里进行了对插件模版的判断 插件模版需要用p_template解析 
  5. $plugin = str_replace(‘plugin/’, ”, $module); 
  6. return p_template($plugin$template,$style); 
  7. $module = str_replace(‘/’, DIRECTORY_SEPARATOR, $module); 
  8. //路径兼容性处理 
  9. if(!emptyempty($style) && preg_match(‘/([a-z0-9-_]+)/is’,$style)) { 
  10. elseif (emptyempty($style) && !defined(‘STYLE’)) { 
  11. //变量STYLE暂时不晓得在哪里初始化的 存在当前网站模版名 
  12. if(defined(‘SITEID’)) { 
  13. $siteid = SITEID; 
  14. else { 
  15. $siteid = param::get_cookie(‘siteid’); 
  16. if (!$siteid$siteid = 1; 
  17. $sitelist = getcache(‘sitelist’,'commons’); 
  18. if(!emptyempty($siteid)) { 
  19. $style = $sitelist[$siteid]['default_style']; 
  20. elseif (emptyempty($style) && defined(‘STYLE’)) { 
  21. $style = STYLE; 
  22. else { 
  23. $style = ‘default’; 
  24. if(!$style$style = ‘default’; 
  25. //以上全部为判断 当前网站 应该用哪个模版 风格 
  26. $template_cache = pc_base::load_sys_class(‘template_cache’); 
  27. //载入template_cache类 
  28. $compiledtplfile = PHPCMS_PATH.’caches’.DIRECTORY_SEPARATOR.’caches_template’.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.php’; 
  29. //组合当前模块模版缓存文件地址 
  30. if(file_exists(PC_PATH.’templates’.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.html’)) { 
  31. //如果模版文件存在 
  32. if(!file_exists($compiledtplfile) || (@filemtime(PC_PATH.’templates’.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.html’) > @filemtime($compiledtplfile))) {//如果缓存文件不存在既没有编译模版 或者 模版的修改时间超过了系统设置缓存更新时间 从新编译模版缓存 
  33. $template_cache->template_compile($module$template$style); 
  34. else { 
  35. //如果模版文件不存在 
  36. $compiledtplfile = PHPCMS_PATH.’caches’.DIRECTORY_SEPARATOR.’caches_template’.DIRECTORY_SEPARATOR.’default’.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.php’; 
  37. 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))) {//上面判断了模版不存在,这个时候开始判断默认模版路径对应模版是否存在,可以做到知道用默认default模版替换,如果默认的模版的 缓存 文件 不存在 或者 存在 默认的模版 但时间超过了 系统设置缓存时间 在从新编译模版 
  38. $template_cache->template_compile($module$template, ‘default’); 
  39. elseif (!file_exists(PC_PATH.’templates’.DIRECTORY_SEPARATOR.’default’.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.html’)) {//模版不存在 
  40. showmessage(‘Template does not exist.’.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.html’); 
  41. //Vevb.com 
  42. return $compiledtplfile;//返回编译文件 

整个逻辑很简单 判断 稍微有点长

这里我们可以分析到 phpcms模拟为编译型的模版解析过程,template函数主要是控制 模版解析类工作 情况 整个编译 过程 由template_cache类完成,要想了解整个模版编译过程 还需要读 这个类.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表