Think/Template/TagLib/Html.php
public function _grid(array $tag = [])
    {
        //表格ID
        $id = $tag['id'];
        //列表显示的数据源VoList名称
        $datasource = $tag['datasource'];
        //主键名，默认为id
        $pk = empty($tag['pk']) ? 'id' : $tag['pk'];
        //样式名
        $style = $tag['style'];
        //Vo对象名
        $name = !empty($tag['name']) ? $tag['name'] : 'vo';
        //是否显示功能操作
        $action = !empty($tag['action']) ? $tag['action'] : false;
        $key = !empty($tag['key']);
        if (isset($tag['actionlist'])) {
            //指定功能列表
            $actionlist = explode(',', trim($tag['actionlist']));
        }

        if (substr($tag['show'], 0, 1) == '$') {
            $show = $this->tpl->get(substr($tag['show'], 1));
        } else {
            $show = $tag['show'];
        }
        //列表显示字段列表
        $show = explode(',', $show);

        //计算表格的列数
        $colNum = count($show);
        if (!empty($action)) {
            $colNum++;
        }
        if (!empty($key)) {
            $colNum++;
        }

        //显示开始
        $parseStr = "<!-- 系统列表组件开始 -->\n";
        $parseStr .= '<table id="'.$id.'" class="'.$style.'" cellpadding=0 cellspacing=0 >';
        $parseStr .= '<tr><td height="5" colspan="'.$colNum.'" class="topTd" ></td></tr>';
        $parseStr .= '<tr class="row" >';
        //列表需要显示的字段
        $fields = [];
        foreach ($show as $val) {
            $fields[] = explode(':', $val);
        }

        if (!empty($key)) {
            $parseStr .= '<th width="12">No</th>';
        }
        //显示指定的字段
        foreach ($fields as $field) {
//                $property = explode('|', $field[0]);
            $showname = explode('|', $field[1]);
            if (isset($showname[1])) {
                $parseStr .= '<th width="'.$showname[1].'">';
            } else {
                $parseStr .= '<th>';
            }
            $parseStr .= $showname[0].'</th>';
        }
        //如果指定显示操作功能列
        if (!empty($action)) {
            $parseStr .= '<th >操作</th>';
        }
        $parseStr .= '</tr>';
        $parseStr .= '<volist name="'.$datasource.'" id="'.$name.'" ><tr class="row" >';    //支持鼠标移动单元行颜色变化 具体方法在js中定义

        if (!empty($key)) {
            $parseStr .= '<td>{$i}</td>';
        }
        foreach ($fields as $field) {
            //显示定义的列表字段
            $parseStr .= '<td>';
            if (!empty($field[2])) {
                // 支持列表字段链接功能 具体方法由JS函数实现
                $href = explode('|', $field[2]);
                if (count($href) > 1) {
                    //指定链接传的字段值
                    // 支持多个字段传递
                    $array = explode('^', $href[1]);
                    if (count($array) > 1) {
                        foreach ($array as $a) {
                            $temp[] = '\'{$'.$name.'.'.$a.'|addslashes}\'';
                        }
                        $parseStr .= '<a href="javascript:'.$href[0].'('.implode(',', $temp).')">';
                    } else {
                        $parseStr .= '<a href="javascript:'.$href[0].'(\'{$'.$name.'.'.$href[1].'|addslashes}\')">';
                    }
                } else {
                    //如果没有指定默认传编号值
                    $parseStr .= '<a href="javascript:'.$field[2].'(\'{$'.$name.'.'.$pk.'|addslashes}\')">';
                }
            }
            if (strpos($field[0], '^')) {
                $property = explode('^', $field[0]);
                foreach ($property as $p) {
                    $unit = explode('|', $p);
                    if (count($unit) > 1) {
                        $parseStr .= '{$'.$name.'.'.$unit[0].'|'.$unit[1].'} ';
                    } else {
                        $parseStr .= '{$'.$name.'.'.$p.'} ';
                    }
                }
            } else {
                $property = explode('|', $field[0]);
                if (count($property) > 1) {
                    $parseStr .= '{$'.$name.'.'.$property[0].'|'.$property[1].'}';
                } else {
                    $parseStr .= '{$'.$name.'.'.$field[0].'}';
                }
            }
            if (!empty($field[2])) {
                $parseStr .= '</a>';
            }
            $parseStr .= '</td>';

        }
        //显示功能操作
        if (!empty($action)) {
            //显示指定的功能项
            if (!empty($actionlist[0])) {
                $parseStr .= '<td>';
                foreach ($actionlist as $val) {
                    if (strpos($val, ':')) {
                        $a = explode(':', $val);
                        if (count($a) > 2) {
                            $parseStr .= '<a href="javascript:'.$a[0].'(\'{$'.$name.'.'.$a[2].'}\')">'.$a[1].'</a>&nbsp;';
                        } else {
                            $parseStr .= '<a href="javascript:'.$a[0].'(\'{$'.$name.'.'.$pk.'}\')">'.$a[1].'</a>&nbsp;';
                        }
                    } else {
                        $array = explode('|', $val);
                        if (count($array) > 2) {
                            $parseStr .= ' <a href="javascript:'.$array[1].'(\'{$'.$name.'.'.$array[0].'}\')">'.$array[2].'</a>&nbsp;';
                        } else {
                            $parseStr .= ' {$'.$name.'.'.$val.'}&nbsp;';
                        }
                    }
                }
                $parseStr .= '</td>';
            }
        }
        $parseStr .= '</tr></volist><tr><td height="5" colspan="'.$colNum.'" class="bottomTd"></td></tr></table>';

        return $parseStr."\n<!-- 系统列表组件结束 -->\n";
    }
