改进变量标签正则表达式;修正volist标签参数判断bug;

This commit is contained in:
oldrind
2016-01-29 22:09:14 +08:00
parent d45e93e5e8
commit d3a7a6207a
4 changed files with 92 additions and 25 deletions

View File

@@ -81,6 +81,8 @@ class Cx extends Taglib
$empty = isset($tag['empty']) ? $tag['empty'] : '';
$key = !empty($tag['key']) ? $tag['key'] : 'i';
$mod = isset($tag['mod']) ? $tag['mod'] : '2';
$offset = !empty($tag['offset']) && is_numeric($tag['offset']) ? intval($tag['offset']) : 0;
$length = !empty($tag['length']) && is_numeric($tag['length']) ? intval($tag['length']) : 'null';
// 允许使用函数设定数据集 <volist name=":fun('arg')" id="vo">{$vo.name}</volist>
$parseStr = '<?php ';
$flag = substr($name, 0, 1);
@@ -92,10 +94,9 @@ class Cx extends Taglib
$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);';
// 设置了输出数组长度
if (0 != $offset || 'null' != $length) {
$parseStr .= '$__LIST__ = array_slice(' . $name . ',' . $offset . ',' . $length . ', true); ';
} else {
$parseStr .= ' $__LIST__ = ' . $name . ';';
}
@@ -153,7 +154,7 @@ class Cx extends Taglib
if (!isset($var)) {
$var = '$_' . uniqid();
}
$parseStr .= $var . ' = array_slice(' . $name . ',' . $offset . ',' . $length . ',true); ';
$parseStr .= $var . ' = array_slice(' . $name . ',' . $offset . ',' . $length . ', true); ';
} else {
$var = &$name;
}