weiphp 4.0 中修改列表查询函,级联方式

在thinkphp模板里我们常用, <?$value|function|function?> 有weiphp中,列表里有一个function可以定义,处理函对数据进行加工, 但是只能是一级。 多级就不行了。 所以现在改造一下。

  1. 首先在ThinkPHP/Libary/Think/Controller.clss.php这里的东西是被weiphp

2.在parseData方法中的第907行左右进行更改如下:

elseif (! empty ( $g ['function'] ) && $g ['function'] != '') {
					//第一层处理,多个函数
 					if (strpos($g ['function'] , '|') !== false) { 
						$functionArr = explode('|',$g ['function']);
						if(is_array($functionArr)){
 							foreach($functionArr as $k=>$v){
	 							//第二层,处理参分离
	 							if (strpos($v , '=') !== false) {
		 							$secondfunction = explode('=',$v);
		 							if(is_array($secondfunction)){
			 							$val = call_user_func ($secondfunction[0], $val.','.$secondfunction[1] );
			 							//php 调试工具by eagle
			 							file_put_contents('z-Controller-parseData.log',var_export($val,1)."\n\r",FILE_APPEND);
		 							}
	 							}else{
	 								$val = call_user_func ($v, $val );
	 							}
							}
 						}
                    }else{
						$val = call_user_func ( $g ['function'], $val );
					}

看准了我贴出来的是 elseif 与else这一段的。 别换错了。 我贴个图吧。

3.在对应的表 XXXTable.class.php中定义形式如下:

'qr_code' => [
					'title' => '二维码',
					'come_from' => 0,
					'width' => '',
					'is_sort' => 0,
					'name' => 'qr_code',
					'function' => 'getFieldBy=id,qr_code,qr_admin|url_img_html',
					'href' => [ ]
			],

4. 在function.php中加如下代码:

/*
 * 自定义函数,eagle
 * 添加注,Eagle
 * $value : 查找关键值
 * $key		: 目标表中的字段名
 * $fieldName	: 被检索出来的目标表中的字段名
 * $table 		: 被检索的目标表名
 * $field1		: 第二个条件,表字段名,
 * $value1 		: 第二个条件的值
 * */
function getFieldBy($value,$key,$fieldName,$table,$field1='',$value1=''){
 	if(strpos($value, ',') && $value){
		$valueStr=explode(',', $value);
		$value = $valueStr[0];
		$key   = $valueStr[1];
		$fieldName   = $valueStr[2];
		$table   = $valueStr[3];
	}
 	//判断参数是否存在。
	if($value && $key && $fieldName && $table){
		echo 1212;
 		$model = D($table);
		//修改此处,加入一个1=1 的条件。方便特殊权限不控制到。
		$map[$key] = $value;
		if(is_array($value)){
			$map[$key] =array("in",$value);
		}
		if($field1){
			//$var = "and '.$field11.'='.$value1.'";
			$map[$field1] = $value1;
		}
		$map['_string'] = "1=1";
		// 	"'.$key.'='.$value.' and 1=1 '.$var.'"
		$data = $model->where($map)->getField($fieldName);
 	} 
	return $data;
}
配个代码图片更清晰一点

发表评论