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脚本的10个技巧(4)
Oct 09 PHP
PHP入门学习的几个不错的实例代码
Jul 13 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
解析PHP汉字转换拼音的类
Jun 18 PHP
php json与xml序列化/反序列化
Oct 28 PHP
PHP文件读写操作相关函数总结
Nov 18 PHP
Zend Framework教程之模型Model基本规则和使用方法
Mar 04 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
Apr 21 PHP
php判断是否连接上网络的方法实例详解
Dec 14 PHP
在Laravel5中正确设置文件权限的方法
May 22 PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 PHP
PHP中echo与print区别点整理
Mar 09 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多用户计数器代码
2007/03/11 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
python 实现归并排序算法
2012/06/05 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
浅谈Python3中print函数的换行
2020/08/05 Python
详解Python中import机制
2020/09/11 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
应届生程序员求职信
2013/11/05 职场文书
小学家长评语大全
2014/04/16 职场文书
幼师辞职信范文
2015/02/27 职场文书
公司晚宴祝酒词
2015/08/11 职场文书