thinkphp中html:list标签传递多个参数实例
本文实例讲述了关于thinkphp中html:list标签传多个参数问题解决办法,分享给大家供大家参考。具体分析如下:
此改动针对thinkphp2.0版本有效,thinkphp3.0版本未测试.
主要修改这个文件/Thinkphp/Lib/Think/Template/Taglib/TabLibHtml.class.php的_list方法
注释有新增内容的代码部分是新增加的
主要通过--分割多个参数(会自动替换为,)
publicfunction_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 .='<tableid="'.$id.'"class="'.$style.'"cellpadding=0cellspacing=0>';
$parseStr .='<tr><tdheight="5"colspan="'.$colNum.'"class="topTd"></td></tr>';
$parseStr .='<trclass="row">';
//列表需要显示的字段
$fields=array();
foreach($showas$val){
$fields[]=explode(':',$val);
}
if(!empty($checkbox)&&'true'==strtolower($checkbox)){//如果指定需要显示checkbox列
$parseStr.='<thwidth="8"><inputtype="checkbox"id="check"onclick="CheckAll(''.$id.'')"></th>';
}
if(!empty($key)){
$parseStr.='<thwidth="12">No</th>';
}
foreach($fieldsas$field){//显示指定的字段
$property=explode('|',$field[0]);
$showname=explode('|',$field[1]);
if(isset($showname[1])){
$parseStr.='<thwidth="'.$showname[1].'">';
}else{
$parseStr.='<th>';
}
$showname[2]=isset($showname[2])?$showname[2]:$showname[0];
if($sort){
$parseStr.='<axhref="javascript:sortBy(''.$property[0].'','{$sort}',''.ACTION_NAME.'')"title="按照'.$showname[2].'{$sortType}">'.$showname[0].'<eqname="order"value="'.$property[0].'"><imgxsrc="/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.='<volistname="'.$datasource.'"id="'.$name.'"><trclass="row"';//支持鼠标移动单元行颜色变化具体方法在js中定义
if(!empty($checkbox)){
$parseStr.='onmouseover="over(event)"onmouseout="out(event)"onclick="change(event)"';
}
$parseStr.='>';
if(!empty($checkbox)){//如果需要显示checkbox则在每行开头显示checkbox
$parseStr.='<td><inputtype="checkbox"name="key"value="{$'.$name.'.'.$pk.'}"></td>';
}
if(!empty($key)){
$parseStr.='<td>{$i}</td>';
}
foreach($fieldsas$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($arrayas$a){
$temp[]= ''{$'.$name.'.'.$a.'|addslashes}'';
}
$parseStr.='<axhref="javascript:'.$href[0].'('.implode(',',$temp).')">';
}else{
$parseStr.='<axhref="javascript:'.$href[0].'('{$'.$name.'.'.$href[1].'|addslashes}')">';
}
}else{
//如果没有指定默认传编号值
$parseStr.='<axhref="javascript:'.$field[2].'('{$'.$name.'.'.$pk.'|addslashes}')">';
}
}
if(strpos($field[0],'^')){
$property=explode('^',$field[0]);
foreach($propertyas$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($actionlistas$val){
//应用javascript
if(strpos($val,':')){
$a=explode(':',$val);
if(count($a)>2){
$parseStr.='<axhref="javascript:'.$a[0].'('{$'.$name.'.'.$a[2].'}')">'.$a[1].'</a> ';
}else{
$parseStr.='<axhref="javascript:'.$a[0].'('{$'.$name.'.'.$pk.'}')">'.$a[1].'</a> ';
}
}else{
//应用php函数
$array=explode('|',$val);
if(count($array)>2){
$parseStr.='<axhref="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><tdheight="5"colspan="'.$colNum.'"class="bottomTd"></td></tr></table>';
$parseStr.="n<!--Think系统列表组件结束-->n";
return$parseStr;
}
模版调用演示:
<html:listid="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-dH#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框架程序设计有所帮助。