请选择 进入手机版 | 继续访问电脑版
绿茶科技社区

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
解决此问题有两种办法:1、第三层if换成eq或者原生<?php 'abc';>  2、修改Tp核心配置文件1、第三层if换成eq或者原生<?php 'abc';>
如下图<eq name="uid" value="">未登录状态下<else />登录状态下 </eq>
name为条件 和value为值
2、修改TP核心配置文件,路径如下
  1. thinkphp/ThinkPHP/Library/Think/Template/TagLib/Cx.class.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.      * php标签解析
  45.      * @access public
  46.      * @param array $tag 标签属性
  47.      * @param string $content  标签内容
  48.      * @return string
  49.      */
  50.     public function _php($tag, $content)
  51.     {
  52.         $parseStr = '<?php ' . $content . ' ?>';
  53.         return $parseStr;
  54.     }
  55.     /**
  56.      * volist标签解析 循环输出数据集
  57.      * 格式:
  58.      * <volist name="userList" id="user" empty="" >
  59.      * {user.username}
  60.      * {user.email}
  61.      * </volist>
  62.      * @access public
  63.      * @param array $tag 标签属性
  64.      * @param string $content  标签内容
  65.      * @return string|void
  66.      */
  67.     public function _volist($tag, $content)
  68.     {
  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 . ')):


  83. . $key . ' = 0;';
  84.         if (isset($tag['length']) && '' != $tag['length']) {
  85.             $parseStr .= ' $__LIST__ = array_slice(' . $name . ',' . $tag['offset'] . ',' . $tag['length'] . ',true);';
  86.         } elseif (isset($tag['offset']) && '' != $tag['offset']) {
  87.             $parseStr .= ' $__LIST__ = array_slice(' . $name . ',' . $tag['offset'] . ',null,true);';
  88.         } else {
  89.             $parseStr .= ' $__LIST__ = ' . $name . ';';
  90.         }
  91.         $parseStr .= 'if( count($__LIST__)==0 ) : echo "' . $empty . '" ;';
  92.         $parseStr .= 'else: ';
  93.         $parseStr .= 'foreach($__LIST__ as $key=>


  94. . $id . '): ';
  95.         $parseStr .= '$mod = (


  96. . $key . ' % ' . $mod . ' );';
  97.         $parseStr .= '++


  98. . $key . ';?>';
  99.         $parseStr .= $this->tpl->parse($content);
  100.         $parseStr .= '<?php endforeach; endif; else: echo "' . $empty . '" ;endif; ?>';
  101.         if (!empty($parseStr)) {
  102.             return $parseStr;
  103.         }
  104.         return;
  105.     }
  106.     /**
  107.      * foreach标签解析 循环输出数据集
  108.      * @access public
  109.      * @param array $tag 标签属性
  110.      * @param string $content  标签内容
  111.      * @return string|void
  112.      */
  113.     public function _foreach($tag, $content)
  114.     {
  115.         $name     = $tag['name'];
  116.         $item     = $tag['item'];
  117.         $key      = !empty($tag['key']) ? $tag['key'] : 'key';
  118.         $name     = $this->autoBuildVar($name);
  119.         $parseStr = '<?php if(is_array(' . $name . ')): foreach(' . $name . ' as


  120. . $key . '=>


  121. . $item . '): ?>';
  122.         $parseStr .= $this->tpl->parse($content);
  123.         $parseStr .= '<?php endforeach; endif; ?>';
  124.         if (!empty($parseStr)) {
  125.             return $parseStr;
  126.         }
  127.         return;
  128.     }
  129.     /**
  130.      * if标签解析
  131.      * 格式:
  132.      * <if condition=" $a eq 1" >
  133.      * <elseif condition="$a eq 2" />
  134.      * <else />
  135.      * </if>
  136.      * 表达式支持 eq neq gt egt lt elt == > >= < <= or and || &&
  137.      * @access public
  138.      * @param array $tag 标签属性
  139.      * @param string $content  标签内容
  140.      * @return string
  141.      */
  142.     public function _if($tag, $content)
  143.     {
  144.         $condition = $this->parseCondition($tag['condition']);
  145.         $parseStr  = '<?php if(' . $condition . '): ?>' . $content . '<?php endif; ?>';
  146.         return $parseStr;
  147.     }
  148.     /**
  149.      * else标签解析
  150.      * 格式:见if标签
  151.      * @access public
  152.      * @param array $tag 标签属性
  153.      * @param string $content  标签内容
  154.      * @return string
  155.      */
  156.     public function _elseif($tag, $content)
  157.     {
  158.         $condition = $this->parseCondition($tag['condition']);
  159.         $parseStr  = '<?php elseif(' . $condition . '): ?>';
  160.         return $parseStr;
  161.     }
  162.     /**
  163.      * else标签解析
  164.      * @access public
  165.      * @param array $tag 标签属性
  166.      * @return string
  167.      */
  168.     public function _else($tag)
  169.     {
  170.         $parseStr = '<?php else: ?>';
  171.         return $parseStr;
  172.     }
  173.     /**
  174.      * switch标签解析
  175.      * 格式:
  176.      * <switch name="a.name" >
  177.      * <case value="1" break="false">1</case>
  178.      * <case value="2" >2</case>
  179.      * <default />other
  180.      * </switch>
  181.      * @access public
  182.      * @param array $tag 标签属性
  183.      * @param string $content  标签内容
  184.      * @return string
  185.      */
  186.     public function _switch($tag, $content)
  187.     {
  188.         $name     = $tag['name'];
  189.         $varArray = explode('|', $name);
  190.         $name     = array_shift($varArray);
  191.         $name     = $this->autoBuildVar($name);
  192.         if (count($varArray) > 0) {
  193.             $name = $this->tpl->parseVarFunction($name, $varArray);
  194.         }
  195.         $parseStr = '<?php switch(' . $name . '): ?>' . $content . '<?php endswitch;?>';
  196.         return $parseStr;
  197.     }
  198.     /**
  199.      * case标签解析 需要配合switch才有效
  200.      * @access public
  201.      * @param array $tag 标签属性
  202.      * @param string $content  标签内容
  203.      * @return string
  204.      */
  205.     public function _case($tag, $content)
  206.     {
  207.         $value = $tag['value'];
  208.         if ('


  209. == substr($value, 0, 1)) {
  210.             $varArray = explode('|', $value);
  211.             $value    = array_shift($varArray);
  212.             $value    = $this->autoBuildVar(substr($value, 1));
  213.             if (count($varArray) > 0) {
  214.                 $value = $this->tpl->parseVarFunction($value, $varArray);
  215.             }
  216.             $value = 'case ' . $value . ': ';
  217.         } elseif (strpos($value, '|')) {
  218.             $values = explode('|', $value);
  219.             $value  = '';
  220.             foreach ($values as $val) {
  221.                 $value .= 'case "' . addslashes($val) . '": ';
  222.             }
  223.         } else {
  224.             $value = 'case "' . $value . '": ';
  225.         }
  226.         $parseStr = '<?php ' . $value . ' ?>' . $content;
  227.         $isBreak  = isset($tag['break']) ? $tag['break'] : '';
  228.         if ('' == $isBreak || $isBreak) {
  229.             $parseStr .= '<?php break;?>';
  230.         }
  231.         return $parseStr;
  232.     }
  233.     /**
  234.      * default标签解析 需要配合switch才有效
  235.      * 使用: <default />ddfdf
  236.      * @access public
  237.      * @param array $tag 标签属性
  238.      * @param string $content  标签内容
  239.      * @return string
  240.      */
  241.     public function _default($tag)
  242.     {
  243.         $parseStr = '<?php default: ?>';
  244.         return $parseStr;
  245.     }
  246.     /**
  247.      * compare标签解析
  248.      * 用于值的比较 支持 eq neq gt lt egt elt heq nheq 默认是eq
  249.      * 格式: <compare name="" type="eq" value="" >content</compare>
  250.      * @access public
  251.      * @param array $tag 标签属性
  252.      * @param string $content  标签内容
  253.      * @return string
  254.      */
  255.     public function _compare($tag, $content, $type = 'eq')
  256.     {
  257.         $name     = $tag['name'];
  258.         $value    = $tag['value'];
  259.         $type     = isset($tag['type']) ? $tag['type'] : $type;
  260.         $type     = $this->parseCondition(' ' . $type . ' ');
  261.         $varArray = explode('|', $name);
  262.         $name     = array_shift($varArray);
  263.         $name     = $this->autoBuildVar($name);
  264.         if (count($varArray) > 0) {
  265.             $name = $this->tpl->parseVarFunction($name, $varArray);
  266.         }
  267.         if ('


  268. == substr($value, 0, 1)) {
  269.             $value = $this->autoBuildVar(substr($value, 1));
  270.         } else {
  271.             $value = '"' . $value . '"';
  272.         }
  273.         $parseStr = '<?php if((' . $name . ') ' . $type . ' ' . $value . '): ?>' . $content . '<?php endif; ?>';
  274.         return $parseStr;
  275.     }
  276.     public function _eq($tag, $content)
  277.     {
  278.         return $this->_compare($tag, $content, 'eq');
  279.     }
  280.     public function _equal($tag, $content)
  281.     {
  282.         return $this->_compare($tag, $content, 'eq');
  283.     }
  284.     public function _neq($tag, $content)
  285.     {
  286.         return $this->_compare($tag, $content, 'neq');
  287.     }
  288.     public function _notequal($tag, $content)
  289.     {
  290.         return $this->_compare($tag, $content, 'neq');
  291.     }
  292.     public function _gt($tag, $content)
  293.     {
  294.         return $this->_compare($tag, $content, 'gt');
  295.     }
  296.     public function _lt($tag, $content)
  297.     {
  298.         return $this->_compare($tag, $content, 'lt');
  299.     }
  300.     public function _egt($tag, $content)
  301.     {
  302.         return $this->_compare($tag, $content, 'egt');
  303.     }
  304.     public function _elt($tag, $content)
  305.     {
  306.         return $this->_compare($tag, $content, 'elt');
  307.     }
  308.     public function _heq($tag, $content)
  309.     {
  310.         return $this->_compare($tag, $content, 'heq');
  311.     }
  312.     public function _nheq($tag, $content)
  313.     {
  314.         return $this->_compare($tag, $content, 'nheq');
  315.     }
  316.     /**
  317.      * range标签解析
  318.      * 如果某个变量存在于某个范围 则输出内容 type= in 表示在范围内 否则表示在范围外
  319.      * 格式: <range name="var|function"  value="val" type='in|notin' >content</range>
  320.      * example: <range name="a"  value="1,2,3" type='in' >content</range>
  321.      * @access public
  322.      * @param array $tag 标签属性
  323.      * @param string $content  标签内容
  324.      * @param string $type  比较类型
  325.      * @return string
  326.      */
  327.     public function _range($tag, $content, $type = 'in')
  328.     {
  329.         $name     = $tag['name'];
  330.         $value    = $tag['value'];
  331.         $varArray = explode('|', $name);
  332.         $name     = array_shift($varArray);
  333.         $name     = $this->autoBuildVar($name);
  334.         if (count($varArray) > 0) {
  335.             $name = $this->tpl->parseVarFunction($name, $varArray);
  336.         }
  337.         $type = isset($tag['type']) ? $tag['type'] : $type;
  338.         if ('


  339. == substr($value, 0, 1)) {
  340.             $value = $this->autoBuildVar(substr($value, 1));
  341.             $str   = 'is_array(' . $value . ')?' . $value . ':explode(\',\',' . $value . ')';
  342.         } else {
  343.             $value = '"' . $value . '"';
  344.             $str   = 'explode(\',\',' . $value . ')';
  345.         }
  346.         if ('between' == $type) {
  347.             $parseStr = '<?php $_RANGE_VAR_=' . $str . ';if(' . $name . '>= $_RANGE_VAR_[0] && ' . $name . '<= $_RANGE_VAR_[1]):?>' . $content . '<?php endif; ?>';
  348.         } elseif ('notbetween' == $type) {
  349.             $parseStr = '<?php $_RANGE_VAR_=' . $str . ';if(' . $name . '<$_RANGE_VAR_[0] || ' . $name . '>$_RANGE_VAR_[1]):?>' . $content . '<?php endif; ?>';
  350.         } else {
  351.             $fun      = ('in' == $type) ? 'in_array' : '!in_array';
  352.             $parseStr = '<?php if(' . $fun . '((' . $name . '), ' . $str . ')): ?>' . $content . '<?php endif; ?>';
  353.         }
  354.         return $parseStr;
  355.     }
  356.     // range标签的别名 用于in判断
  357.     public function _in($tag, $content)
  358.     {
  359.         return $this->_range($tag, $content, 'in');
  360.     }
  361.     // range标签的别名 用于notin判断
  362.     public function _notin($tag, $content)
  363.     {
  364.         return $this->_range($tag, $content, 'notin');
  365.     }
  366.     public function _between($tag, $content)
  367.     {
  368.         return $this->_range($tag, $content, 'between');
  369.     }
  370.     public function _notbetween($tag, $content)
  371.     {
  372.         return $this->_range($tag, $content, 'notbetween');
  373.     }
  374.     /**
  375.      * present标签解析
  376.      * 如果某个变量已经设置 则输出内容
  377.      * 格式: <present name="" >content</present>
  378.      * @access public
  379.      * @param array $tag 标签属性
  380.      * @param string $content  标签内容
  381.      * @return string
  382.      */
  383.     public function _present($tag, $content)
  384.     {
  385.         $name     = $tag['name'];
  386.         $name     = $this->autoBuildVar($name);
  387.         $parseStr = '<?php if(isset(' . $name . ')): ?>' . $content . '<?php endif; ?>';
  388.         return $parseStr;
  389.     }
  390.     /**
  391.      * notpresent标签解析
  392.      * 如果某个变量没有设置,则输出内容
  393.      * 格式: <notpresent name="" >content</notpresent>
  394.      * @access public
  395.      * @param array $tag 标签属性
  396.      * @param string $content  标签内容
  397.      * @return string
  398.      */
  399.     public function _notpresent($tag, $content)
  400.     {
  401.         $name     = $tag['name'];
  402.         $name     = $this->autoBuildVar($name);
  403.         $parseStr = '<?php if(!isset(' . $name . ')): ?>' . $content . '<?php endif; ?>';
  404.         return $parseStr;
  405.     }
  406.     /**
  407.      * empty标签解析
  408.      * 如果某个变量为empty 则输出内容
  409.      * 格式: <empty name="" >content</empty>
  410.      * @access public
  411.      * @param array $tag 标签属性
  412.      * @param string $content  标签内容
  413.      * @return string
  414.      */
  415.     public function _empty($tag, $content)
  416.     {
  417.         $name     = $tag['name'];
  418.         $name     = $this->autoBuildVar($name);
  419.         $parseStr = '<?php if(empty(' . $name . ')): ?>' . $content . '<?php endif; ?>';
  420.         return $parseStr;
  421.     }
  422.     public function _notempty($tag, $content)
  423.     {
  424.         $name     = $tag['name'];
  425.         $name     = $this->autoBuildVar($name);
  426.         $parseStr = '<?php if(!empty(' . $name . ')): ?>' . $content . '<?php endif; ?>';
  427.         return $parseStr;
  428.     }
  429.     /**
  430.      * 判断是否已经定义了该常量
  431.      * <defined name='TXT'>已定义</defined>
  432.      * @param <type> $attr
  433.      * @param <type> $content
  434.      * @return string
  435.      */
  436.     public function _defined($tag, $content)
  437.     {
  438.         $name     = $tag['name'];
  439.         $parseStr = '<?php if(defined("' . $name . '")): ?>' . $content . '<?php endif; ?>';
  440.         return $parseStr;
  441.     }
  442.     public function _notdefined($tag, $content)
  443.     {
  444.         $name     = $tag['name'];
  445.         $parseStr = '<?php if(!defined("' . $name . '")): ?>' . $content . '<?php endif; ?>';
  446.         return $parseStr;
  447.     }
  448.     /**
  449.      * import 标签解析 <import file="Js.Base" />
  450.      * <import file="Css.Base" type="css" />
  451.      * @access public
  452.      * @param array $tag 标签属性
  453.      * @param string $content  标签内容
  454.      * @param boolean $isFile  是否文件方式
  455.      * @param string $type  类型
  456.      * @return string
  457.      */
  458.     public function _import($tag, $content, $isFile = false, $type = '')
  459.     {
  460.         $file     = isset($tag['file']) ? $tag['file'] : $tag['href'];
  461.         $parseStr = '';
  462.         $endStr   = '';
  463.         // 判断是否存在加载条件 允许使用函数判断(默认为isset)
  464.         if (isset($tag['value'])) {
  465.             $varArray = explode('|', $tag['value']);
  466.             $name     = array_shift($varArray);
  467.             $name     = $this->autoBuildVar($name);
  468.             if (!empty($varArray)) {
  469.                 $name = $this->tpl->parseVarFunction($name, $varArray);
  470.             } else {
  471.                 $name = 'isset(' . $name . ')';
  472.             }
  473.             $parseStr .= '<?php if(' . $name . '): ?>';
  474.             $endStr = '<?php endif; ?>';
  475.         }
  476.         if ($isFile) {
  477.             // 根据文件名后缀自动识别
  478.             $type = $type ? $type : (!empty($tag['type']) ? strtolower($tag['type']) : null);
  479.             // 文件方式导入
  480.             $array = explode(',', $file);
  481.             foreach ($array as $val) {
  482.                 if (!$type || isset($reset)) {
  483.                     $type = $reset = strtolower(substr(strrchr($val, '.'), 1));
  484.                 }
  485.                 switch ($type) {
  486.                     case 'js':
  487.                         $parseStr .= '<script type="text/javascript" src="' . $val . '"></script>';
  488.                         break;
  489.                     case 'css':
  490.                         $parseStr .= '<link rel="stylesheet" type="text/css" href="' . $val . '" />';
  491.                         break;
  492.                     case 'php':
  493.                         $parseStr .= '<?php require_cache("' . $val . '"); ?>';
  494.                         break;
  495.                 }
  496.             }
  497.         } else {
  498.             // 命名空间导入模式 默认是js
  499.             $type     = $type ? $type : (!empty($tag['type']) ? strtolower($tag['type']) : 'js');
  500.             $basepath = !empty($tag['basepath']) ? $tag['basepath'] : __ROOT__ . '/Public';
  501.             // 命名空间方式导入外部文件
  502.             $array = explode(',', $file);
  503.             foreach ($array as $val) {
  504.                 if (strpos($val, '?')) {
  505.                     list($val, $version) = explode('?', $val);
  506.                 } else {
  507.                     $version = '';
  508.                 }
  509.                 switch ($type) {
  510.                     case 'js':
  511.                         $parseStr .= '<script type="text/javascript" src="' . $basepath . '/' . str_replace(array('.', '#'), array('/', '.'), $val) . '.js' . ($version ? '?' . $version : '') . '"></script>';
  512.                         break;
  513.                     case 'css':
  514.                         $parseStr .= '<link rel="stylesheet" type="text/css" href="' . $basepath . '/' . str_replace(array('.', '#'), array('/', '.'), $val) . '.css' . ($version ? '?' . $version : '') . '" />';
  515.                         break;
  516.                     case 'php':
  517.                         $parseStr .= '<?php import("' . $val . '"); ?>';
  518.                         break;
  519.                 }
  520.             }
  521.         }
  522.         return $parseStr . $endStr;
  523.     }
  524.     // import别名 采用文件方式加载(要使用命名空间必须用import) 例如 <load file="__PUBLIC__/Js/Base.js" />
  525.     public function _load($tag, $content)
  526.     {
  527.         return $this->_import($tag, $content, true);
  528.     }
  529.     // import别名使用 导入css文件 <css file="__PUBLIC__/Css/Base.css" />
  530.     public function _css($tag, $content)
  531.     {
  532.         return $this->_import($tag, $content, true, 'css');
  533.     }
  534.     // import别名使用 导入js文件 <js file="__PUBLIC__/Js/Base.js" />
  535.     public function _js($tag, $content)
  536.     {
  537.         return $this->_import($tag, $content, true, 'js');
  538.     }
  539.     /**
  540.      * assign标签解析
  541.      * 在模板中给某个变量赋值 支持变量赋值
  542.      * 格式: <assign name="" value="" />
  543.      * @access public
  544.      * @param array $tag 标签属性
  545.      * @param string $content  标签内容
  546.      * @return string
  547.      */
  548.     public function _assign($tag, $content)
  549.     {
  550.         $name = $this->autoBuildVar($tag['name']);
  551.         if ('


  552. == substr($tag['value'], 0, 1)) {
  553.             $value = $this->autoBuildVar(substr($tag['value'], 1));
  554.         } else {
  555.             $value = '\'' . $tag['value'] . '\'';
  556.         }
  557.         $parseStr = '<?php ' . $name . ' = ' . $value . '; ?>';
  558.         return $parseStr;
  559.     }
  560.     /**
  561.      * define标签解析
  562.      * 在模板中定义常量 支持变量赋值
  563.      * 格式: <define name="" value="" />
  564.      * @access public
  565.      * @param array $tag 标签属性
  566.      * @param string $content  标签内容
  567.      * @return string
  568.      */
  569.     public function _define($tag, $content)
  570.     {
  571.         $name = '\'' . $tag['name'] . '\'';
  572.         if ('


  573. == substr($tag['value'], 0, 1)) {
  574.             $value = $this->autoBuildVar(substr($tag['value'], 1));
  575.         } else {
  576.             $value = '\'' . $tag['value'] . '\'';
  577.         }
  578.         $parseStr = '<?php define(' . $name . ', ' . $value . '); ?>';
  579.         return $parseStr;
  580.     }
  581.     /**
  582.      * for标签解析
  583.      * 格式: <for start="" end="" comparison="" step="" name="" />
  584.      * @access public
  585.      * @param array $tag 标签属性
  586.      * @param string $content  标签内容
  587.      * @return string
  588.      */
  589.     public function _for($tag, $content)
  590.     {
  591.         //设置默认值
  592.         $start      = 0;
  593.         $end        = 0;
  594.         $step       = 1;
  595.         $comparison = 'lt';
  596.         $name       = 'i';
  597.         $rand       = rand(); //添加随机数,防止嵌套变量冲突
  598.         //获取属性
  599.         foreach ($tag as $key => $value) {
  600.             $value = trim($value);
  601.             if (':' == substr($value, 0, 1)) {
  602.                 $value = substr($value, 1);
  603.             } elseif ('


  604. == substr($value, 0, 1)) {
  605.                 $value = $this->autoBuildVar(substr($value, 1));
  606.             }
  607.             switch ($key) {
  608.                 case 'start':
  609.                     $start = $value;
  610.                     break;
  611.                 case 'end':
  612.                     $end = $value;
  613.                     break;
  614.                 case 'step':
  615.                     $step = $value;
  616.                     break;
  617.                 case 'comparison':
  618.                     $comparison = $value;
  619.                     break;
  620.                 case 'name':
  621.                     $name = $value;
  622.                     break;
  623.             }
  624.         }
  625.         $parseStr = '<?php $__FOR_START_' . $rand . '__=' . $start . ';$__FOR_END_' . $rand . '__=' . $end . ';';
  626.         $parseStr .= 'for(


  627. . $name . '=$__FOR_START_' . $rand . '__;' . $this->parseCondition('


  628. . $name . ' ' . $comparison . ' $__FOR_END_' . $rand . '__') . ';


  629. . $name . '+=' . $step . '){ ?>';
  630.         $parseStr .= $content;
  631.         $parseStr .= '<?php } ?>';
  632.         return $parseStr;
  633.     }
  634. }
复制代码



分享到 :
0 人收藏

2 个回复

倒序浏览
sparkdev  高级会员 | 2019-10-10 10:21:22
我了个去,顶了
王清培  高级会员 | 5 天前
我了个去,顶了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

举报|Archiver|手机版|小黑屋|Lvchakeji Inc.  

Powered by Discuz! X3.3 © 2001-2016 Comsenz Inc.

返回顶部