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