BVB Source Codes

The latest thinkphp v5.2 work order system Show Cx.class.php Source code

Return Download The latest thinkphp v5.2 work order system: download Cx.class.php Source code - Download The latest thinkphp v5.2 work order system Source code - Type:.php
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2006-2014 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. namespace Think\Template\TagLib;
  12. use Think\Template\TagLib;
  13. /**
  14.  * CX标签库解析类
  15.  */
  16. class Cx extends TagLib {
  17.  
  18.     // 标签定义
  19.     protected $tags   =  array(
  20.         // 标签定义: attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次
  21.         'php'       =>  array(),
  22.         'volist'    =>  array('attr'=>'name,id,offset,length,key,mod','level'=>3,'alias'=>'iterate'),
  23.         'foreach'   =>  array('attr'=>'name,item,key','level'=>3),
  24.         'if'        =>  array('attr'=>'condition','level'=>2),
  25.         'elseif'    =>  array('attr'=>'condition','close'=>0),
  26.         'else'      =>  array('attr'=>'','close'=>0),
  27.         'switch'    =>  array('attr'=>'name','level'=>2),
  28.         'case'      =>  array('attr'=>'value,break'),
  29.         'default'   =>  array('attr'=>'','close'=>0),
  30.         'compare'   =>  array('attr'=>'name,value,type','level'=>3,'alias'=>'eq,equal,notequal,neq,gt,lt,egt,elt,heq,nheq'),
  31.         'range'     =>  array('attr'=>'name,value,type','level'=>3,'alias'=>'in,notin,between,notbetween'),
  32.         'empty'     =>  array('attr'=>'name','level'=>3),
  33.         'notempty'  =>  array('attr'=>'name','level'=>3),
  34.         'present'   =>  array('attr'=>'name','level'=>3),
  35.         'notpresent'=>  array('attr'=>'name','level'=>3),
  36.         'defined'   =>  array('attr'=>'name','level'=>3),
  37.         'notdefined'=>  array('attr'=>'name','level'=>3),
  38.         'import'    =>  array('attr'=>'file,href,type,value,basepath','close'=>0,'alias'=>'load,css,js'),
  39.         'assign'    =>  array('attr'=>'name,value','close'=>0),
  40.         'define'    =>  array('attr'=>'name,value','close'=>0),
  41.         'for'       =>  array('attr'=>'start,end,name,comparison,step', 'level'=>3),
  42.         );
  43.  
  44.     /**
  45.      * php标签解析
  46.      * @access public
  47.      * @param array $tag 标签属性
  48.      * @param string $content  标签内容
  49.      * @return string
  50.      */
  51.     public function _php($tag,$content) {
  52.         $parseStr = '<?php '.$content.' ?>';
  53.         return $parseStr;
  54.     }
  55.  
  56.     /**
  57.      * volist标签解析 循环输出数据集
  58.      * 格式:
  59.      * <volist name="userList" id="user" empty="" >
  60.      * {user.username}
  61.      * {user.email}
  62.      * </volist>
  63.      * @access public
  64.      * @param array $tag 标签属性
  65.      * @param string $content  标签内容
  66.      * @return string|void
  67.      */
  68.     public function _volist($tag,$content) {
  69.         $name  =    $tag['name'];
  70.         $id    =    $tag['id'];
  71.         $empty =    isset($tag['empty'])?$tag['empty']:'';
  72.         $key   =    !empty($tag['key'])?$tag['key']:'i';
  73.         $mod   =    isset($tag['mod'])?$tag['mod']:'2';
  74.         // 允许使用函数设定数据集 <volist name=":fun('arg')" id="vo">{$vo.name}</volist>
  75.         $parseStr   =  '<?php ';
  76.         if(0===strpos($name,':')) {
  77.             $parseStr   .= '$_result='.substr($name,1).';';
  78.             $name   = '$_result';
  79.         }else{
  80.             $name   = $this->autoBuildVar($name);
  81.         }
  82.         $parseStr  .=  'if(is_array('.$name.')): $'.$key.' = 0;';
  83.         if(isset($tag['length']) && '' !=$tag['length'] ) {
  84.             $parseStr  .= ' $__LIST__ = array_slice('.$name.','.$tag['offset'].','.$tag['length'].',true);';
  85.         }elseif(isset($tag['offset'])  && '' !=$tag['offset']){
  86.             $parseStr  .= ' $__LIST__ = array_slice('.$name.','.$tag['offset'].',null,true);';
  87.         }else{
  88.             $parseStr .= ' $__LIST__ = '.$name.';';
  89.         }
  90.         $parseStr .= 'if( count($__LIST__)==0 ) : echo "'.$empty.'" ;';
  91.         $parseStr .= 'else: ';
  92.         $parseStr .= 'foreach($__LIST__ as $key=>$'.$id.'): ';
  93.         $parseStr .= '$mod = ($'.$key.' % '.$mod.' );';
  94.         $parseStr .= '++$'.$key.';?>';
  95.         $parseStr .= $this->tpl->parse($content);
  96.         $parseStr .= '<?php endforeach; endif; else: echo "'.$empty.'" ;endif; ?>';
  97.  
  98.         if(!empty($parseStr)) {
  99.             return $parseStr;
  100.         }
  101.         return ;
  102.     }
  103.  
  104.     /**
  105.      * foreach标签解析 循环输出数据集
  106.      * @access public
  107.      * @param array $tag 标签属性
  108.      * @param string $content  标签内容
  109.      * @return string|void
  110.      */
  111.     public function _foreach($tag,$content) {
  112.         $name       =   $tag['name'];
  113.         $item       =   $tag['item'];
  114.         $key        =   !empty($tag['key'])?$tag['key']:'key';
  115.         $name       =   $this->autoBuildVar($name);
  116.         $parseStr   =   '<?php if(is_array('.$name.')): foreach('.$name.' as $'.$key.'=>$'.$item.'): ?>';
  117.         $parseStr  .=   $this->tpl->parse($content);
  118.         $parseStr  .=   '<?php endforeach; endif; ?>';
  119.  
  120.         if(!empty($parseStr)) {
  121.             return $parseStr;
  122.         }
  123.         return ;
  124.     }
  125.  
  126.     /**
  127.      * if标签解析
  128.      * 格式:
  129.      * <if condition=" $a eq 1" >
  130.      * <elseif condition="$a eq 2" />
  131.      * <else />
  132.      * </if>
  133.      * 表达式支持 eq neq gt egt lt elt == > >= < <= or and || &&
  134.      * @access public
  135.      * @param array $tag 标签属性
  136.      * @param string $content  标签内容
  137.      * @return string
  138.      */
  139.     public function _if($tag,$content) {
  140.         $condition  =   $this->parseCondition($tag['condition']);
  141.         $parseStr   =   '<?php if('.$condition.'): ?>'.$content.'<?php endif; ?>';
  142.         return $parseStr;
  143.     }
  144.  
  145.     /**
  146.      * else标签解析
  147.      * 格式:见if标签
  148.      * @access public
  149.      * @param array $tag 标签属性
  150.      * @param string $content  标签内容
  151.      * @return string
  152.      */
  153.     public function _elseif($tag,$content) {
  154.         $condition  =   $this->parseCondition($tag['condition']);
  155.         $parseStr   =   '<?php elseif('.$condition.'): ?>';
  156.         return $parseStr;
  157.     }
  158.  
  159.     /**
  160.      * else标签解析
  161.      * @access public
  162.      * @param array $tag 标签属性
  163.      * @return string
  164.      */
  165.     public function _else($tag) {
  166.         $parseStr = '<?php else: ?>';
  167.         return $parseStr;
  168.     }
  169.  
  170.     /**
  171.      * switch标签解析
  172.      * 格式:
  173.      * <switch name="a.name" >
  174.      * <case value="1" break="false">1</case>
  175.      * <case value="2" >2</case>
  176.      * <default />other
  177.      * </switch>
  178.      * @access public
  179.      * @param array $tag 标签属性
  180.      * @param string $content  标签内容
  181.      * @return string
  182.      */
  183.     public function _switch($tag,$content) {
  184.         $name       =   $tag['name'];
  185.         $varArray   =   explode('|',$name);
  186.         $name       =   array_shift($varArray);
  187.         $name       =   $this->autoBuildVar($name);
  188.         if(count($varArray)>0)
  189.             $name   =   $this->tpl->parseVarFunction($name,$varArray);
  190.         $parseStr   =   '<?php switch('.$name.'): ?>'.$content.'<?php endswitch;?>';
  191.         return $parseStr;
  192.     }
  193.  
  194.     /**
  195.      * case标签解析 需要配合switch才有效
  196.      * @access public
  197.      * @param array $tag 标签属性
  198.      * @param string $content  标签内容
  199.      * @return string
  200.      */
  201.     public function _case($tag,$content) {
  202.         $value  = $tag['value'];
  203.         if('$' == substr($value,0,1)) {
  204.             $varArray   =   explode('|',$value);
  205.             $value          =   array_shift($varArray);
  206.             $value      =   $this->autoBuildVar(substr($value,1));
  207.             if(count($varArray)>0)
  208.                 $value  =   $this->tpl->parseVarFunction($value,$varArray);
  209.             $value      =   'case '.$value.': ';
  210.         }elseif(strpos($value,'|')){
  211.             $values     =   explode('|',$value);
  212.             $value      =   '';
  213.             foreach ($values as $val){
  214.                 $value   .=  'case "'.addslashes($val).'": ';
  215.             }
  216.         }else{
  217.             $value      =       'case "'.$value.'": ';
  218.         }
  219.         $parseStr = '<?php '.$value.' ?>'.$content;
  220.         $isBreak  = isset($tag['break']) ? $tag['break'] : '';
  221.         if('' ==$isBreak || $isBreak) {
  222.             $parseStr .= '<?php break;?>';
  223.         }
  224.         return $parseStr;
  225.     }
  226.  
  227.     /**
  228.      * default标签解析 需要配合switch才有效
  229.      * 使用: <default />ddfdf
  230.      * @access public
  231.      * @param array $tag 标签属性
  232.      * @param string $content  标签内容
  233.      * @return string
  234.      */
  235.     public function _default($tag) {
  236.         $parseStr = '<?php default: ?>';
  237.         return $parseStr;
  238.     }
  239.  
  240.     /**
  241.      * compare标签解析
  242.      * 用于值的比较 支持 eq neq gt lt egt elt heq nheq 默认是eq
  243.      * 格式: <compare name="" type="eq" value="" >content</compare>
  244.      * @access public
  245.      * @param array $tag 标签属性
  246.      * @param string $content  标签内容
  247.      * @return string
  248.      */
  249.     public function _compare($tag,$content,$type='eq') {
  250.         $name       =   $tag['name'];
  251.         $value      =   $tag['value'];
  252.         $type       =   isset($tag['type'])?$tag['type']:$type;
  253.         $type       =   $this->parseCondition(' '.$type.' ');
  254.         $varArray   =   explode('|',$name);
  255.         $name       =   array_shift($varArray);
  256.         $name       =   $this->autoBuildVar($name);
  257.         if(count($varArray)>0)
  258.             $name = $this->tpl->parseVarFunction($name,$varArray);
  259.         if('$' == substr($value,0,1)) {
  260.             $value  =  $this->autoBuildVar(substr($value,1));
  261.         }else {
  262.             $value  =   '"'.$value.'"';
  263.         }
  264.         $parseStr   =   '<?php if(('.$name.') '.$type.' '.$value.'): ?>'.$content.'<?php endif; ?>';
  265.         return $parseStr;
  266.     }
  267.  
  268.     public function _eq($tag,$content) {
  269.         return $this->_compare($tag,$content,'eq');
  270.     }
  271.  
  272.     public function _equal($tag,$content) {
  273.         return $this->_compare($tag,$content,'eq');
  274.     }
  275.  
  276.     public function _neq($tag,$content) {
  277.         return $this->_compare($tag,$content,'neq');
  278.     }
  279.  
  280.     public function _notequal($tag,$content) {
  281.         return $this->_compare($tag,$content,'neq');
  282.     }
  283.  
  284.     public function _gt($tag,$content) {
  285.         return $this->_compare($tag,$content,'gt');
  286.     }
  287.  
  288.     public function _lt($tag,$content) {
  289.         return $this->_compare($tag,$content,'lt');
  290.     }
  291.  
  292.     public function _egt($tag,$content) {
  293.         return $this->_compare($tag,$content,'egt');
  294.     }
  295.  
  296.     public function _elt($tag,$content) {
  297.         return $this->_compare($tag,$content,'elt');
  298.     }
  299.  
  300.     public function _heq($tag,$content) {
  301.         return $this->_compare($tag,$content,'heq');
  302.     }
  303.  
  304.     public function _nheq($tag,$content) {
  305.         return $this->_compare($tag,$content,'nheq');
  306.     }
  307.  
  308.     /**
  309.      * range标签解析
  310.      * 如果某个变量存在于某个范围 则输出内容 type= in 表示在范围内 否则表示在范围外
  311.      * 格式: <range name="var|function"  value="val" type='in|notin' >content</range>
  312.      * example: <range name="a"  value="1,2,3" type='in' >content</range>
  313.      * @access public
  314.      * @param array $tag 标签属性
  315.      * @param string $content  标签内容
  316.      * @param string $type  比较类型
  317.      * @return string
  318.      */
  319.     public function _range($tag,$content,$type='in') {
  320.         $name       =   $tag['name'];
  321.         $value      =   $tag['value'];
  322.         $varArray   =   explode('|',$name);
  323.         $name       =   array_shift($varArray);
  324.         $name       =   $this->autoBuildVar($name);
  325.         if(count($varArray)>0)
  326.             $name   =   $this->tpl->parseVarFunction($name,$varArray);
  327.  
  328.         $type       =   isset($tag['type'])?$tag['type']:$type;
  329.  
  330.         if('$' == substr($value,0,1)) {
  331.             $value  =   $this->autoBuildVar(substr($value,1));
  332.             $str    =   'is_array('.$value.')?'.$value.':explode(\',\','.$value.')';
  333.         }else{
  334.             $value  =   '"'.$value.'"';
  335.             $str    =   'explode(\',\','.$value.')';
  336.         }
  337.         if($type=='between') {
  338.             $parseStr = '<?php $_RANGE_VAR_='.$str.';if('.$name.'>= $_RANGE_VAR_[0] && '.$name.'<= $_RANGE_VAR_[1]):?>'.$content.'<?php endif; ?>';
  339.         }elseif($type=='notbetween'){
  340.             $parseStr = '<?php $_RANGE_VAR_='.$str.';if('.$name.'<$_RANGE_VAR_[0] || '.$name.'>$_RANGE_VAR_[1]):?>'.$content.'<?php endif; ?>';
  341.         }else{
  342.             $fun        =  ($type == 'in')? 'in_array'    :   '!in_array';
  343.             $parseStr   = '<?php if('.$fun.'(('.$name.'), '.$str.')): ?>'.$content.'<?php endif; ?>';
  344.         }
  345.         return $parseStr;
  346.     }
  347.  
  348.     // range标签的别名 用于in判断
  349.     public function _in($tag,$content) {
  350.         return $this->_range($tag,$content,'in');
  351.     }
  352.  
  353.     // range标签的别名 用于notin判断
  354.     public function _notin($tag,$content) {
  355.         return $this->_range($tag,$content,'notin');
  356.     }
  357.  
  358.     public function _between($tag,$content){
  359.         return $this->_range($tag,$content,'between');
  360.     }
  361.  
  362.     public function _notbetween($tag,$content){
  363.         return $this->_range($tag,$content,'notbetween');
  364.     }
  365.  
  366.     /**
  367.      * present标签解析
  368.      * 如果某个变量已经设置 则输出内容
  369.      * 格式: <present name="" >content</present>
  370.      * @access public
  371.      * @param array $tag 标签属性
  372.      * @param string $content  标签内容
  373.      * @return string
  374.      */
  375.     public function _present($tag,$content) {
  376.         $name       =   $tag['name'];
  377.         $name       =   $this->autoBuildVar($name);
  378.         $parseStr   =   '<?php if(isset('.$name.')): ?>'.$content.'<?php endif; ?>';
  379.         return $parseStr;
  380.     }
  381.  
  382.     /**
  383.      * notpresent标签解析
  384.      * 如果某个变量没有设置,则输出内容
  385.      * 格式: <notpresent name="" >content</notpresent>
  386.      * @access public
  387.      * @param array $tag 标签属性
  388.      * @param string $content  标签内容
  389.      * @return string
  390.      */
  391.     public function _notpresent($tag,$content) {
  392.         $name       =   $tag['name'];
  393.         $name       =   $this->autoBuildVar($name);
  394.         $parseStr   =   '<?php if(!isset('.$name.')): ?>'.$content.'<?php endif; ?>';
  395.         return $parseStr;
  396.     }
  397.  
  398.     /**
  399.      * empty标签解析
  400.      * 如果某个变量为empty 则输出内容
  401.      * 格式: <empty name="" >content</empty>
  402.      * @access public
  403.      * @param array $tag 标签属性
  404.      * @param string $content  标签内容
  405.      * @return string
  406.      */
  407.     public function _empty($tag,$content) {
  408.         $name       =   $tag['name'];
  409.         $name       =   $this->autoBuildVar($name);
  410.         $parseStr   =   '<?php if(empty('.$name.')): ?>'.$content.'<?php endif; ?>';
  411.         return $parseStr;
  412.     }
  413.  
  414.     public function _notempty($tag,$content) {
  415.         $name       =   $tag['name'];
  416.         $name       =   $this->autoBuildVar($name);
  417.         $parseStr   =   '<?php if(!empty('.$name.')): ?>'.$content.'<?php endif; ?>';
  418.         return $parseStr;
  419.     }
  420.  
  421.     /**
  422.      * 判断是否已经定义了该常量
  423.      * <defined name='TXT'>已定义</defined>
  424.      * @param <type> $attr
  425.      * @param <type> $content
  426.      * @return string
  427.      */
  428.     public function _defined($tag,$content) {
  429.         $name       =   $tag['name'];
  430.         $parseStr   =   '<?php if(defined("'.$name.'")): ?>'.$content.'<?php endif; ?>';
  431.         return $parseStr;
  432.     }
  433.  
  434.     public function _notdefined($tag,$content) {
  435.         $name       =   $tag['name'];
  436.         $parseStr   =   '<?php if(!defined("'.$name.'")): ?>'.$content.'<?php endif; ?>';
  437.         return $parseStr;
  438.     }
  439.  
  440.     /**
  441.      * import 标签解析 <import file="Js.Base" />
  442.      * <import file="Css.Base" type="css" />
  443.      * @access public
  444.      * @param array $tag 标签属性
  445.      * @param string $content  标签内容
  446.      * @param boolean $isFile  是否文件方式
  447.      * @param string $type  类型
  448.      * @return string
  449.      */
  450.     public function _import($tag,$content,$isFile=false,$type='') {
  451.         $file       =   isset($tag['file'])?$tag['file']:$tag['href'];
  452.         $parseStr   =   '';
  453.         $endStr     =   '';
  454.         // 判断是否存在加载条件 允许使用函数判断(默认为isset)
  455.         if (isset($tag['value'])) {
  456.             $varArray  =    explode('|',$tag['value']);
  457.             $name      =    array_shift($varArray);
  458.             $name      =    $this->autoBuildVar($name);
  459.             if (!empty($varArray))
  460.                 $name  =    $this->tpl->parseVarFunction($name,$varArray);
  461.             else
  462.                 $name  =    'isset('.$name.')';
  463.             $parseStr .=    '<?php if('.$name.'): ?>';
  464.             $endStr    =    '<?php endif; ?>';
  465.         }
  466.         if($isFile) {
  467.             // 根据文件名后缀自动识别
  468.             $type  = $type?$type:(!empty($tag['type'])?strtolower($tag['type']):null);
  469.             // 文件方式导入
  470.             $array =  explode(',',$file);
  471.             foreach ($array as $val){
  472.                 if (!$type || isset($reset)) {
  473.                     $type = $reset = strtolower(substr(strrchr($val, '.'),1));
  474.                 }
  475.                 switch($type) {
  476.                 case 'js':
  477.                     $parseStr .= '<script type="text/javascript" src="'.$val.'"></script>';
  478.                     break;
  479.                 case 'css':
  480.                     $parseStr .= '<link rel="stylesheet" type="text/css" href="'.$val.'" />';
  481.                     break;
  482.                 case 'php':
  483.                     $parseStr .= '<?php require_cache("'.$val.'"); ?>';
  484.                     break;
  485.                 }
  486.             }
  487.         }else{
  488.             // 命名空间导入模式 默认是js
  489.             $type       =   $type?$type:(!empty($tag['type'])?strtolower($tag['type']):'js');
  490.             $basepath   =   !empty($tag['basepath'])?$tag['basepath']:.'/Public';
  491.             // 命名空间方式导入外部文件
  492.             $array      =   explode(',',$file);
  493.             foreach ($array as $val){
  494.                 if(strpos ($val, '?')) {
  495.                     list($val,$version) =   explode('?',$val);
  496.                 } else {
  497.                     $version = '';
  498.                 }
  499.                 switch($type) {
  500.                 case 'js':
  501.                     $parseStr .= '<script type="text/javascript" src="'.$basepath.'/'.str_replace(array('.','#'), array('/','.'),$val).'.js'.($version?'?'.$version:'').'"></script>';
  502.                     break;
  503.                 case 'css':
  504.                     $parseStr .= '<link rel="stylesheet" type="text/css" href="'.$basepath.'/'.str_replace(array('.','#'), array('/','.'),$val).'.css'.($version?'?'.$version:'').'" />';
  505.                     break;
  506.                 case 'php':
  507.                     $parseStr .= '<?php import("'.$val.'"); ?>';
  508.                     break;
  509.                 }
  510.             }
  511.         }
  512.         return $parseStr.$endStr;
  513.     }
  514.  
  515.     // import别名 采用文件方式加载(要使用命名空间必须用import) 例如 <load file="/Public/Js/Base.js" />
  516.     public function _load($tag,$content) {
  517.         return $this->_import($tag,$content,true);
  518.     }
  519.  
  520.     // import别名使用 导入css文件 <css file="/Public/Css/Base.css" />
  521.     public function _css($tag,$content) {
  522.         return $this->_import($tag,$content,true,'css');
  523.     }
  524.  
  525.     // import别名使用 导入js文件 <js file="/Public/Js/Base.js" />
  526.     public function _js($tag,$content) {
  527.         return $this->_import($tag,$content,true,'js');
  528.     }
  529.  
  530.     /**
  531.      * assign标签解析
  532.      * 在模板中给某个变量赋值 支持变量赋值
  533.      * 格式: <assign name="" value="" />
  534.      * @access public
  535.      * @param array $tag 标签属性
  536.      * @param string $content  标签内容
  537.      * @return string
  538.      */
  539.     public function _assign($tag,$content) {
  540.         $name       =   $this->autoBuildVar($tag['name']);
  541.         if('$'==substr($tag['value'],0,1)) {
  542.             $value  =   $this->autoBuildVar(substr($tag['value'],1));
  543.         }else{
  544.             $value  =   '\''.$tag['value']. '\'';
  545.         }
  546.         $parseStr   =   '<?php '.$name.' = '.$value.'; ?>';
  547.         return $parseStr;
  548.     }
  549.  
  550.     /**
  551.      * define标签解析
  552.      * 在模板中定义常量 支持变量赋值
  553.      * 格式: <define name="" value="" />
  554.      * @access public
  555.      * @param array $tag 标签属性
  556.      * @param string $content  标签内容
  557.      * @return string
  558.      */
  559.     public function _define($tag,$content) {
  560.         $name       =   '\''.$tag['name']. '\'';
  561.         if('$'==substr($tag['value'],0,1)) {
  562.             $value  =   $this->autoBuildVar(substr($tag['value'],1));
  563.         }else{
  564.             $value  =   '\''.$tag['value']. '\'';
  565.         }
  566.         $parseStr   =   '<?php define('.$name.', '.$value.'); ?>';
  567.         return $parseStr;
  568.     }
  569.    
  570.     /**
  571.      * for标签解析
  572.      * 格式: <for start="" end="" comparison="" step="" name="" />
  573.      * @access public
  574.      * @param array $tag 标签属性
  575.      * @param string $content  标签内容
  576.      * @return string
  577.      */
  578.     public function _for($tag, $content){
  579.         //设置默认值
  580.         $start          = 0;
  581.         $end            = 0;
  582.         $step           = 1;
  583.         $comparison = 'lt';
  584.         $name           = 'i';
  585.         $rand       = rand(); //添加随机数,防止嵌套变量冲突
  586.         //获取属性
  587.         foreach ($tag as $key => $value){
  588.             $value = trim($value);
  589.             if(':'==substr($value,0,1))
  590.                 $value = substr($value,1);
  591.             elseif('$'==substr($value,0,1))
  592.                 $value = $this->autoBuildVar(substr($value,1));
  593.             switch ($key){
  594.                 case 'start':  
  595.                     $start      = $value; break;
  596.                 case 'end' :    
  597.                     $end        = $value; break;
  598.                 case 'step':    
  599.                     $step       = $value; break;
  600.                 case 'comparison':
  601.                     $comparison = $value; break;
  602.                 case 'name':
  603.                     $name       = $value; break;
  604.             }
  605.         }
  606.        
  607.         $parseStr   = '<?php $__FOR_START_'.$rand.'__='.$start.';$__FOR_END_'.$rand.'__='.$end.';';
  608.         $parseStr  .= 'for($'.$name.'=$__FOR_START_'.$rand.'__;'.$this->parseCondition('$'.$name.' '.$comparison.' $__FOR_END_'.$rand.'__').';$'.$name.'+='.$step.'){ ?>';
  609.         $parseStr  .= $content;
  610.         $parseStr  .= '<?php } ?>';
  611.         return $parseStr;
  612.     }
  613.  
  614. }
  615.  
