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

前端技术 2023/09/03 PHP

本文实例讲述了关于thinkphp中html:list标签传多个参数问题解决办法,分享给大家供大家参考。具体分析如下:

此改动 针对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 = \"<!-- Think 系统列表组件开始 -->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 = array();
        foreach($show as $val) {
         $fields[] = explode(\':\',$val);
        }
        if(!empty($checkbox) && \'true\'==strtolower($checkbox)) {//如果指定需要显示checkbox列
            $parseStr .=\'<th width=\"8\"><input type=\"checkbox\" id=\"check\" onclick=\"CheckAll(\'\'.$id.\'\')\"></th>\';
        }
        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>\';
            }
            $showname[2] = isset($showname[2])?$showname[2]:$showname[0];
            if($sort) {
                $parseStr .= \'<a xhref=\"javascript:sortBy(\'\'.$property[0].\'\',\'{$sort}\',\'\'.ACTION_NAME.\'\')\" title=\"按照\'.$showname[2].\'{$sortType} \">\'.$showname[0].\'<eq name=\"order\" value=\"\'.$property[0].\'\" ><img xsrc=\"/Public/images/{$sortImg}.gif\" width=\"12\" height=\"17\" border=\"0\" align=\"absmiddle\"></eq></a></th>\';
            }else{
                $parseStr .= $showname[0].\'</th>\';
            }
        }
        if(!empty($action)) {//如果指定显示操作功能列
            $parseStr .= \'<th >操作</th>\';
        }
        $parseStr .= \'</tr>\';
        $parseStr .= \'<volist name=\"\'.$datasource.\'\" id=\"\'.$name.\'\" ><tr class=\"row\" \'; //支持鼠标移动单元行颜色变化 具体方法在js中定义
        if(!empty($checkbox)) {
            $parseStr .= \'onmouseover=\"over(event)\" onmouseout=\"out(event)\" onclick=\"change(event)\" \';
        }
        $parseStr .= \'>\';
        if(!empty($checkbox)) {//如果需要显示checkbox 则在每行开头显示checkbox
            $parseStr .= \'<td><input type=\"checkbox\" name=\"key\" value=\"{$\'.$name.\'.\'.$pk.\'}\"></td>\';
        }
        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 xhref=\"javascript:\'.$href[0].\'(\'.implode(\',\',$temp).\')\">\';
                    }else{
                        $parseStr .= \'<a xhref=\"javascript:\'.$href[0].\'(\'{$\'.$name.\'.\'.$href[1].\'|addslashes}\')\">\';
                    }
                }else {
                    //如果没有指定默认传编号值
                    $parseStr .= \'<a xhref=\"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) {
                    //转换 -- 为 , 传递多个参数
                    $property[1] = str_replace(\'--\',\',\',$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) {
                     //应用 javascript
     if(strpos($val,\':\')) {
      $a = explode(\':\',$val);
      if(count($a)>2) {
                            $parseStr .= \'<a xhref=\"javascript:\'.$a[0].\'(\'{$\'.$name.\'.\'.$a[2].\'}\')\">\'.$a[1].\'</a> \';
      }else {
       $parseStr .= \'<a xhref=\"javascript:\'.$a[0].\'(\'{$\'.$name.\'.\'.$pk.\'}\')\">\'.$a[1].\'</a> \';
      }
     }else{
                        //应用 php 函数
      $array = explode(\'|\',$val);
      if(count($array)>2) {
       $parseStr .= \' <a xhref=\"javascript:\'.$array[1].\'(\'{$\'.$name.\'.\'.$array[0].\'}\')\">\'.$array[2].\'</a> \';
      }else{
                            //转换 -- 为 , 传递多个参数
                            $val = str_replace(\'--\',\',\',$val);//此处为新增内容
       $parseStr .= \' {$\'.$name.\'.\'.$val.\'} \';
      }
     }
                }
                $parseStr .= \'</td>\';
                //echo $parseStr;
                //exit();
            }
        }
        $parseStr .= \'</tr></volist><tr><td height=\"5\" colspan=\"\'.$colNum.\'\" class=\"bottomTd\"></td></tr></table>\';
        $parseStr .= \"n<!-- Think 系统列表组件结束 -->n\";
        return $parseStr;
}

模版调用演示:

复制代码 代码如下:
<html:list id=\"checkList\" name=\"user\" style=\"list\" checkbox=\"true\" action=\"true\" datasource=\"list\" show=\"id:编号,task_title:任务标题:edit,task_type|getTaskType:任务类型,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:跟踪\" />

方法 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\']:


复制代码 代码如下:
status|printAccept=$user[\'exe_user\']--$user[\'id\'],task_track:跟踪
为 传递多个参数的演示

希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

本文地址:https://www.stayed.cn/item/6767

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。