本文实例讲述了关于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框架程序设计有所帮助。
本文向大家介绍ThinkPHP中html:list标签用法分析,包括了ThinkPHP中html:list标签用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了ThinkPHP中html:list标签用法。分享给大家供大家参考,具体如下: ThinkPHP的html标签库中的list标签功能强大,但没有文档.只好看源码了.马马虎虎看了下,大概如下: datasource和show必须
但是,当我试图将此代码更改为以下代码时,我得到了一个错误-错误:Main method,在类MyClass中找不到,请将Main method,定义为:public static void Main(string[]args)。我需要接收owner和consumerName作为我的程序的参数/输入。 ,这是怎么做到的?
问题内容: 假设我有这个功能: 我想这样称呼它: 当然,不能用这种方法来完成,因为Postgres试图用该名称和三个不存在的参数来查找函数。 我试图用引号引起来,但在这种情况下,参数解释错误: data1’,’data2’,’data3 ,就像一个字符串一样。 有没有一种方法可以在参数中放置多个值,以便IN子句可以识别它? 问题答案: 您的函数将不会被创建。之后是句法废话。 无论哪种方式,带有 参
本文向大家介绍ajax传递多个参数的实现代码,包括了ajax传递多个参数的实现代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了ajax传递多个参数的具体代码,供大家参考,具体内容如下 WebService1.asmx 以上就是本文的全部内容,希望对大家的学习有所帮助。
问题内容: 在我的我有一个按钮。我想通过在方法中传递多个参数来为其添加动作。 问题答案: 也许你可以做这样的事情 根据您的要求创建标签值并保持其完整性。
问题内容: 在采用可变数目从该给出的函数被调用iterables的。 如果我有一个生成元组的生成器,这些元组通常在原位打开,该如何命名? 以下代码不起作用,因为每个生成的元组均作为map的不同参数给出: 没有生成器,要映射的所需参数可能如下所示: 问题答案: 您需要删除的电话: 这将调用,时间,应在何处接受一个参数。 在Linux上 ,如果要接受两个参数,则可以使用lambda调用,例如: