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


Posted in PHP onOctober 30, 2014

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

PHP 相关文章推荐
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
PHP 彩色文字实现代码
Jun 29 PHP
PHP使用Alexa API获取网站的Alexa排名例子
Jun 12 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
php将html转成wml的WAP标记语言实例
Jul 08 PHP
从刷票了解获得客户端IP的方法
Sep 21 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
关于Laravel Route重定向的一个注意点
Jan 16 PHP
Yii2 批量插入、更新数据实例
Mar 15 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
May 12 PHP
php PDO属性设置与操作方法分析
Dec 27 PHP
如何让CI框架支持service层
Oct 29 #PHP
使用array_map简单搞定PHP删除文件、删除目录
Oct 29 #PHP
PHPUnit安装及使用示例
Oct 29 #PHP
laravel安装和配置教程
Oct 29 #PHP
laravel 4安装及入门图文教程
Oct 29 #PHP
thinkphp浏览历史功能实现方法
Oct 29 #PHP
thinkphp获取栏目和文章当前位置的方法
Oct 29 #PHP
You might like
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
php递归创建目录的方法
2015/02/02 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
thinkPHP简单实现多个子查询语句的方法
2016/12/05 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
百度留言本js 大家可以参考下
2009/10/13 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
Python实现拼接多张图片的方法
2014/12/01 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
意大利网上药房:Farmacia 33
2020/01/27 全球购物
如何利用find命令查找文件
2016/11/18 面试题
北大青鸟学生求职信
2013/09/24 职场文书
二年级学生评语大全
2014/04/23 职场文书
选秀节目策划方案
2014/06/06 职场文书
英文慰问信
2015/02/14 职场文书
2022漫威和DC电影上映作品
2022/04/05 欧美动漫