欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-31 12:37:30
本文实例讲述了关于thinkphp中html:list标签传多个参数问题解决办法,分享给大家供大家参考。具体分析如下: 此改动 针对thinkphp 2.0 版本有效,t...

本文实例讲述了关于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框架程序设计有所帮助。