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

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

时间: 2014-10-29

PHP下SSL加密解密、验证、签名方法(很简单)

超级简单,依赖于OpenSSL扩展,这里就不多废话了,直接奉上代码 签名: function sign($data) { //读取私钥文件 $priKey = file_get_contents('key/rsa_private_key.pem'); //转换为openssl密钥,必须是没有经过pkcs8转换的私钥 $res = openssl_get_privatekey($priKey); //调用openssl内置签名方法,生成签名$sign openssl_sign($data, $si

Thinkphp中volist标签mod控制一定记录的换行BUG解决方法

本文实例讲述了Thinkphp中volist标签mod控制一定记录的换行BUG解决方法.分享给大家供大家参考.具体方法如下: 一.BUG描述: 存在于thinkphp 2.0 版本 Mod属性还用于控制一定记录的换行,例如: 复制代码 代码如下: <volist name="list" id="vo" mod="5" > {$vo.name} <eq name="mod" value="4"

thinkphp使用literal防止模板标签被解析的方法

本文实例讲述了thinkphp不解析标签直接输出,防止模板标签被解析的方法.分享给大家供大家参考.具体实现方法如下: 在ThinkPHP中可以使用literal标签来防止模板标签被解析,例如: 复制代码 代码如下: <literal> <if condition="$name eq 1 "> value1 <elseif condition="$name eq 2"/>value2 <else /> value3 &l

Thinkphp实现自动验证和自动完成

Thinkphp的自动验证和自动完成都是根所表单提交的内容来的,对部分数据进行规则验证和处理后插入到数据库. 1.自动验证格式: array( array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]), array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]), ...... ); 验证条件: self::EXISTS_VALIDATE 或者0 存在字段就验证(默认) self::MUST_VALIDATE 或者1 必须验证 self::VALUE_V

ThinkPHP自定义函数解决模板标签加减运算的方法

本文实例讲述了ThinkPHP自定义函数解决模板标签加减运算的方法.分享给大家供大家参考.具体如下: 实际项目中,我们经常需要标签变量加减运算的操作.但是,在ThinkPHP中,并不支持模板变量直接运算的操作. 幸运的是,它提供了自定义函数的方法,我们可以利用自定义函数解决: ThinkPHP模板自定义函数语法如下: 格式:{:function(-)} (参考官方帮助文档:http://thinkphp.cn/Manual/196) 利用这个,我们来试做加法和减法. 一.在ThinkPHP中定义

PHP用户验证和标签推荐的简单使用

本文给大家讲解一些最简单的验证知识.大家可以先看下效果图,如果大家感觉还不错,请参考实现代码. 效果图 bookmark_fns.php <?php require_once('output_fns.php'); require_once('db_fns.php'); require_once('data_valid_fns.php'); require_once('url_fns.php'); require_once('user_auth_fns.php'); ?> data_valid_

php制作的简单验证码识别代码

一直想写这个,过了很久今天兴趣来了索性记录下. 验证码 全自动区分计算机和人类的公开图灵测试(英语:Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机和人的公共全自动程序.在CAPTCHA测试中,作为服务器的计算机会自动生成一个问题由用户来解答.这个问题可以由计算机生成并评判,但是必须只有人类才能解答.由于计算机无法解答CAPTCHA的问题,

python+opencv实现的简单人脸识别代码示例

# 源码如下: #!/usr/bin/env python #coding=utf-8 import os from PIL import Image, ImageDraw import cv def detect_object(image): '''检测图片,获取人脸在图片中的坐标''' grayscale = cv.CreateImage((image.width, image.height), 8, 1) cv.CvtColor(image, grayscale, cv.CV_BGR2GR

Python3实现的简单验证码识别功能示例

本文实例讲述了Python3实现的简单验证码识别功能.分享给大家供大家参考,具体如下: 这次的需求是自动登录某机构网站, 其验证码很具特色, 很适合做验证码识别入门demo, 先贴主要代码, 其中图片对比使用了编辑距离算法, 脚本使用了pillow库 from PIL import Image import requests import re splitter = re.compile(r'\d{30}') # 分割二值化后的图片 # distance('11110000', '0000000

PHP 图像处理与SESSION制作超简单验证码的方法示例

本文实例讲述了PHP 图像处理与SESSION制作超简单验证码的方法.分享给大家供大家参考,具体如下: 验证码的实现 首先我们要清楚,无论是做什么东西,在做之前一定要有思路,譬如这个验证码里他有些什么,为了实现它我们该做些什么,怎么样去做. 这里我例举出几个点. 1.验证码肯定要有内容. 2.验证码里肯定要有干扰信息,就譬如,线条干扰和点点干扰. 那么为了实现他们我们该如何做呢? 第一步,创建一个名为captcha.php的文件 在里面输入 <?php session_start();//开启会

Tensorflow简单验证码识别应用

简单的Tensorflow验证码识别应用,供大家参考,具体内容如下 1.Tensorflow的安装方式简单,在此就不赘述了. 2.训练集训练集以及测试及如下(纯手工打造,所以数量不多): 3.实现代码部分(参考了网上的一些实现来完成的) main.py(主要的神经网络代码) from gen_check_code import gen_captcha_text_and_image_new,gen_captcha_text_and_image from gen_check_code import

python简单验证码识别的实现方法

利用SVM向量机进行4位数字验证码识别 主要是思路和步骤如下: 一,素材收集 检查环境是否包含有相应的库: 1.在cmd中,通过 pip list命令查看安装的库 2.再使用pip installRequests 安装Requests库 3.再次使用pip list 命令 4.利用python获取验证码资源 编写代码:_DownloadPic.py #!/usr/bin/nev python3 #利用python从站点下载验证码图片 import requests ## 1.在 http://w

C#实现的简单验证码识别实例

最近做一个小玩意需要识别验证码,之前从来没有接触过识别验证码这块,这可难倒了我.所以,在网上搜索如何识别验证码,许多前辈写的博文教会了我.怕以后又忘记了,故此写篇随笔记录. 我要识别的验证码是一种非常简单,如图: 识别步骤: 1.图片灰度化(把彩色的验证码图片转换成灰色的图片).图片二值化 复制代码 代码如下: for (int i = 0; i < bmp.Width; i++)             {                 for (int j = 0; j < bmp.He

使用python PIL库实现简单验证码的去噪方法步骤

字符型图片验证码识别完整过程及Python实现的博主,我的大部分知识点都是从他那里学来的. 想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括:将彩色图片转换成灰度图.将灰度图二值化和去除噪点三个基本过程.这里仅以比较简单的验证码为例,介绍一下如何通过python的PIL库对图片去噪. 首先看一下未经处理的验证码图片: 对图片处理主要使用了PIL库的Image类. 1.彩色图片转换成灰度图 首先使用Image的open方法打开上面的图片,可

python验证码识别实例代码

本文研究的主要是Python验证码识别的相关代码,具体如下. Talk is cheap, show you the Code! import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from PIL import Image #打开图像 im=np.array(Image.open('yzm.png')) #得到图像3个维度 h,w,san=im.shape X=[(h-x,y

Python2.7+pytesser实现简单验证码的识别方法

本文实例讲述了Python2.7+pytesser实现简单验证码的识别方法.分享给大家供大家参考,具体如下: 首先,安装Python2.7版本 然后,安装PIL工具,下载的地址是:http://www.pythonware.com/products/pil/,pytesser的使用需要PIL库的支持. 接着下载pytesser,下载的地址是:http://code.google.com/p/pytesser/downloads/list 由于code.google.com网站无法访问.可点击此处