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 相关文章推荐
php5.2.0内存管理改进
Jan 22 PHP
php 空格,换行,跳格使用说明
Dec 18 PHP
php像数组一样存取和修改字符串字符
Mar 21 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
php采集内容中带有图片地址的远程图片并保存的方法
Jan 03 PHP
PHP转盘抽奖接口实例
Feb 09 PHP
php简单判断两个字符串是否相等的方法
Jul 13 PHP
php的api数据接口书写实例(推荐)
Sep 22 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
PHP命名空间与自动加载类详解
Sep 04 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
May 09 PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
php sprintf()函数让你的sql操作更安全
2008/07/23 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
PHP递归实现层级树状展开
2016/04/01 PHP
简单实现PHP留言板功能
2016/12/21 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
微信小程序表单弹窗实例
2018/07/19 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
Python 转义字符详细介绍
2017/03/21 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
如何使用python切换hosts文件
2020/04/29 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
利用Python如何画一颗心、小人发射爱心
2021/02/21 Python
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
工业学校毕业生自荐书
2014/01/03 职场文书
岗位职责怎么写
2014/03/14 职场文书
食品销售计划书
2014/04/26 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
实习单位证明范例
2014/11/17 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
安全主题班会教案
2015/08/12 职场文书