thinkphp中html:list标签传多个参数

作者:袖梨 2022-06-25

此改动 针对thinkphp 2.0 版本有效,thinkphp 3.0 版本 未测试.

主要修改这个文件 /Thinkphp/Lib/Think/Template/Taglib/TabLibHtml.class.php 的 _list 方法

红色的代码是新增加的

主要通过 -- 分割多个参数(会自动替换为,)

 代码如下 复制代码

 

    public function _list($attr)
    {
        $tag        = $this->parseXmlAttr($attr,'list');
        $id         = $tag['id'];                       //表格ID
        $datasource = $tag['datasource'];               //列表显示的数据源VoList名称
        $pk         = empty($tag['pk'])?'id':$tag['pk'];//主键名,默认为id
        $style      = $tag['style'];                    //样式名
        $name       = !empty($tag['name'])?$tag['name']:'vo';                 //Vo对象名
        $action     = $tag['action']=='true'?true:false;                   //是否显示功能操作
        $key         =  !empty($tag['key'])?true:false;
        $sort      = $tag['sort']=='false'?false:true;
        $checkbox   = $tag['checkbox'];                 //是否显示Checkbox
        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($checkbox))   $colNum++;
        if(!empty($action))     $colNum++;
        if(!empty($key))  $colNum++;

        //显示开始
  $parseStr = "n";
        $parseStr  .= '

foreach($show as $val) {
         $fields[] = explode(':',$val);
        }
        if(!empty($checkbox) && 'true'==strtolower($checkbox)) {//如果指定需要显示checkbox列
            $parseStr .='
No';
            }else {
                $parseStr .= '
';
            }
            $showname[2] = isset($showname[2])?$showname[2]:$showname[0];
            if($sort) {
                $parseStr .= 'javascript:sortBy(''.$property[0].'','{$sort}',''.ACTION_NAME.'')" title="按照'.$showname[2].'{$sortType} ">'.$showname[0].'

        }
        if(!empty($action)) {//如果指定显示操作功能列
            $parseStr .= '

操作';
        }

        $parseStr .= '

';
        $parseStr .= '         if(!empty($checkbox)) {
            $parseStr .= 'onmouseover="over(event)" onmouseout="out(event)" onclick="change(event)" ';
        }
        $parseStr .= '>';
        if(!empty($checkbox)) {//如果需要显示checkbox 则在每行开头显示checkbox
            $parseStr .= '';
        }
        if(!empty($key)) {
            $parseStr .= '{$i}';
        }
        foreach($fields as $field) {
            //显示定义的列表字段
            $parseStr   .=  '';             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 .= '';                     }else{                         $parseStr .= '';                     }                 }else {                     //如果没有指定默认传编号值                     $parseStr .= '';                 }             }             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) {                     //转换 -- 为 , 传递多个参数                     $property[1] = str_replace('--',',',$property[1]);                     $parseStr .= '{$'.$name.'.'.$property[0].'|'.$property[1].'}';                 }else {                     $parseStr .= '{$'.$name.'.'.$field[0].'}';                 }             }             if(!empty($field[2])) {                 $parseStr .= '';             }             $parseStr .= '';

        }
        if(!empty($action)) {//显示功能操作
            if(!empty($actionlist[0])) {//显示指定的功能项
                $parseStr .= '

';                 foreach($actionlist as $val) {                      //应用 javascript      if(strpos($val,':')) {       $a = explode(':',$val);       if(count($a)>2) {                             $parseStr .= ''.$a[1].' ';       }else {        $parseStr .= ''.$a[1].' ';       }      }else{                         //应用 php 函数       $array = explode('|',$val);       if(count($array)>2) {        $parseStr .= ' '.$array[2].' ';       }else{                             //转换 -- 为 , 传递多个参数                             $val = str_replace('--',',',$val);        $parseStr .= ' {$'.$name.'.'.$val.'} ';       }      }                 }                 $parseStr .= '';
                //echo $parseStr;
                //exit();
            }
        }
        $parseStr .= '';
        $parseStr .= "nn";
        return $parseStr;
    } 


 
模版调用演示:

红色标记的方法 为 传递多个参数的演示

方法 getTaskCategory 传递了3个参数 顺序是 $user['task_category']  $user['exe_user']  $user['id']

方法 printAccept 传递了3个参数 顺序是 $user['status']  $user['exe_user']  $user['id']

 代码如下 复制代码

 

task_category|getTaskCategory=$user['exe_user']--$user['id']:所属栏目,hope_time|toDate='Y-m-d H#i':期望完成时间,process_rate|printRate:当前进度,exe_user|getUserName:处理人,status|getTaskStatus:状态" actionlist="status|printAccept=$user['exe_user']--$user['id'],task_track:跟踪" /> 

相关文章

精彩推荐