public function _grid(array $tag = [])
    {
        //表格ID
        $id = $tag['id'];
        //列表显示的数据源VoList名称
        $datasource = $tag['datasource'];
        //主键名，默认为id
        $pk = empty($tag['pk']) ? 'id' : $tag['pk'];
        //样式名
        $style = $tag['style'];
        //Vo对象名
        $name = !empty($tag['name']) ? $tag['name'] : 'vo';
        //是否显示功能操作
        $action = !empty($tag['action']) ? $tag['action'] : false;
        $key = !empty($tag['key']);
        if (isset($tag['actionlist'])) {
            //指定功能列表
            $actionlist = explode(',', trim($tag['actionlist']));
        }

        if (substr($tag['show'], 0, 1) == '$') {
            $show = $this->tpl->get(substr($tag['show'], 1));
        } else {
            $show = $tag['show'];
        }
        //列表显示字段列表
        $show = explode(',', $show);

        //计算表格的列数
        $colNum = count($show);
        if (!empty($action)) {
            $colNum++;
        }
        if (!empty($key)) {
            $colNum++;
        }

        //显示开始
        $parseStr = "<!-- 系统列表组件开始 -->\n";
        $parseStr .= '<table id="'.$id.'" class="'.$style.'" cellpadding=0 cellspacing=0 >';
        $parseStr .= '<tr><td height="5" colspan="'.$colNum.'" class="topTd" ></td></tr>';
        $parseStr .= '<tr class="row" >';
        //列表需要显示的字段
        $fields = [];
        foreach ($show as $val) {
            $fields[] = explode(':', $val);
        }

        if (!empty($key)) {
            $parseStr .= '<th width="12">No</th>';
        }
        //显示指定的字段
        foreach ($fields as $field) {
//                $property = explode('|', $field[0]);
            $showname = explode('|', $field[1]);
            if (isset($showname[1])) {
                $parseStr .= '<th width="'.$showname[1].'">';
            } else {
                $parseStr .= '<th>';
            }
            $parseStr .= $showname[0].'</th>';
        }
        //如果指定显示操作功能列
        if (!empty($action)) {
            $parseStr .= '<th >操作</th>';
        }
        $parseStr .= '</tr>';
        $parseStr .= '<volist name="'.$datasource.'" id="'.$name.'" ><tr class="row" >';    //支持鼠标移动单元行颜色变化 具体方法在js中定义

        if (!empty($key)) {
            $parseStr .= '<td>{$i}</td>';
        }
        foreach ($fields as $field) {
            //显示定义的列表字段
            $parseStr .= '<td>';
            if (!empty($field[2])) {
                // 支持列表字段链接功能 具体方法由JS函数实现
                $href = explode('|', $field[2]);
                if (count($href) > 1) {
                    //指定链接传的字段值
                    // 支持多个字段传递
                    $array = explode('^', $href[1]);
                    if (count($array) > 1) {
                        foreach ($array as $a) {
                            $temp[] = '\'{$'.$name.'.'.$a.'|addslashes}\'';
                        }
                        $parseStr .= '<a href="javascript:'.$href[0].'('.implode(',', $temp).')">';
                    } else {
                        $parseStr .= '<a href="javascript:'.$href[0].'(\'{$'.$name.'.'.$href[1].'|addslashes}\')">';
                    }
                } else {
                    //如果没有指定默认传编号值
                    $parseStr .= '<a href="javascript:'.$field[2].'(\'{$'.$name.'.'.$pk.'|addslashes}\')">';
                }
            }
            if (strpos($field[0], '^')) {
                $property = explode('^', $field[0]);
                foreach ($property as $p) {
                    $unit = explode('|', $p);
                    if (count($unit) > 1) {
                        $parseStr .= '{$'.$name.'.'.$unit[0].'|'.$unit[1].'} ';
                    } else {
                        $parseStr .= '{$'.$name.'.'.$p.'} ';
                    }
                }
            } else {
                $property = explode('|', $field[0]);
                if (count($property) > 1) {
                    $parseStr .= '{$'.$name.'.'.$property[0].'|'.$property[1].'}';
                } else {
                    $parseStr .= '{$'.$name.'.'.$field[0].'}';
                }
            }
            if (!empty($field[2])) {
                $parseStr .= '</a>';
            }
            $parseStr .= '</td>';

        }
        //显示功能操作
        if (!empty($action)) {
            //显示指定的功能项
            if (!empty($actionlist[0])) {
                $parseStr .= '<td>';
                foreach ($actionlist as $val) {
                    if (strpos($val, ':')) {
                        $a = explode(':', $val);
                        if (count($a) > 2) {
                            $parseStr .= '<a href="javascript:'.$a[0].'(\'{$'.$name.'.'.$a[2].'}\')">'.$a[1].'</a>&nbsp;';
                        } else {
                            $parseStr .= '<a href="javascript:'.$a[0].'(\'{$'.$name.'.'.$pk.'}\')">'.$a[1].'</a>&nbsp;';
                        }
                    } else {
                        $array = explode('|', $val);
                        if (count($array) > 2) {
                            $parseStr .= ' <a href="javascript:'.$array[1].'(\'{$'.$name.'.'.$array[0].'}\')">'.$array[2].'</a>&nbsp;';
                        } else {
                            $parseStr .= ' {$'.$name.'.'.$val.'}&nbsp;';
                        }
                    }
                }
                $parseStr .= '</td>';
            }
        }
        $parseStr .= '</tr></volist><tr><td height="5" colspan="'.$colNum.'" class="bottomTd"></td></tr></table>';

        return $parseStr."\n<!-- 系统列表组件结束 -->\n";
    }
list标签解析
格式： <html:grid datasource="" show="vo" />


@param array $tag 标签属性

@return string