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

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

作者:福州市名人视觉形象设计职业培训学校 来源:www.mrssjy.com 发布时间:2017-09-05 11:57:17
thinkphp核心源码注释|Cx.class.php




// +----------------------------------------------------------------------
namespace Think\Template\TagLib;
use Think\Template\TagLib;
/**
* CX标签库解析类
* 这里的 那个 继承了
*/
class Cx extends TagLib {
// 标签定义
protected $tags = array(
// 标签定义: attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次
'php'
=> array(),
// 这里 什么都没了
'volist' => array('attr'=>'name,id,offset,length,key,mod','level'=>3,'alias'=>'iterate'),
// 里面
'foreach' => array('attr'=>'name,item,key','level'=>3),
'if'
=> array('attr'=>'condition','level'=>2),
'elseif' => array('attr'=>'condition','close'=>0),
'else'
=> array('attr'=>'','close'=>0),
'switch' => array('attr'=>'name','level'=>2),
'case'
=> array('attr'=>'value,break'),
'default' => array('attr'=>'','close'=>0),
//
'compare' => array('attr'=>'name,value,type','level'=>3,'alias'=>'eq,equal,notequal,neq,gt,lt,egt,elt,heq,nheq'),
'range'
=> array('attr'=>'name,value,type','level'=>3,'alias'=>'in,notin,between,notbetween'),
'empty'
=> array('attr'=>'name','level'=>3),
'notempty' => array('attr'=>'name','level'=>3),
'present' => array('attr'=>'name','level'=>3),
'notpresent'=> array('attr'=>'name','level'=>3),
'defined' => array('attr'=>'name','level'=>3),
'notdefined'=> array('attr'=>'name','level'=>3),
'import' => array('attr'=>'file,href,type,value,basepath','close'=>0,'alias'=>'load,css,js'),
'assign' => array('attr'=>'name,value','close'=>0),
'define' => array('attr'=>'name,value','close'=>0),
'for'
=> array('attr'=>'start,end,name,comparison,step', 'level'=>3),
);// 导入 全部支持的标签在这里了,
// 分了: attr level close alias
/**
* php标签解析
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string
* 这里的 那个
*/
public function _php($tag,$content)
$parseStr = '';
return $parseStr;
// 这里的 那个 php 标签
/**
* volist标签解析 循环输出数据集
* 格式:
*
* user.username
* user.email
*
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string|void
*/
public function _volist($tag,$content)
$name = $tag['name'];// 找到里面的那个 $name
$id = $tag['id']; // 获取了 id
$empty = isset($tag['empty'])?$tag['empty']:'';// 这里的 为空
$key = !empty($tag['key'])?$tag['key']:'i';// key i
$mod = isset($tag['mod'])?$tag['mod']:'2';// mod
// 允许使用函数设定数据集 $vo.name
// 我去 这个还有这样的 东西
$parseStr = 'autoBuildVar($name); // 解析 里面的标签,还是 那些通用的 标签了
// 准备参数,准备 变量
$parseStr .= 'if(is_array('.$name.')): $'.$key.' = 0;'; // 如果是数组呢
if(isset($tag['length']) && '' !=$tag['length'] ) // 这里的 那个
// array_slice(array,start,length,preserve)
$parseStr .= ' $__LIST__ = array_slice('.$name.','.$tag['offset'].','.$tag['length'].',true);';
elseif(isset($tag['offset']) && '' !=$tag['offset'])
$parseStr .= ' $__LIST__ = array_slice('.$name.','.$tag['offset'].',null,true);';
else
$parseStr .= ' $__LIST__ = '.$name.';';
// 把这里的那个 真实的数据弄出来
$parseStr .= 'if( count($__LIST__)==0 ) : echo "'.$empty.'" ;';
$parseStr .= 'else: ';
$parseStr .= 'foreach($__LIST__ as $key=>$'.$id.'): ';
$parseStr .= '$mod = ($'.$key.' % '.$mod.' );';
$parseStr .= '++$'.$key.';?>';
$parseStr .= $this->tpl->parse($content);
$parseStr .= '';
if(!empty($parseStr))
return $parseStr;

return ;
}// 发现了 里面的 东西了 就是 volist 里面的
/**
* foreach标签解析 循环输出数据集
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string|void
*/
public function _foreach($tag,$content)
$name
= $tag['name'];
$item
= $tag['item'];
$key
= !empty($tag['key'])?$tag['key']:'key';
$name
= $this->autoBuildVar($name);
$parseStr = '$'.$item.'): ?>';
$parseStr .= $this->tpl->parse($content);
$parseStr .= '';
if(!empty($parseStr))
return $parseStr;

