现在的位置: 主页 > 企业简介 > 文章列表

thinkphp核心源码注释-Template.class.php

作者:昆明飞华工贸有限公司 来源:www.kmfhgm.com    未知发布时间:2017-09-06 13:25:43
thinkphp核心源码注释|Template.class.php




// +----------------------------------------------------------------------
namespace Think;
/**
* ThinkPHP内置模板引擎类
* 支持XML标签和普通标签的模板解析
* 编译型模板引擎 支持动态缓存
* 模版 里面 最好的一个部分了
*/
class Template {
// 模板页面中引入的标签库列表
protected $tagLib
= array();// 模版看来是把,模版的操作,跟标签操作进行分类
// 这个有点像是那个 mysql 里面的 表达式转义
// 当前模板文件
protected $templateFile = '';// 当前模版文件 处理 估计就是要引入进来,
// 这样对于class 来说 里面的 文件 跟 输入的接口进行了各种统一,
// 其实现在的 Php 编程已经上升了一个新的高度,那个就是 java类似的情况了
// 编程了 class编程为基础 function 进行辅助的状态呢。
// 总结: 标签 ---》 模版文件
// 模板变量
public
$tVar
= array(); // 模版变量 1
public
$config
= array(); // 模版变量 2
private
$literal
= array(); // 模版变量 3
private
$block
= array(); // 模版变量 4
/**
* 架构函数
* @access public
* 构造函数吧,哥哥,你这个注释,
*/
public function __construct(){
$this->config['cache_path']
= C('CACHE_PATH');// 配置路径
$this->config['template_suffix'] = C('TMPL_TEMPLATE_SUFFIX');// 好像是 模版文件后缀
$this->config['cache_suffix']
= C('TMPL_CACHFILE_SUFFIX');// 生成文件后缀
$this->config['tmpl_cache']
= C('TMPL_CACHE_ON');// 是否开启模版缓存
$this->config['cache_time']
= C('TMPL_CACHE_TIME');// 模版缓存时间
$this->config['taglib_begin']
= $this->stripPreg(C('TAGLIB_BEGIN'));// 标签开始符号
$this->config['taglib_end']
= $this->stripPreg(C('TAGLIB_END'));// 标签结束符号
$this->config['tmpl_begin']
= $this->stripPreg(C('TMPL_L_DELIM'));//
'TMPL_L_DELIM'
=> '{',
// 模板引擎普通标签开始标记
$this->config['tmpl_end']
= $this->stripPreg(C('TMPL_R_DELIM'));//'TMPL_R_DELIM'
=> '}',
// 模板引擎普通标签结束标记
$this->config['default_tmpl']
= C('TEMPLATE_NAME');// 默认模版名i在
$this->config['layout_item']
= C('TMPL_LAYOUT_ITEM');//'TMPL_LAYOUT_ITEM'
=> '{__CONTENT__}', // 布局模板的内容替换标识
}
private function stripPreg($str) {
return str_replace(
array('{','}','(',')','|','[',']','-','+','*','.','^','?'),
array('\{','\}','\(','\)','\|','\[','\]','\-','\+','\*','\.','\^','\?'),
$str);
}// 这个就是个大剂量 的str_replace
// 模板变量获取和设置
public function get($name) { // 获取模版变量数据
if(isset($this->tVar[$name]))
return $this->tVar[$name];
else
return false;
// 其实可以直接这样改写 一句话搞定,哈哈
// return isset($this->tVar[$name])?$this->tVar[$name]:false;
}
public function set($name,$value) {// 这个设置很简洁
$this->tVar[$name]= $value;
}
/**
* 加载模板
* @access public
* @param string $templateFile 模板文件
* @param array $templateVar 模板变量
* @param string $prefix 模板标识前缀
* @return void
* 加载模版
*/
public function fetch($templateFile,$templateVar,$prefix='') {
$this->tVar
= $templateVar;// 模版变量数组 这个是当前模版的变量数组
// extract($vars, EXTR_OVERWRITE);
// 这个是一个大量 使用的函数,这个是比较不错的,就是在加载缓存文件之前,先把对应的变量,进行了赋值
// 其实人家给的 变量名字就是很明显的了,
$templateCacheFile = $this->loadTemplate($templateFile,$prefix);// 加载对应的模版文件 并且生成其缓存文件,
Storage::load($templateCacheFile,$this->tVar,null,'tpl');
// 这个干了这个事情:第一 :将模版数组进行赋值,第二,根据对应的模版文件生成对应的模版缓存文件,第三: 进行变量赋值,并且 include 模版。
} // 总结:一手抓变量,一手抓模版,融会贯通,哈哈哈
/**
* 加载主模板并缓存
* @access public
* @param string $templateFile 模板文件
* @param string $prefix 模板标识前缀
* @return string
* @throws ThinkExecption
*/
public function loadTemplate ($templateFile,$prefix='') {// 牛叉,居然还有模版前缀,
// $templateFile 是一个标准的 模版文件, 准确的来说应该是标准的 完整路径的模版文件
if(is_file($templateFile)) {
$this->templateFile = $templateFile;
// 读取模板文件内容
$tmplContent = file_get_contents($templateFile);
}else{
$tmplContent = $templateFile;
}
// 我去,如果是文件,并且可以找到,那么,就读取文件内容,否则,直接视作是文件内容啊,这个有点霸气啊
// 根据模版文件名定位缓存文件
$tmplCacheFile = $this->config['cache_path'].$prefix.md5($templateFile).$this->config['cache_suffix'];
// 个人感觉就是 md5加密的模版名字,果不其然啊,哈哈
// 判断是否启用布局
if(C('LAYOUT_ON')) { // 我个人不喜欢这个布局。
if(false !== strpos($tmplContent,'{__NOLAYOUT__}')) { // 可以单独定义不使用布局
$tmplContent = str_replace('{__NOLAYOUT__}','',$tmplContent);
}else{ // 替换布局的主体内容
$layoutFile = THEME_PATH.C('LAYOUT_NAME').$this->config['template_suffix'];
// 检查布局文件
if(!is_file($layoutFile)) {
E(L('_TEMPLATE_NOT_EXIST_').':'.$layoutFile);
}
$tmplContent = str_replace($this->config['layout_item'],$tmplContent,file_get_contents($layoutFile));
}
}// 如果启用的布局文件,就对布局文件里面的内容 进行替换。
// 编译模板内容
$tmplContent = $this->compiler($tmplContent);// 对内容,进行编译
Storage::put($tmplCacheFile,trim($tmplContent),'tpl');// 写入文件
return $tmplCacheFile;// 返回文件路径,即可。
}
/**
* 编译模板文件内容
* @access protected
* @param mixed $tmplContent 模板内容
* @return string
* 这个是编译
* 干大活的,就是 就是 个总的 外包
*/
protected function compiler($tmplContent) {
//模板解析
$tmplContent = $this->parse($tmplContent); // 这个获取 模版的解析文件 {$a} ==> /is', array($this, 'restoreLiteral'), $tmplContent);
// 添加安全代码
$tmplContent = '

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网络营销 https://www.feimao666.com

上一篇:单链表的各种操作 下一篇:最后一页