downloadCx.class.php Source code - Download The latest thinkphp v5.2 work order system Source code
Related Source Codes/Software:
V3.3.6 Workerman high-performance PHP Socket (framework) - High performance PHP Socket framework Workerman re... 2017-05-03
The phosphor meeting room reservation system MRBS (loop reservation v16.0) - The phosphor meeting room reservation system MRBS ... 2017-05-03
IDC v5.2.3 agent center - IDC Centre IDC for exploitation is a PHP+MySQL age... 2017-05-03
Zen master v9.0.1 project management software - Zen is the first domestic open source project mana... 2017-05-03
Ray speed v7.03 employee files management system - Employee files project is various, and some conten... 2017-05-03
HITCMS Haitian responsive electronic mechanical v3.0 foreign trade website source code - HITCMS Haitian response electronic machinery trade... 2017-05-03
Ray v7.02 speed survey system - Lightning speed survey system is a. NET+MSSQL deve... 2017-05-03
Cool HITCMS reactive black v3.0 enterprise website source code - HITCMS-Haitian response black enterprises website ... 2017-05-03
WebOA v17.2 network office automation system - WebOA network using b/s structure development of o... 2017-05-03
Pure imitation of han site source code, one a 】 【 c9cms kernel v1.0 - Generic http://www.wufazhuce.com/Han one · Config... 2017-05-04
zone.js - Implements Zones for JavaScript ... 2017-05-11
dragonfly - A Ruby gem for on-the-fly processing - suitable fo... 2017-05-11
oh-my-fish - The Fishshell Framework. 2017-05-11
canvas-lms - The open LMS by Instructure, Inc. 2017-05-11
ledger - Double-entry accounting system with a command-line... 2017-05-11
Python - My Python Examples http://w... 2017-05-11
blade - 2017-05-11
LaZagne - Credentials recovery project 2017-05-10
Pull-to-Refresh.Rentals-iOS - This project aims to provide a simple and customiz... 2017-05-10
spoon - Distributing instrumentation tests to all your And... 2017-05-10

 Back to top