mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-06 15:02:47 +08:00
PSR规范调整
This commit is contained in:
@@ -10,24 +10,28 @@
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace think\template\driver;
|
||||
|
||||
use think\Exception;
|
||||
|
||||
class File {
|
||||
class File
|
||||
{
|
||||
// 写入编译缓存
|
||||
public function write($cacheFile,$content){
|
||||
public function write($cacheFile, $content)
|
||||
{
|
||||
// 检测模板目录
|
||||
$dir = dirname($cacheFile);
|
||||
if(!is_dir($dir)){
|
||||
mkdir($dir,0777,true);
|
||||
$dir = dirname($cacheFile);
|
||||
if (!is_dir($dir)) {
|
||||
mkdir($dir, 0777, true);
|
||||
}
|
||||
// 生成模板缓存文件
|
||||
if( false === file_put_contents($cacheFile,$content)){
|
||||
throw new Exception('_CACHE_WRITE_ERROR_:'.$cacheFile);
|
||||
if (false === file_put_contents($cacheFile, $content)) {
|
||||
throw new Exception('_CACHE_WRITE_ERROR_:' . $cacheFile);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 读取编译编译
|
||||
public function read($cacheFile,$vars){
|
||||
public function read($cacheFile, $vars)
|
||||
{
|
||||
// 模板阵列变量分解成为独立变量
|
||||
extract($vars, EXTR_OVERWRITE);
|
||||
//载入模版缓存文件
|
||||
@@ -35,11 +39,12 @@ class File {
|
||||
}
|
||||
|
||||
// 检查编译缓存是否有效
|
||||
public function check($template,$cacheFile,$cacheTime){
|
||||
if(!is_file($cacheFile)|| (is_file($template) && filemtime($template) > filemtime($cacheFile))) {
|
||||
public function check($template, $cacheFile, $cacheTime)
|
||||
{
|
||||
if (!is_file($cacheFile) || (is_file($template) && filemtime($template) > filemtime($cacheFile))) {
|
||||
// 模板文件如果有更新则缓存需要更新
|
||||
return false;
|
||||
}elseif ($cacheTime != 0 && time() > filemtime($cacheFile)+$cacheTime) {
|
||||
} elseif (0 != $cacheTime && time() > filemtime($cacheFile) + $cacheTime) {
|
||||
// 缓存是否在有效期
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace think\template;
|
||||
|
||||
use think\Exception;
|
||||
|
||||
/**
|
||||
@@ -19,42 +20,43 @@ use think\Exception;
|
||||
* @subpackage Template
|
||||
* @author liu21st <liu21st@gmail.com>
|
||||
*/
|
||||
class TagLib {
|
||||
class TagLib
|
||||
{
|
||||
|
||||
/**
|
||||
* 标签库定义XML文件
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $xml = '';
|
||||
protected $tags = [];// 标签定义
|
||||
protected $xml = '';
|
||||
protected $tags = []; // 标签定义
|
||||
/**
|
||||
* 标签库名称
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $tagLib ='';
|
||||
protected $tagLib = '';
|
||||
|
||||
/**
|
||||
* 标签库标签列表
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $tagList = [];
|
||||
protected $tagList = [];
|
||||
|
||||
/**
|
||||
* 标签库分析数组
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $parse = [];
|
||||
protected $parse = [];
|
||||
|
||||
/**
|
||||
* 标签库是否有效
|
||||
* @var string
|
||||
* @access protected
|
||||
*/
|
||||
protected $valid = false;
|
||||
protected $valid = false;
|
||||
|
||||
/**
|
||||
* 当前模板对象
|
||||
@@ -63,10 +65,11 @@ class TagLib {
|
||||
*/
|
||||
protected $tpl;
|
||||
|
||||
protected $comparison = [' nheq '=>' !== ',' heq '=>' === ',' neq '=>' != ',' eq '=>' == ',' egt '=>' >= ',' gt '=>' > ',' elt '=>' <= ',' lt '=>' < '];
|
||||
protected $comparison = [' nheq ' => ' !== ', ' heq ' => ' === ', ' neq ' => ' != ', ' eq ' => ' == ', ' egt ' => ' >= ', ' gt ' => ' > ', ' elt ' => ' <= ', ' lt ' => ' < '];
|
||||
|
||||
public function __construct($template){
|
||||
$this->tpl = $template;
|
||||
public function __construct($template)
|
||||
{
|
||||
$this->tpl = $template;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -75,33 +78,34 @@ class TagLib {
|
||||
* @param string $tagStr 标签内容
|
||||
* @return array
|
||||
*/
|
||||
public function parseXmlAttr($attr,$tag) {
|
||||
if(''== trim($attr)) {
|
||||
public function parseXmlAttr($attr, $tag)
|
||||
{
|
||||
if ('' == trim($attr)) {
|
||||
return [];
|
||||
}
|
||||
//XML解析安全过滤
|
||||
$attr = str_replace('&','___', $attr);
|
||||
$xml = '<tpl><tag '.$attr.' /></tpl>';
|
||||
$xml = simplexml_load_string($xml);
|
||||
if(!$xml) {
|
||||
throw new Exception('_XML_TAG_ERROR_ : '.$attr);
|
||||
$attr = str_replace('&', '___', $attr);
|
||||
$xml = '<tpl><tag ' . $attr . ' /></tpl>';
|
||||
$xml = simplexml_load_string($xml);
|
||||
if (!$xml) {
|
||||
throw new Exception('_XML_TAG_ERROR_ : ' . $attr);
|
||||
}
|
||||
$xml = (array)($xml->tag->attributes());
|
||||
$array = array_change_key_case($xml['@attributes']);
|
||||
if($array) {
|
||||
$tag = strtolower($tag);
|
||||
if(isset($this->tags[$tag]['attr'])) {
|
||||
$attrs = explode(',',$this->tags[$tag]['attr']);
|
||||
if(isset($this->tags[strtolower($tag)]['must'])){
|
||||
$must = explode(',',$this->tags[$tag]['must']);
|
||||
}else{
|
||||
$must = [];
|
||||
$xml = (array) ($xml->tag->attributes());
|
||||
$array = array_change_key_case($xml['@attributes']);
|
||||
if ($array) {
|
||||
$tag = strtolower($tag);
|
||||
if (isset($this->tags[$tag]['attr'])) {
|
||||
$attrs = explode(',', $this->tags[$tag]['attr']);
|
||||
if (isset($this->tags[strtolower($tag)]['must'])) {
|
||||
$must = explode(',', $this->tags[$tag]['must']);
|
||||
} else {
|
||||
$must = [];
|
||||
}
|
||||
foreach($attrs as $name) {
|
||||
if( isset($array[$name])) {
|
||||
$array[$name] = str_replace('___','&',$array[$name]);
|
||||
}elseif(false !== array_search($name,$must)){
|
||||
throw new Exception('_PARAM_ERROR_:'.$name);
|
||||
foreach ($attrs as $name) {
|
||||
if (isset($array[$name])) {
|
||||
$array[$name] = str_replace('___', '&', $array[$name]);
|
||||
} elseif (false !== array_search($name, $must)) {
|
||||
throw new Exception('_PARAM_ERROR_:' . $name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -115,13 +119,16 @@ class TagLib {
|
||||
* @param string $condition 表达式标签内容
|
||||
* @return array
|
||||
*/
|
||||
public function parseCondition($condition) {
|
||||
$condition = str_ireplace(array_keys($this->comparison),array_values($this->comparison),$condition);
|
||||
$condition = preg_replace('/\$(\w+):(\w+)\s/is','$\\1->\\2 ',$condition);
|
||||
$condition = preg_replace('/\$(\w+)\.(\w+)\s/is','$\\1["\\2"] ',$condition);
|
||||
public function parseCondition($condition)
|
||||
{
|
||||
$condition = str_ireplace(array_keys($this->comparison), array_values($this->comparison), $condition);
|
||||
$condition = preg_replace('/\$(\w+):(\w+)\s/is', '$\\1->\\2 ', $condition);
|
||||
$condition = preg_replace('/\$(\w+)\.(\w+)\s/is', '$\\1["\\2"] ', $condition);
|
||||
|
||||
if (false !== strpos($condition, '$Think')) {
|
||||
$condition = preg_replace('/(\$Think.*?)\s/ies', "\$this->parseThinkVar('\\1');", $condition);
|
||||
}
|
||||
|
||||
if(false !== strpos($condition, '$Think'))
|
||||
$condition = preg_replace('/(\$Think.*?)\s/ies',"\$this->parseThinkVar('\\1');" , $condition);
|
||||
return $condition;
|
||||
}
|
||||
|
||||
@@ -131,26 +138,27 @@ class TagLib {
|
||||
* @param string $name 变量描述
|
||||
* @return string
|
||||
*/
|
||||
public function autoBuildVar($name) {
|
||||
if('Think.' == substr($name,0,6)){
|
||||
public function autoBuildVar($name)
|
||||
{
|
||||
if ('Think.' == substr($name, 0, 6)) {
|
||||
// 特殊变量
|
||||
return $this->parseThinkVar($name);
|
||||
}elseif(strpos($name,'.')) {
|
||||
$vars = explode('.',$name);
|
||||
$var = array_shift($vars);
|
||||
$name = '$'.$var;
|
||||
foreach ($vars as $key=>$val){
|
||||
if(0===strpos($val,'$')) {
|
||||
$name .= '["{'.$val.'}"]';
|
||||
}else{
|
||||
$name .= '["'.$val.'"]';
|
||||
} elseif (strpos($name, '.')) {
|
||||
$vars = explode('.', $name);
|
||||
$var = array_shift($vars);
|
||||
$name = '$' . $var;
|
||||
foreach ($vars as $key => $val) {
|
||||
if (0 === strpos($val, '$')) {
|
||||
$name .= '["{' . $val . '}"]';
|
||||
} else {
|
||||
$name .= '["' . $val . '"]';
|
||||
}
|
||||
}
|
||||
}elseif(strpos($name,':')){
|
||||
} elseif (strpos($name, ':')) {
|
||||
// 额外的对象方式支持
|
||||
$name = '$'.str_replace(':','->',$name);
|
||||
}elseif(!defined($name)) {
|
||||
$name = '$'.$name;
|
||||
$name = '$' . str_replace(':', '->', $name);
|
||||
} elseif (!defined($name)) {
|
||||
$name = '$' . $name;
|
||||
}
|
||||
return $name;
|
||||
}
|
||||
@@ -162,46 +170,60 @@ class TagLib {
|
||||
* @param string $varStr 变量字符串
|
||||
* @return string
|
||||
*/
|
||||
public function parseThinkVar($varStr){
|
||||
$vars = explode('.',$varStr);
|
||||
$vars[1] = strtoupper(trim($vars[1]));
|
||||
$parseStr = '';
|
||||
if(count($vars)>=3){
|
||||
public function parseThinkVar($varStr)
|
||||
{
|
||||
$vars = explode('.', $varStr);
|
||||
$vars[1] = strtoupper(trim($vars[1]));
|
||||
$parseStr = '';
|
||||
if (count($vars) >= 3) {
|
||||
$vars[2] = trim($vars[2]);
|
||||
switch($vars[1]){
|
||||
case 'SERVER': $parseStr = '$_SERVER[\''.$vars[2].'\']';break;
|
||||
case 'GET': $parseStr = '$_GET[\''.$vars[2].'\']';break;
|
||||
case 'POST': $parseStr = '$_POST[\''.$vars[2].'\']';break;
|
||||
switch ($vars[1]) {
|
||||
case 'SERVER':$parseStr = '$_SERVER[\'' . $vars[2] . '\']';
|
||||
break;
|
||||
case 'GET':$parseStr = '$_GET[\'' . $vars[2] . '\']';
|
||||
break;
|
||||
case 'POST':$parseStr = '$_POST[\'' . $vars[2] . '\']';
|
||||
break;
|
||||
case 'COOKIE':
|
||||
if(isset($vars[3])) {
|
||||
$parseStr = '$_COOKIE[\''.$vars[2].'\'][\''.$vars[3].'\']';
|
||||
}else{
|
||||
$parseStr = '$_COOKIE[\''.$vars[2].'\']';
|
||||
if (isset($vars[3])) {
|
||||
$parseStr = '$_COOKIE[\'' . $vars[2] . '\'][\'' . $vars[3] . '\']';
|
||||
} else {
|
||||
$parseStr = '$_COOKIE[\'' . $vars[2] . '\']';
|
||||
}
|
||||
break;
|
||||
case 'SESSION':
|
||||
if(isset($vars[3])) {
|
||||
$parseStr = '$_SESSION[\''.$vars[2].'\'][\''.$vars[3].'\']';
|
||||
}else{
|
||||
$parseStr = '$_SESSION[\''.$vars[2].'\']';
|
||||
if (isset($vars[3])) {
|
||||
$parseStr = '$_SESSION[\'' . $vars[2] . '\'][\'' . $vars[3] . '\']';
|
||||
} else {
|
||||
$parseStr = '$_SESSION[\'' . $vars[2] . '\']';
|
||||
}
|
||||
break;
|
||||
case 'ENV': $parseStr = '$_ENV[\''.$vars[2].'\']';break;
|
||||
case 'REQUEST': $parseStr = '$_REQUEST[\''.$vars[2].'\']';break;
|
||||
case 'CONST': $parseStr = strtoupper($vars[2]);break;
|
||||
case 'ENV':$parseStr = '$_ENV[\'' . $vars[2] . '\']';
|
||||
break;
|
||||
case 'REQUEST':$parseStr = '$_REQUEST[\'' . $vars[2] . '\']';
|
||||
break;
|
||||
case 'CONST':$parseStr = strtoupper($vars[2]);
|
||||
break;
|
||||
case 'LANG':
|
||||
$parseStr = 'L("'.$vars[2].'")';break;
|
||||
$parseStr = 'L("' . $vars[2] . '")';
|
||||
break;
|
||||
case 'CONFIG':
|
||||
if(isset($vars[3])) {
|
||||
$vars[2] .= '.'.$vars[3];
|
||||
if (isset($vars[3])) {
|
||||
$vars[2] .= '.' . $vars[3];
|
||||
}
|
||||
$parseStr = 'C("'.$vars[2].'")';break;
|
||||
$parseStr = 'C("' . $vars[2] . '")';
|
||||
break;
|
||||
}
|
||||
}else if(count($vars)==2){
|
||||
switch($vars[1]){
|
||||
case 'NOW': $parseStr = "date('Y-m-d g:i a',time())";break;
|
||||
case 'VERSION': $parseStr = 'THINK_VERSION';break;
|
||||
default: if(defined($vars[1])) $parseStr = $vars[1];
|
||||
} else if (count($vars) == 2) {
|
||||
switch ($vars[1]) {
|
||||
case 'NOW':$parseStr = "date('Y-m-d g:i a',time())";
|
||||
break;
|
||||
case 'VERSION':$parseStr = 'THINK_VERSION';
|
||||
break;
|
||||
default:if (defined($vars[1])) {
|
||||
$parseStr = $vars[1];
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return $parseStr;
|
||||
@@ -215,35 +237,37 @@ class TagLib {
|
||||
* @param array $varArray 函数列表
|
||||
* @return string
|
||||
*/
|
||||
protected function parseVarFunction($name,$varArray){
|
||||
protected function parseVarFunction($name, $varArray)
|
||||
{
|
||||
//对变量使用函数
|
||||
$length = count($varArray);
|
||||
for($i=0;$i<$length ;$i++ ){
|
||||
$args = explode('=',$varArray[$i],2);
|
||||
for ($i = 0; $i < $length; $i++) {
|
||||
$args = explode('=', $varArray[$i], 2);
|
||||
//模板函数过滤
|
||||
$fun = strtolower(trim($args[0]));
|
||||
switch($fun) {
|
||||
case 'default': // 特殊模板函数
|
||||
$name = '('.$name.')?('.$name.'):'.$args[1];
|
||||
break;
|
||||
default: // 通用模板函数
|
||||
if(isset($args[1])){
|
||||
if(strstr($args[1],'###')){
|
||||
$args[1] = str_replace('###',$name,$args[1]);
|
||||
$name = "$fun($args[1])";
|
||||
}else{
|
||||
$name = "$fun($name,$args[1])";
|
||||
$fun = strtolower(trim($args[0]));
|
||||
switch ($fun) {
|
||||
case 'default': // 特殊模板函数
|
||||
$name = '(' . $name . ')?(' . $name . '):' . $args[1];
|
||||
break;
|
||||
default: // 通用模板函数
|
||||
if (isset($args[1])) {
|
||||
if (strstr($args[1], '###')) {
|
||||
$args[1] = str_replace('###', $name, $args[1]);
|
||||
$name = "$fun($args[1])";
|
||||
} else {
|
||||
$name = "$fun($name,$args[1])";
|
||||
}
|
||||
} else if (!empty($args[0])) {
|
||||
$name = "$fun($name)";
|
||||
}
|
||||
}else if(!empty($args[0])){
|
||||
$name = "$fun($name)";
|
||||
}
|
||||
}
|
||||
}
|
||||
return $name;
|
||||
}
|
||||
|
||||
// 获取标签定义
|
||||
public function getTags(){
|
||||
public function getTags()
|
||||
{
|
||||
return $this->tags;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace think\template\taglib;
|
||||
use think\template\taglib;
|
||||
|
||||
use think\template\Taglib;
|
||||
|
||||
/**
|
||||
* CX标签库解析类
|
||||
@@ -19,33 +20,34 @@ use think\template\taglib;
|
||||
* @subpackage Driver.Taglib
|
||||
* @author liu21st <liu21st@gmail.com>
|
||||
*/
|
||||
class Cx extends Taglib {
|
||||
class Cx extends Taglib
|
||||
{
|
||||
|
||||
// 标签定义
|
||||
protected $tags = [
|
||||
protected $tags = [
|
||||
// 标签定义: attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次
|
||||
'php' => [],
|
||||
'volist' => ['attr'=>'name,id,offset,length,key,mod','level'=>3,'alias'=>'iterate'],
|
||||
'foreach' => ['attr'=>'name,item,key','level'=>3],
|
||||
'if' => ['attr'=>'condition','level'=>2],
|
||||
'elseif' => ['attr'=>'condition','close'=>0],
|
||||
'else' => ['attr'=>'','close'=>0],
|
||||
'switch' => ['attr'=>'name','level'=>2],
|
||||
'case' => ['attr'=>'value,break'],
|
||||
'default' => ['attr'=>'','close'=>0],
|
||||
'compare' => ['attr'=>'name,value,type','level'=>3,'alias'=>'eq,equal,notequal,neq,gt,lt,egt,elt,heq,nheq'],
|
||||
'range' => ['attr'=>'name,value,type','level'=>3,'alias'=>'in,notin,between,notbetween'],
|
||||
'empty' => ['attr'=>'name','level'=>3],
|
||||
'notempty' => ['attr'=>'name','level'=>3],
|
||||
'present' => ['attr'=>'name','level'=>3],
|
||||
'notpresent'=> ['attr'=>'name','level'=>3],
|
||||
'defined' => ['attr'=>'name','level'=>3],
|
||||
'notdefined'=> ['attr'=>'name','level'=>3],
|
||||
'import' => ['attr'=>'file,href,type,value,basepath','close'=>0,'alias'=>'load,css,js'],
|
||||
'assign' => ['attr'=>'name,value','close'=>0],
|
||||
'define' => ['attr'=>'name,value','close'=>0],
|
||||
'for' => ['attr'=>'start,end,name,comparison,step', 'level'=>3],
|
||||
];
|
||||
'php' => [],
|
||||
'volist' => ['attr' => 'name,id,offset,length,key,mod', 'level' => 3, 'alias' => 'iterate'],
|
||||
'foreach' => ['attr' => 'name,item,key', 'level' => 3],
|
||||
'if' => ['attr' => 'condition', 'level' => 2],
|
||||
'elseif' => ['attr' => 'condition', 'close' => 0],
|
||||
'else' => ['attr' => '', 'close' => 0],
|
||||
'switch' => ['attr' => 'name', 'level' => 2],
|
||||
'case' => ['attr' => 'value,break'],
|
||||
'default' => ['attr' => '', 'close' => 0],
|
||||
'compare' => ['attr' => 'name,value,type', 'level' => 3, 'alias' => 'eq,equal,notequal,neq,gt,lt,egt,elt,heq,nheq'],
|
||||
'range' => ['attr' => 'name,value,type', 'level' => 3, 'alias' => 'in,notin,between,notbetween'],
|
||||
'empty' => ['attr' => 'name', 'level' => 3],
|
||||
'notempty' => ['attr' => 'name', 'level' => 3],
|
||||
'present' => ['attr' => 'name', 'level' => 3],
|
||||
'notpresent' => ['attr' => 'name', 'level' => 3],
|
||||
'defined' => ['attr' => 'name', 'level' => 3],
|
||||
'notdefined' => ['attr' => 'name', 'level' => 3],
|
||||
'import' => ['attr' => 'file,href,type,value,basepath', 'close' => 0, 'alias' => 'load,css,js'],
|
||||
'assign' => ['attr' => 'name,value', 'close' => 0],
|
||||
'define' => ['attr' => 'name,value', 'close' => 0],
|
||||
'for' => ['attr' => 'start,end,name,comparison,step', 'level' => 3],
|
||||
];
|
||||
|
||||
/**
|
||||
* php标签解析
|
||||
@@ -54,8 +56,9 @@ class Cx extends Taglib {
|
||||
* @param string $content 标签内容
|
||||
* @return string
|
||||
*/
|
||||
public function _php($tag,$content) {
|
||||
$parseStr = '<?php '.$content.' ?>';
|
||||
public function _php($tag, $content)
|
||||
{
|
||||
$parseStr = '<?php ' . $content . ' ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
@@ -71,40 +74,41 @@ class Cx extends Taglib {
|
||||
* @param string $content 标签内容
|
||||
* @return string|void
|
||||
*/
|
||||
public function _volist($tag,$content) {
|
||||
$name = $tag['name'];
|
||||
$id = $tag['id'];
|
||||
$empty = isset($tag['empty'])?$tag['empty']:'';
|
||||
$key = !empty($tag['key'])?$tag['key']:'i';
|
||||
$mod = isset($tag['mod'])?$tag['mod']:'2';
|
||||
public function _volist($tag, $content)
|
||||
{
|
||||
$name = $tag['name'];
|
||||
$id = $tag['id'];
|
||||
$empty = isset($tag['empty']) ? $tag['empty'] : '';
|
||||
$key = !empty($tag['key']) ? $tag['key'] : 'i';
|
||||
$mod = isset($tag['mod']) ? $tag['mod'] : '2';
|
||||
// 允许使用函数设定数据集 <volist name=":fun('arg')" id="vo">{$vo.name}</volist>
|
||||
$parseStr = '<?php ';
|
||||
if(0===strpos($name,':')) {
|
||||
$parseStr .= '$_result='.substr($name,1).';';
|
||||
$name = '$_result';
|
||||
}else{
|
||||
$name = $this->autoBuildVar($name);
|
||||
$parseStr = '<?php ';
|
||||
if (0 === strpos($name, ':')) {
|
||||
$parseStr .= '$_result=' . substr($name, 1) . ';';
|
||||
$name = '$_result';
|
||||
} else {
|
||||
$name = $this->autoBuildVar($name);
|
||||
}
|
||||
$parseStr .= 'if(is_array('.$name.')): $'.$key.' = 0;';
|
||||
if(isset($tag['length']) && '' !=$tag['length'] ) {
|
||||
$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(is_array(' . $name . ')): $' . $key . ' = 0;';
|
||||
if (isset($tag['length']) && '' != $tag['length']) {
|
||||
$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 .= 'if( count($__LIST__)==0 ) : echo "' . $empty . '" ;';
|
||||
$parseStr .= 'else: ';
|
||||
$parseStr .= 'foreach($__LIST__ as $key=>$'.$id.'): ';
|
||||
$parseStr .= '$mod = ($'.$key.' % '.$mod.' );';
|
||||
$parseStr .= '++$'.$key.';?>';
|
||||
$parseStr .= 'foreach($__LIST__ as $key=>$' . $id . '): ';
|
||||
$parseStr .= '$mod = ($' . $key . ' % ' . $mod . ' );';
|
||||
$parseStr .= '++$' . $key . ';?>';
|
||||
$parseStr .= ($content);
|
||||
$parseStr .= '<?php endforeach; endif; else: echo "'.$empty.'" ;endif; ?>';
|
||||
$parseStr .= '<?php endforeach; endif; else: echo "' . $empty . '" ;endif; ?>';
|
||||
|
||||
if(!empty($parseStr)) {
|
||||
if (!empty($parseStr)) {
|
||||
return $parseStr;
|
||||
}
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -114,18 +118,19 @@ class Cx extends Taglib {
|
||||
* @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 = '<?php if(is_array('.$name.')): foreach('.$name.' as $'.$key.'=>$'.$item.'): ?>';
|
||||
$parseStr .= ($content);
|
||||
$parseStr .= '<?php endforeach; endif; ?>';
|
||||
if(!empty($parseStr)) {
|
||||
public function _foreach($tag, $content)
|
||||
{
|
||||
$name = $tag['name'];
|
||||
$item = $tag['item'];
|
||||
$key = !empty($tag['key']) ? $tag['key'] : 'key';
|
||||
$name = $this->autoBuildVar($name);
|
||||
$parseStr = '<?php if(is_array(' . $name . ')): foreach(' . $name . ' as $' . $key . '=>$' . $item . '): ?>';
|
||||
$parseStr .= ($content);
|
||||
$parseStr .= '<?php endforeach; endif; ?>';
|
||||
if (!empty($parseStr)) {
|
||||
return $parseStr;
|
||||
}
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -141,9 +146,10 @@ class Cx extends Taglib {
|
||||
* @param string $content 标签内容
|
||||
* @return string
|
||||
*/
|
||||
public function _if($tag,$content) {
|
||||
$condition = $this->parseCondition($tag['condition']);
|
||||
$parseStr = '<?php if('.$condition.'): ?>'.$content.'<?php endif; ?>';
|
||||
public function _if($tag, $content)
|
||||
{
|
||||
$condition = $this->parseCondition($tag['condition']);
|
||||
$parseStr = '<?php if(' . $condition . '): ?>' . $content . '<?php endif; ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
@@ -155,9 +161,10 @@ class Cx extends Taglib {
|
||||
* @param string $content 标签内容
|
||||
* @return string
|
||||
*/
|
||||
public function _elseif($tag,$content) {
|
||||
$condition = $this->parseCondition($tag['condition']);
|
||||
$parseStr = '<?php elseif('.$condition.'): ?>';
|
||||
public function _elseif($tag, $content)
|
||||
{
|
||||
$condition = $this->parseCondition($tag['condition']);
|
||||
$parseStr = '<?php elseif(' . $condition . '): ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
@@ -167,7 +174,8 @@ class Cx extends Taglib {
|
||||
* @param array $tag 标签属性
|
||||
* @return string
|
||||
*/
|
||||
public function _else($tag) {
|
||||
public function _else($tag)
|
||||
{
|
||||
$parseStr = '<?php else: ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
@@ -185,14 +193,17 @@ class Cx extends Taglib {
|
||||
* @param string $content 标签内容
|
||||
* @return string
|
||||
*/
|
||||
public function _switch($tag,$content) {
|
||||
$name = $tag['name'];
|
||||
$varArray = explode('|',$name);
|
||||
$name = array_shift($varArray);
|
||||
$name = $this->autoBuildVar($name);
|
||||
if(count($varArray)>0)
|
||||
$name = $this->parseVarFunction($name,$varArray);
|
||||
$parseStr = '<?php switch('.$name.'): ?>'.$content.'<?php endswitch;?>';
|
||||
public function _switch($tag, $content)
|
||||
{
|
||||
$name = $tag['name'];
|
||||
$varArray = explode('|', $name);
|
||||
$name = array_shift($varArray);
|
||||
$name = $this->autoBuildVar($name);
|
||||
if (count($varArray) > 0) {
|
||||
$name = $this->parseVarFunction($name, $varArray);
|
||||
}
|
||||
|
||||
$parseStr = '<?php switch(' . $name . '): ?>' . $content . '<?php endswitch;?>';
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
@@ -203,27 +214,30 @@ class Cx extends Taglib {
|
||||
* @param string $content 标签内容
|
||||
* @return string
|
||||
*/
|
||||
public function _case($tag,$content) {
|
||||
$value = $tag['value'];
|
||||
if('$' == substr($value,0,1)) {
|
||||
$varArray = explode('|',$value);
|
||||
$value = array_shift($varArray);
|
||||
$value = $this->autoBuildVar(substr($value,1));
|
||||
if(count($varArray)>0)
|
||||
$value = $this->parseVarFunction($value,$varArray);
|
||||
$value = 'case '.$value.': ';
|
||||
}elseif(strpos($value,'|')){
|
||||
$values = explode('|',$value);
|
||||
$value = '';
|
||||
foreach ($values as $val){
|
||||
$value .= 'case "'.addslashes($val).'": ';
|
||||
public function _case($tag, $content)
|
||||
{
|
||||
$value = $tag['value'];
|
||||
if ('$' == substr($value, 0, 1)) {
|
||||
$varArray = explode('|', $value);
|
||||
$value = array_shift($varArray);
|
||||
$value = $this->autoBuildVar(substr($value, 1));
|
||||
if (count($varArray) > 0) {
|
||||
$value = $this->parseVarFunction($value, $varArray);
|
||||
}
|
||||
}else{
|
||||
$value = 'case "'.$value.'": ';
|
||||
|
||||
$value = 'case ' . $value . ': ';
|
||||
} elseif (strpos($value, '|')) {
|
||||
$values = explode('|', $value);
|
||||
$value = '';
|
||||
foreach ($values as $val) {
|
||||
$value .= 'case "' . addslashes($val) . '": ';
|
||||
}
|
||||
} else {
|
||||
$value = 'case "' . $value . '": ';
|
||||
}
|
||||
$parseStr = '<?php '.$value.' ?>'.$content;
|
||||
$parseStr = '<?php ' . $value . ' ?>' . $content;
|
||||
$isBreak = isset($tag['break']) ? $tag['break'] : '';
|
||||
if('' ==$isBreak || $isBreak) {
|
||||
if ('' == $isBreak || $isBreak) {
|
||||
$parseStr .= '<?php break;?>';
|
||||
}
|
||||
return $parseStr;
|
||||
@@ -237,7 +251,8 @@ class Cx extends Taglib {
|
||||
* @param string $content 标签内容
|
||||
* @return string
|
||||
*/
|
||||
public function _default($tag) {
|
||||
public function _default($tag)
|
||||
{
|
||||
$parseStr = '<?php default: ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
@@ -251,63 +266,76 @@ class Cx extends Taglib {
|
||||
* @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('|',$name);
|
||||
$name = array_shift($varArray);
|
||||
$name = $this->autoBuildVar($name);
|
||||
if(count($varArray)>0)
|
||||
$name = $this->parseVarFunction($name,$varArray);
|
||||
if('$' == substr($value,0,1)) {
|
||||
$value = $this->autoBuildVar(substr($value,1));
|
||||
}else {
|
||||
$value = '"'.$value.'"';
|
||||
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('|', $name);
|
||||
$name = array_shift($varArray);
|
||||
$name = $this->autoBuildVar($name);
|
||||
if (count($varArray) > 0) {
|
||||
$name = $this->parseVarFunction($name, $varArray);
|
||||
}
|
||||
$parseStr = '<?php if(('.$name.') '.$type.' '.$value.'): ?>'.$content.'<?php endif; ?>';
|
||||
|
||||
if ('$' == substr($value, 0, 1)) {
|
||||
$value = $this->autoBuildVar(substr($value, 1));
|
||||
} else {
|
||||
$value = '"' . $value . '"';
|
||||
}
|
||||
$parseStr = '<?php if((' . $name . ') ' . $type . ' ' . $value . '): ?>' . $content . '<?php endif; ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
public function _eq($tag,$content) {
|
||||
return $this->_compare($tag,$content,'eq');
|
||||
public function _eq($tag, $content)
|
||||
{
|
||||
return $this->_compare($tag, $content, 'eq');
|
||||
}
|
||||
|
||||
public function _equal($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 _neq($tag, $content)
|
||||
{
|
||||
return $this->_compare($tag, $content, 'neq');
|
||||
}
|
||||
|
||||
public function _notequal($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 _gt($tag, $content)
|
||||
{
|
||||
return $this->_compare($tag, $content, 'gt');
|
||||
}
|
||||
|
||||
public function _lt($tag,$content) {
|
||||
return $this->_compare($tag,$content,'lt');
|
||||
public function _lt($tag, $content)
|
||||
{
|
||||
return $this->_compare($tag, $content, 'lt');
|
||||
}
|
||||
|
||||
public function _egt($tag,$content) {
|
||||
return $this->_compare($tag,$content,'egt');
|
||||
public function _egt($tag, $content)
|
||||
{
|
||||
return $this->_compare($tag, $content, 'egt');
|
||||
}
|
||||
|
||||
public function _elt($tag,$content) {
|
||||
return $this->_compare($tag,$content,'elt');
|
||||
public function _elt($tag, $content)
|
||||
{
|
||||
return $this->_compare($tag, $content, 'elt');
|
||||
}
|
||||
|
||||
public function _heq($tag,$content) {
|
||||
return $this->_compare($tag,$content,'heq');
|
||||
public function _heq($tag, $content)
|
||||
{
|
||||
return $this->_compare($tag, $content, 'heq');
|
||||
}
|
||||
|
||||
public function _nheq($tag,$content) {
|
||||
return $this->_compare($tag,$content,'nheq');
|
||||
public function _nheq($tag, $content)
|
||||
{
|
||||
return $this->_compare($tag, $content, 'nheq');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -321,51 +349,57 @@ class Cx extends Taglib {
|
||||
* @param string $type 比较类型
|
||||
* @return string
|
||||
*/
|
||||
public function _range($tag,$content,$type='in') {
|
||||
$name = $tag['name'];
|
||||
$value = $tag['value'];
|
||||
$varArray = explode('|',$name);
|
||||
$name = array_shift($varArray);
|
||||
$name = $this->autoBuildVar($name);
|
||||
if(count($varArray)>0)
|
||||
$name = $this->parseVarFunction($name,$varArray);
|
||||
|
||||
$type = isset($tag['type'])?$tag['type']:$type;
|
||||
|
||||
if('$' == substr($value,0,1)) {
|
||||
$value = $this->autoBuildVar(substr($value,1));
|
||||
$str = 'is_array('.$value.')?'.$value.':explode(\',\','.$value.')';
|
||||
}else{
|
||||
$value = '"'.$value.'"';
|
||||
$str = 'explode(\',\','.$value.')';
|
||||
public function _range($tag, $content, $type = 'in')
|
||||
{
|
||||
$name = $tag['name'];
|
||||
$value = $tag['value'];
|
||||
$varArray = explode('|', $name);
|
||||
$name = array_shift($varArray);
|
||||
$name = $this->autoBuildVar($name);
|
||||
if (count($varArray) > 0) {
|
||||
$name = $this->parseVarFunction($name, $varArray);
|
||||
}
|
||||
if($type=='between') {
|
||||
$parseStr = '<?php $_RANGE_VAR_='.$str.';if('.$name.'>= $_RANGE_VAR_[0] && '.$name.'<= $_RANGE_VAR_[1]):?>'.$content.'<?php endif; ?>';
|
||||
}elseif($type=='notbetween'){
|
||||
$parseStr = '<?php $_RANGE_VAR_='.$str.';if('.$name.'<$_RANGE_VAR_[0] || '.$name.'>$_RANGE_VAR_[1]):?>'.$content.'<?php endif; ?>';
|
||||
}else{
|
||||
$fun = ($type == 'in')? 'in_array' : '!in_array';
|
||||
$parseStr = '<?php if('.$fun.'(('.$name.'), '.$str.')): ?>'.$content.'<?php endif; ?>';
|
||||
|
||||
$type = isset($tag['type']) ? $tag['type'] : $type;
|
||||
|
||||
if ('$' == substr($value, 0, 1)) {
|
||||
$value = $this->autoBuildVar(substr($value, 1));
|
||||
$str = 'is_array(' . $value . ')?' . $value . ':explode(\',\',' . $value . ')';
|
||||
} else {
|
||||
$value = '"' . $value . '"';
|
||||
$str = 'explode(\',\',' . $value . ')';
|
||||
}
|
||||
if ('between' == $type) {
|
||||
$parseStr = '<?php $_RANGE_VAR_=' . $str . ';if(' . $name . '>= $_RANGE_VAR_[0] && ' . $name . '<= $_RANGE_VAR_[1]):?>' . $content . '<?php endif; ?>';
|
||||
} elseif ('notbetween' == $type) {
|
||||
$parseStr = '<?php $_RANGE_VAR_=' . $str . ';if(' . $name . '<$_RANGE_VAR_[0] || ' . $name . '>$_RANGE_VAR_[1]):?>' . $content . '<?php endif; ?>';
|
||||
} else {
|
||||
$fun = ('in' == $type) ? 'in_array' : '!in_array';
|
||||
$parseStr = '<?php if(' . $fun . '((' . $name . '), ' . $str . ')): ?>' . $content . '<?php endif; ?>';
|
||||
}
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
// range标签的别名 用于in判断
|
||||
public function _in($tag,$content) {
|
||||
return $this->_range($tag,$content,'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 _notin($tag, $content)
|
||||
{
|
||||
return $this->_range($tag, $content, 'notin');
|
||||
}
|
||||
|
||||
public function _between($tag,$content){
|
||||
return $this->_range($tag,$content,'between');
|
||||
public function _between($tag, $content)
|
||||
{
|
||||
return $this->_range($tag, $content, 'between');
|
||||
}
|
||||
|
||||
public function _notbetween($tag,$content){
|
||||
return $this->_range($tag,$content,'notbetween');
|
||||
public function _notbetween($tag, $content)
|
||||
{
|
||||
return $this->_range($tag, $content, 'notbetween');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -377,10 +411,11 @@ class Cx extends Taglib {
|
||||
* @param string $content 标签内容
|
||||
* @return string
|
||||
*/
|
||||
public function _present($tag,$content) {
|
||||
$name = $tag['name'];
|
||||
$name = $this->autoBuildVar($name);
|
||||
$parseStr = '<?php if(isset('.$name.')): ?>'.$content.'<?php endif; ?>';
|
||||
public function _present($tag, $content)
|
||||
{
|
||||
$name = $tag['name'];
|
||||
$name = $this->autoBuildVar($name);
|
||||
$parseStr = '<?php if(isset(' . $name . ')): ?>' . $content . '<?php endif; ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
@@ -393,10 +428,11 @@ class Cx extends Taglib {
|
||||
* @param string $content 标签内容
|
||||
* @return string
|
||||
*/
|
||||
public function _notpresent($tag,$content) {
|
||||
$name = $tag['name'];
|
||||
$name = $this->autoBuildVar($name);
|
||||
$parseStr = '<?php if(!isset('.$name.')): ?>'.$content.'<?php endif; ?>';
|
||||
public function _notpresent($tag, $content)
|
||||
{
|
||||
$name = $tag['name'];
|
||||
$name = $this->autoBuildVar($name);
|
||||
$parseStr = '<?php if(!isset(' . $name . ')): ?>' . $content . '<?php endif; ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
@@ -409,17 +445,19 @@ class Cx extends Taglib {
|
||||
* @param string $content 标签内容
|
||||
* @return string
|
||||
*/
|
||||
public function _empty($tag,$content) {
|
||||
$name = $tag['name'];
|
||||
$name = $this->autoBuildVar($name);
|
||||
$parseStr = '<?php if(empty('.$name.')): ?>'.$content.'<?php endif; ?>';
|
||||
public function _empty($tag, $content)
|
||||
{
|
||||
$name = $tag['name'];
|
||||
$name = $this->autoBuildVar($name);
|
||||
$parseStr = '<?php if(empty(' . $name . ')): ?>' . $content . '<?php endif; ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
public function _notempty($tag,$content) {
|
||||
$name = $tag['name'];
|
||||
$name = $this->autoBuildVar($name);
|
||||
$parseStr = '<?php if(!empty('.$name.')): ?>'.$content.'<?php endif; ?>';
|
||||
public function _notempty($tag, $content)
|
||||
{
|
||||
$name = $tag['name'];
|
||||
$name = $this->autoBuildVar($name);
|
||||
$parseStr = '<?php if(!empty(' . $name . ')): ?>' . $content . '<?php endif; ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
@@ -430,20 +468,22 @@ class Cx extends Taglib {
|
||||
* @param <type> $content
|
||||
* @return string
|
||||
*/
|
||||
public function _defined($tag,$content) {
|
||||
$name = $tag['name'];
|
||||
$parseStr = '<?php if(defined("'.$name.'")): ?>'.$content.'<?php endif; ?>';
|
||||
public function _defined($tag, $content)
|
||||
{
|
||||
$name = $tag['name'];
|
||||
$parseStr = '<?php if(defined("' . $name . '")): ?>' . $content . '<?php endif; ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
public function _notdefined($tag,$content) {
|
||||
$name = $tag['name'];
|
||||
$parseStr = '<?php if(!defined("'.$name.'")): ?>'.$content.'<?php endif; ?>';
|
||||
public function _notdefined($tag, $content)
|
||||
{
|
||||
$name = $tag['name'];
|
||||
$parseStr = '<?php if(!defined("' . $name . '")): ?>' . $content . '<?php endif; ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
/**
|
||||
* import 标签解析 <import file="Js.Base" />
|
||||
* import 标签解析 <import file="Js.Base" />
|
||||
* <import file="Css.Base" type="css" />
|
||||
* @access public
|
||||
* @param array $tag 标签属性
|
||||
@@ -452,80 +492,86 @@ class Cx extends Taglib {
|
||||
* @param string $type 类型
|
||||
* @return string
|
||||
*/
|
||||
public function _import($tag,$content,$isFile=false,$type='') {
|
||||
$file = isset($tag['file'])?$tag['file']:$tag['href'];
|
||||
$parseStr = '';
|
||||
$endStr = '';
|
||||
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('|',$tag['value']);
|
||||
$name = array_shift($varArray);
|
||||
$name = $this->autoBuildVar($name);
|
||||
if (!empty($varArray))
|
||||
$name = $this->parseVarFunction($name,$varArray);
|
||||
else
|
||||
$name = 'isset('.$name.')';
|
||||
$parseStr .= '<?php if('.$name.'): ?>';
|
||||
$endStr = '<?php endif; ?>';
|
||||
$varArray = explode('|', $tag['value']);
|
||||
$name = array_shift($varArray);
|
||||
$name = $this->autoBuildVar($name);
|
||||
if (!empty($varArray)) {
|
||||
$name = $this->parseVarFunction($name, $varArray);
|
||||
} else {
|
||||
$name = 'isset(' . $name . ')';
|
||||
}
|
||||
|
||||
$parseStr .= '<?php if(' . $name . '): ?>';
|
||||
$endStr = '<?php endif; ?>';
|
||||
}
|
||||
if($isFile) {
|
||||
if ($isFile) {
|
||||
// 根据文件名后缀自动识别
|
||||
$type = $type?$type:(!empty($tag['type'])?strtolower($tag['type']):null);
|
||||
$type = $type ? $type : (!empty($tag['type']) ? strtolower($tag['type']) : null);
|
||||
// 文件方式导入
|
||||
$array = explode(',',$file);
|
||||
foreach ($array as $val){
|
||||
$array = explode(',', $file);
|
||||
foreach ($array as $val) {
|
||||
if (!$type || isset($reset)) {
|
||||
$type = $reset = strtolower(substr(strrchr($val, '.'),1));
|
||||
$type = $reset = strtolower(substr(strrchr($val, '.'), 1));
|
||||
}
|
||||
switch($type) {
|
||||
case 'js':
|
||||
$parseStr .= '<script type="text/javascript" src="'.$val.'"></script>';
|
||||
break;
|
||||
case 'css':
|
||||
$parseStr .= '<link rel="stylesheet" type="text/css" href="'.$val.'" />';
|
||||
break;
|
||||
case 'php':
|
||||
$parseStr .= '<?php require_cache("'.$val.'"); ?>';
|
||||
break;
|
||||
switch ($type) {
|
||||
case 'js':
|
||||
$parseStr .= '<script type="text/javascript" src="' . $val . '"></script>';
|
||||
break;
|
||||
case 'css':
|
||||
$parseStr .= '<link rel="stylesheet" type="text/css" href="' . $val . '" />';
|
||||
break;
|
||||
case 'php':
|
||||
$parseStr .= '<?php require_cache("' . $val . '"); ?>';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
// 命名空间导入模式 默认是js
|
||||
$type = $type?$type:(!empty($tag['type'])?strtolower($tag['type']):'js');
|
||||
$basepath = !empty($tag['basepath'])?$tag['basepath']:__ROOT__.'/Public';
|
||||
$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){
|
||||
list($val,$version) = explode('?',$val);
|
||||
switch($type) {
|
||||
case 'js':
|
||||
$parseStr .= '<script type="text/javascript" src="'.$basepath.'/'.str_replace(['.','#'], ['/','.'],$val).'.js'.($version?'?'.$version:'').'"></script>';
|
||||
break;
|
||||
case 'css':
|
||||
$parseStr .= '<link rel="stylesheet" type="text/css" href="'.$basepath.'/'.str_replace(['.','#'], ['/','.'],$val).'.css'.($version?'?'.$version:'').'" />';
|
||||
break;
|
||||
case 'php':
|
||||
$parseStr .= '<?php import("'.$val.'"); ?>';
|
||||
break;
|
||||
$array = explode(',', $file);
|
||||
foreach ($array as $val) {
|
||||
list($val, $version) = explode('?', $val);
|
||||
switch ($type) {
|
||||
case 'js':
|
||||
$parseStr .= '<script type="text/javascript" src="' . $basepath . '/' . str_replace(['.', '#'], ['/', '.'], $val) . '.js' . ($version ? '?' . $version : '') . '"></script>';
|
||||
break;
|
||||
case 'css':
|
||||
$parseStr .= '<link rel="stylesheet" type="text/css" href="' . $basepath . '/' . str_replace(['.', '#'], ['/', '.'], $val) . '.css' . ($version ? '?' . $version : '') . '" />';
|
||||
break;
|
||||
case 'php':
|
||||
$parseStr .= '<?php import("' . $val . '"); ?>';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $parseStr.$endStr;
|
||||
return $parseStr . $endStr;
|
||||
}
|
||||
|
||||
// import别名 采用文件方式加载(要使用命名空间必须用import) 例如 <load file="__PUBLIC__/Js/Base.js" />
|
||||
public function _load($tag,$content) {
|
||||
return $this->_import($tag,$content,true);
|
||||
public function _load($tag, $content)
|
||||
{
|
||||
return $this->_import($tag, $content, true);
|
||||
}
|
||||
|
||||
// import别名使用 导入css文件 <css file="__PUBLIC__/Css/Base.css" />
|
||||
public function _css($tag,$content) {
|
||||
return $this->_import($tag,$content,true,'css');
|
||||
public function _css($tag, $content)
|
||||
{
|
||||
return $this->_import($tag, $content, true, 'css');
|
||||
}
|
||||
|
||||
// import别名使用 导入js文件 <js file="__PUBLIC__/Js/Base.js" />
|
||||
public function _js($tag,$content) {
|
||||
return $this->_import($tag,$content,true,'js');
|
||||
public function _js($tag, $content)
|
||||
{
|
||||
return $this->_import($tag, $content, true, 'js');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -537,14 +583,15 @@ class Cx extends Taglib {
|
||||
* @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']. '\'';
|
||||
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 = '<?php '.$name.' = '.$value.'; ?>';
|
||||
$parseStr = '<?php ' . $name . ' = ' . $value . '; ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
@@ -557,17 +604,18 @@ class Cx extends Taglib {
|
||||
* @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']. '\'';
|
||||
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 = '<?php define('.$name.', '.$value.'); ?>';
|
||||
$parseStr = '<?php define(' . $name . ', ' . $value . '); ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* for标签解析
|
||||
* 格式: <for start="" end="" comparison="" step="" name="" />
|
||||
@@ -576,39 +624,47 @@ class Cx extends Taglib {
|
||||
* @param string $content 标签内容
|
||||
* @return string
|
||||
*/
|
||||
public function _for($tag, $content){
|
||||
public function _for($tag, $content)
|
||||
{
|
||||
//设置默认值
|
||||
$start = 0;
|
||||
$end = 0;
|
||||
$step = 1;
|
||||
$start = 0;
|
||||
$end = 0;
|
||||
$step = 1;
|
||||
$comparison = 'lt';
|
||||
$name = 'i';
|
||||
$name = 'i';
|
||||
$rand = rand(); //添加随机数,防止嵌套变量冲突
|
||||
//获取属性
|
||||
foreach ($tag as $key => $value){
|
||||
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;
|
||||
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;
|
||||
$comparison = $value;
|
||||
break;
|
||||
case 'name':
|
||||
$name = $value; break;
|
||||
$name = $value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$parseStr = '<?php $__FOR_START_'.$rand.'__='.$start.';$__FOR_END_'.$rand.'__='.$end.';';
|
||||
$parseStr .= 'for($'.$name.'=$__FOR_START_'.$rand.'__;'.$this->parseCondition('$'.$name.' '.$comparison.' $__FOR_END_'.$rand.'__').';$'.$name.'+='.$step.'){ ?>';
|
||||
$parseStr .= $content;
|
||||
$parseStr .= '<?php } ?>';
|
||||
|
||||
$parseStr = '<?php $__FOR_START_' . $rand . '__=' . $start . ';$__FOR_END_' . $rand . '__=' . $end . ';';
|
||||
$parseStr .= 'for($' . $name . '=$__FOR_START_' . $rand . '__;' . $this->parseCondition('$' . $name . ' ' . $comparison . ' $__FOR_END_' . $rand . '__') . ';$' . $name . '+=' . $step . '){ ?>';
|
||||
$parseStr .= $content;
|
||||
$parseStr .= '<?php } ?>';
|
||||
return $parseStr;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user