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 相关文章推荐
PHP 中的面向对象编程:通向大型 PHP 工程的办法
Dec 03 PHP
php获得用户ip地址的比较不错的方法
Feb 08 PHP
windows下配置apache+php+mysql时出现问题的处理方法
Jun 20 PHP
PHP使用CURL_MULTI实现多线程采集的例子
Jul 29 PHP
php简单防盗链实现方法
Jul 29 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
Oct 09 PHP
示例详解Laravel的注册重构
Aug 14 PHP
PHP类的特性实例分析
Sep 28 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
Dec 29 PHP
yii2利用自带UploadedFile实现上传图片的示例
Feb 16 PHP
laravel 框架配置404等异常页面
Jan 07 PHP
Laravel框架自定义公共函数的引入操作示例
Apr 16 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的知识
2006/11/17 PHP
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
2020/05/15 PHP
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
2019/08/06 Python
python编写微信公众号首图思路详解
2019/12/13 Python
Pyinstaller加密打包应用的示例代码
2020/06/11 Python
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
个人找工作求职简历的自我评价
2013/10/20 职场文书
计算机软件个人的自荐信范文
2013/12/01 职场文书
写好自荐信需做到的5要点
2014/03/07 职场文书
教师师德承诺书
2014/03/26 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
平遥古城导游词
2015/02/03 职场文书
2015年大学生实习评语
2015/03/25 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
手把手教你实现PyTorch的MNIST数据集
2021/06/28 Python
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers