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程序--记数器
Oct 09 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
php生成静态文件的多种方法分享
Jul 17 PHP
PHP-redis中文文档介绍
Feb 07 PHP
PHP中的use关键字概述
Jul 23 PHP
PHP实现无限极分类图文教程
Nov 25 PHP
wamp服务器访问php非常缓慢的解决过程
Jul 01 PHP
PHP中Trait及其应用详解
Feb 14 PHP
PHP递归删除多维数组中的某个值
Apr 17 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
May 23 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
Apr 24 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操作xml入门之cdata区段
2015/01/23 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
浅析node.js中close事件
2014/11/26 Javascript
jQuery中fadeOut()方法用法实例
2014/12/24 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
2018/02/08 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
javascript实现倒计时效果
2020/02/17 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
Vue包大小优化的实现(从1.72M到94K)
2021/02/18 Vue.js
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
python实现八大排序算法(1)
2017/09/14 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
python实现的config文件读写功能示例
2019/09/24 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
如何在Shell脚本中使用函数
2015/09/06 面试题
土木工程求职信
2014/05/29 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
MySQL 如何分析查询性能
2021/05/12 MySQL
python 经纬度求两点距离、三点面积操作
2021/06/03 Python