return ;
// 这里的 不错呢
/**
* if标签解析
* 格式:
*
*
*
*
* 表达式支持 eq neq gt egt lt elt == > >= < <= or and || &&
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string
*/
public function _if($tag,$content)
$condition = $this->parseCondition($tag['condition']);
$parseStr = ''.$content.'';
return $parseStr;
// 这里的 解析了
/**
* else标签解析
* 格式:见if标签
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string
*/
public function _elseif($tag,$content)
$condition = $this->parseCondition($tag['condition']);
$parseStr = '';
return $parseStr;
// 解析了 else 里面的 东西
/**
* else标签解析
* @access public
* @param array $tag 标签属性
* @return string
*/
public function _else($tag)
$parseStr = '';
return $parseStr;
// 这里的 那个
/**
* switch标签解析
* 格式:
*
* 1
* 2
* other
*
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string
*/
public function _switch($tag,$content)
$name
= $tag['name'];
$varArray = explode('// 这里的 东西 不错了
/**
* case标签解析 需要配合switch才有效
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string
*/
public function _case($tag,$content) {
$value = $tag['value'];
if('$' == substr($value,0,1))
$varArray = explode('elseif(strpos($value,'|'))',$value);
$value
= '';
foreach ($values as $val)
$value .= 'case "'.addslashes($val).'": ';

else
$value = 'case "'.$value.'": ';

$parseStr = ''.$content;
$isBreak = isset($tag['break']) ? $tag['break'] : '';
if('' ==$isBreak || $isBreak)
$parseStr .= '';

return $parseStr;
}// 这里的 代码都是case 的转码了
/**
* default标签解析 需要配合switch才有效
* 使用: ddfdf
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string
*/
public function _default($tag)
$parseStr = '';
return $parseStr;
// 这里 那个 配合 switch 里面的
/**
* compare标签解析
* 用于值的比较 支持 eq neq gt lt egt elt heq nheq 默认是eq
* 格式: content
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string
*/
public function _compare($tag,$content,$type='eq')
$name
= $tag['name'];
$value
= $tag['value'];
$type
= isset($tag['type'])?$tag['type']:$type;
$type
= $this->parseCondition(' '.$type.' ');
$varArray = explode('// 还不如把他解析了 里面 那个
public function _eq($tag,$content)
return $this->_compare($tag,$content,'eq');

public function _equal($tag,$content)
return $this->_compare($tag,$content,'eq');

public function _neq($tag,$content)
return $this->_compare($tag,$content,'neq');

public function _notequal($tag,$content)
return $this->_compare($tag,$content,'neq');

public function _gt($tag,$content)
return $this->_compare($tag,$content,'gt');

public function _lt($tag,$content)
return $this->_compare($tag,$content,'lt');

public function _egt($tag,$content)
return $this->_compare($tag,$content,'egt');

public function _elt($tag,$content)
return $this->_compare($tag,$content,'elt');

public function _heq($tag,$content)
return $this->_compare($tag,$content,'heq');

public function _nheq($tag,$content)
return $this->_compare($tag,$content,'nheq');

// 这里的 特殊的 代码
/**
* range标签解析
* 如果某个变量存在于某个范围 则输出内容 type= in 表示在范围内 否则表示在范围外
* 格式: content
* example: content
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @param string $type 比较类型
* @return string
*/
public function _range($tag,$content,$type='in')
$name
= $tag['name'];
$value
= $tag['value'];
$varArray = explode(' // 这种里面的代码 是否都可以替换成为 那个
// range标签的别名 用于in判断
public function _in($tag,$content)
return $this->_range($tag,$content,'in');

// range标签的别名 用于notin判断
public function _notin($tag,$content)
return $this->_range($tag,$content,'notin');

public function _between($tag,$content)
return $this->_range($tag,$content,'between');

public function _notbetween($tag,$content)
return $this->_range($tag,$content,'notbetween');

// 别名 不错啊
/**
* present标签解析
* 如果某个变量已经设置 则输出内容
* 格式: content
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string
*/
public function _present($tag,$content)
$name
= $tag['name'];
$name
= $this->autoBuildVar($name);
$parseStr = ''.$content.'';
return $parseStr;
// 这里的那个 是
/**
* notpresent标签解析
* 如果某个变量没有设置,则输出内容
* 格式: content
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string
*/
public function _notpresent($tag,$content)
$name
= $tag['name'];
$name
= $this->autoBuildVar($name);
$parseStr = ''.$content.'';
return $parseStr;
// 这里的标签了
/**
* empty标签解析
* 如果某个变量为empty 则输出内容
* 格式: content
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string
*/
public function _empty($tag,$content)
$name
= $tag['name'];
$name
= $this->autoBuildVar($name);
$parseStr = ''.$content.'';
return $parseStr;

public function _notempty($tag,$content)
$name
= $tag['name'];
$name
= $this->autoBuildVar($name);
$parseStr = ''.$content.'';
return $parseStr;
// 这里的那个
/**
* 判断是否已经定义了该常量
* 已定义
* @param $attr
* @param $content
* @return string
*/
public function _defined($tag,$content)
$name
= $tag['name'];
$parseStr = ''.$content.'';
return $parseStr;
// 都是转成 if
public function _notdefined($tag,$content)
$name
= $tag['name'];
$parseStr = ''.$content.'';
return $parseStr;
// 都是 转成
/**
* import 标签解析
*
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @param boolean $isFile 是否文件方式
* @param string $type 类型
* @return string
*/
public function _import($tag,$content,$isFile=false,$type='') {
$file
= isset($tag['file'])?$tag['file']:$tag['href'];
$parseStr = '';
$endStr
= '';
// 判断是否存在加载条件 允许使用函数判断(默认为isset)
if (isset($tag['value']))
$varArray = explode('
if($isFile) {
// 根据文件名后缀自动识别
$type = $type?$type:(!empty($tag['type'])?strtolower($tag['type']):null);
// 文件方式导入
$array = explode(',',$file);
foreach ($array as $val)
if (!$type
}else{
// 命名空间导入模式 默认是js
$type
= $type?$type:(!empty($tag['type'])?strtolower($tag['type']):'js');
$basepath = !empty($tag['basepath'])?$tag['basepath']:__ROOT__.'/Public';
// 命名空间方式导入外部文件
$array
= explode(',',$file);
foreach ($array as $val)
if(strpos ($val, '?'))
list($val,$version) = explode('?',$val);
else
$version = '';

switch($type)
case 'js':
$parseStr .= '<script type="text/javascript" src="'.$basepath.'http://www.2cto.com/'.str_replace(array('.','#'), array('http://www.2cto.com/','.'),$val).'.js'.($version?'?'.$version:'').'"></script>';
break;
case 'css':
$parseStr .= '';
break;
case 'php':
$parseStr .= '';
break;


}
return $parseStr.$endStr;
}// 这里 是可以 进入那个 包含 什么各种各样的文件 type 里面的产品了
// import别名 采用文件方式加载(要使用命名空间必须用import) 例如
public function _load($tag,$content)
return $this->_import($tag,$content,true);

// import别名使用 导入css文件
public function _css($tag,$content)
return $this->_import($tag,$content,true,'css');

// import别名使用 导入js文件
public function _js($tag,$content)
return $this->_import($tag,$content,true,'js');

/**
* assign标签解析
* 在模板中给某个变量赋值 支持变量赋值
* 格式:
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string
*/
public function _assign($tag,$content)
$name
= $this->autoBuildVar($tag['name']);
if('$'==substr($tag['value'],0,1))
$value = $this->autoBuildVar(substr($tag['value'],1));
else
$value = '\''.$tag['value']. '\'';

$parseStr = '';
return $parseStr;
// assign 就是复制过来了,找到原型了
/**
* define标签解析
* 在模板中定义常量 支持变量赋值
* 格式:
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string
*/
public function _define($tag,$content)
$name
= '\''.$tag['name']. '\'';
if('$'==substr($tag['value'],0,1))
$value = $this->autoBuildVar(substr($tag['value'],1));
else
$value = '\''.$tag['value']. '\'';

$parseStr = '';
return $parseStr;
// 找到了 define 里面的定义了
/**
* for标签解析
* 格式:
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string
*/
public function _for($tag, $content){
//设置默认值
$start
= 0;
$end
= 0;
$step
= 1;
$comparison = 'lt';
$name
= 'i';
$rand
= rand(); //添加随机数,防止嵌套变量冲突
//获取属性
foreach ($tag as $key => $value)
$value = trim($value);
if(':'==substr($value,0,1))
$value = substr($value,1);
elseif('$'==substr($value,0,1))
$value = $this->autoBuildVar(substr($value,1));
switch ($key)
case 'start':
$start
= $value; break;
case 'end' :
$end
= $value; break;
case 'step':
$step
= $value; break;
case 'comparison':
$comparison = $value; break;
case 'name':
$name
= $value; break;


$parseStr = 'parseCondition('$'.$name.' '.$comparison.' $__FOR_END_'.$rand.'__').';$'.$name.'+='.$step.')?>';
$parseStr .= $content;
$parseStr .= '';
return $parseStr;
// for 标签专用

}

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:黄冈网站制作 http://huanggang.666rj.com

上一篇:PYthon多线程服务器 下一篇:最后一页