// +---------------------------------------------------------------------- declare (strict_types=1); namespace app; /*require "../vendor/cgf/src/Cgf.php"; require "../vendor/cgf/src/SqlToCgfDefinition.php"; require "../vendor/cgf/src/TableInfoInterface.php"; require "../vendor/cgf/src/TableInfo/Mysql.php"; require "../vendor/cgf/src/CommentParser.php"; require "../vendor/cgf/src/Definition.php"; require "../vendor/cgf/src/Form.php"; require "../vendor/cgf/src/Framework/Thinkphp/Bootstrap.php"; require "../vendor/cgf/src/validate.php"; require "../vendor/cgf/src/validate/ThinkphpValidate.php"; require "../vendor/cgf/src/Template.php"; require "../vendor/cgf/src/Framework/Thinkphp/ThinkphpTemplate.php";*/ use app\BaseController; //use Cgf\Cgf; use Cgf\Cgf; use think\App; use think\facade\View; use think\facade\Db; /** * 控制器基础类 */ class CgfController extends BaseController { public $cgf; //静态类会不会更好? public $m; public $moduleName; public $controllerName; public $actionName; function __construct(App $app) { parent::__construct($app); $this->moduleName = \think\facade\Request::app(); $this->controllerName = \think\facade\Request::controller(); $this->actionName = \think\facade\Request::action(); //var_dump($this->moduleName,$this->controllerName,$this->actionName);exit; $tableName = APP::parseName($this->controllerName); $this->m = Db::name($this->controllerName); error_reporting(E_ALL ^ E_NOTICE); $appBasePath = __DIR__; $dbconfig = include('../config/database.php'); $dbconfig = $dbconfig['connections']['mysql']; //dump(Cgf::$config);exit; $dbconfig = Cgf::getDbConfigFromThinkPHP($dbconfig); $cgfConf = []; $cgfConf['dbConfig'] = $dbconfig; $cgfConf['savePath'] = $appBasePath . "/Cgf/definition";//保存cgf生成的定义文件 $cgfConf['framework'] = 'thinkphp';//使用的框架 $cgfConf['validate'] = 'thinkphp';//使用验证库 $cgfConf['form'] = 'bootstrap';//表单使用的框架 $cgfConf['currentName'] = 'common';//当前模块名 $cgfConf['tableName'] = $tableName;//表名 $cgfConf['controllerName'] = $this->controllerName;//控制器名 $cgfConf['appRootPath'] = $appBasePath;//框架应用程序根目录 $cgfConf['parentTemplatePath'] = $appBasePath . '/view/public/';//cgf生成模板使用的父模板,cgf会根据这里的模板来生成应用模板 $cgfConf['templateSavePath'] = $appBasePath . "/view/{$tableName}";//cgf生成的模板保存路径 $cgfConf['availableModule'] = ['common', 'admin'];//可用模块 $cgfConf['autoHiddenPrimaryKey'] = false;//是否将主键表单类型设为hidden $this->cgf = new Cgf($cgfConf); } public function index() { //数据 $map = $this->_search(); if (method_exists($this, '_filter')) { $this->_filter($map); } if (!empty ($this->m)) { $this->_list($this->m, $map); } //模板 $r = $this->cgf->generateListsTemplate(); return view(''); } public function add() { $tpl = $this->cgf->generateAddTemplatel(); //配置select选项和选中值 $allColumnOptionsDefinition = $this->cgf->getAllColumnOptions(); foreach ($allColumnOptionsDefinition as $column => $option) { $this->assign('opt_' . $column, $option); $this->assign($column . '_selected', input($column,'')); } /*if (method_exists($this, '_replacePublic')) { $this->_replacePublic($vo); } $this->pageTitle = $this->getControllerTitle(CONTROLLER_NAME) . "添加"; $this->cgf = "cgf";*/ return view(); } function edit() { $this->cgf->generateAddTemplatel(); $pk = "id"; $id = input($pk); $where = []; $where[$pk] = $id; if (MODULE_NAME == 'User') $where['user_id'] = $this->user_id; $vo = $this->m->where($where)->find(); /* if (method_exists($this, '_replacePublic')) { $this->_replacePublic($vo); }*/ //$pageTitle = $this->getControllerTitle(CONTROLLER_NAME) . "编辑"; $pageTitle = ''; $this->cgf = "cgf"; $view = ['vo'=>$vo,'action'=>'edit','cgf' => 'cgf', 'pageTitle' => $pageTitle]; return view('add', $view); } //保存添加和编辑 function save() { if (haveUploadFile()) { $uploadInfo = $this->commonUpload(); if (!empty($uploadInfo)) { foreach ($uploadInfo as $k => $v) { $_POST[$k] = $v['path']; } } } //var_dump($this->isAjax());exit; //$id = I($this->m->getPk ()); $id = I('id'); //$vo = $this->m->getById ( $id ); //自动验证 //$tableInfo = new TableInfo('',$this->dbConnection); $validate = new ThinkphpValidate(); $this->cgf->setValidate($validate); $tableName = $this->m->getTableName(); $rules = $this->cgf->generateValidate($tableName); //$auto = $tableInfo->getAutoComplete($tableName); $data = $this->m->create(); if (empty($id)) { $isNew = 1; unset($_POST['id']); //$r = $this->m->validate($rules)->create (); /*var_dump($_GET); var_dump($_POST); var_dump($_REQUEST); var_dump($r);eixt;*/ //$_POST['user_id'] = $this->user_id; //添加时默认加上用户id if (false === $this->m->validate($rules)->create()) { //$this->error ( $this->m->getError () ); } $r = $this->m->add(); $id = $r; } else { if (false === $this->m->validate($rules)->create()) { $this->error($this->m->getError()); } $r = $this->m->save(); } //保存当前数据对象 if (method_exists($this, '_after_save') && $id) $this->_after_save($id); //echo $this->m->getLastSql();exit; if ($id !== false) { //保存成功 $ret = []; //$this->assign ( 'jumpUrl', cookie( '_currentUrl_' ) ); if (I('multiple')) { //多图,需要关联图片到对应的主题, //注意,不支持一个主题里有两个以上字段都是多图上传。此情况需要在图片表里增加标识,属于哪个字段, //或在主题字段里存储用逗号分隔的图片id,如:1,2,3 //其实不用forech,直接取$uploadInfo[0]即可,反正又不支持多字段多图上传 if (!empty($uploadInfo)) { foreach ($uploadInfo as $k => $v) { $ids[$k] = array_column($v, 'id'); M('File')->where(['id' => ['in', $ids[$k]]])->setField('tid', $id); } $ret = $uploadInfo; } } if ($this->successRedirectUrl) { $redirectUrl = $this->successRedirectUrl . $id; } elseif ($isNew && $this->newInfoNextUrl) { $redirectUrl = $this->newInfoNextUrl . $id; } else { //$redirectUrl = cookie( '_currentUrl_' ); $redirectUrl = "/" . CONTROLLER_NAME; } C('info_id', $id); $ret['id'] = $id; $this->success($ret, '成功', $redirectUrl); } else { //失败提示 $this->error('失败了!'); } } function _initialize() { //由于 Think\controller construct 里先调用了_initialize , // 但userBase 验证登录是放在_initialize,导致此类construct 还没执行,就被跳转了 // 跳转代码获取不到ret_format 导出返回信息仍是html 跳转 //所以要此代码从construct 移动到此处 if(IS_AJAX){ C('ret_format','json'); }elseif(!empty(I(C('VAR_JSONP_HANDLER')))){ C('ret_format','jsonp'); } if($this->enableLog && !IS_CLI) $this->requestLog(); //白名单优先 if(!empty(C('whitelist'))) { //只允许白名单中的controller $wl_control = C('whitelist.controller'); $wl_action = C('whitelist.action'); $wl_url = C('whitelist.url'); $wl_url = array_map( function($value) { return strtolower($value); }, $wl_url ); $current_url = CONTROLLER_NAME . '/' . ACTION_NAME; //var_dump(lcfirst($current_url)); //var_dump($wl_url);exit; if (in_array(lcfirst(CONTROLLER_NAME), $wl_control) || in_array(lcfirst(ACTION_NAME), $wl_action) || in_array(strtolower($current_url), $wl_url) ) { //通过白名单 } else { $this->error('control 1 非法访问'); } } //黑名单 if(!empty(C('blacklist'))){ //禁用访问黑名单中的controller $bl_control = C('blacklist.controller'); $bl_action = C('blacklist.action'); $bl_url = C('blacklist.url'); $current_url = CONTROLLER_NAME.'/'.ACTION_NAME; if( in_array(lcfirst(CONTROLLER_NAME),$bl_control) || in_array(lcfirst(ACTION_NAME),$bl_action) || in_array(strtolower($current_url),$bl_url) ){ $this->error('control 2 非法访问'); } } $referer = empty($_SERVER['HTTP_REFERER']) ? '/' : $_SERVER['HTTP_REFERER']; C('referer',$referer); $this->platform = $this->getPlatform(); //$this->referer = $_SERVER['HTTP_REFERER']; /*//url带openid 自动写cookie,session等登录标识 $open_id = I('open_id'); if($open_id){ $r = M('User')->where(["open_id" => $open_id,"type" => I('type')])->find(); if(!empty($r)){ $r['user_id'] = $r['id']; $this->tempStorageOpenidUser = $r; setUserAuth($r); //登录前在getAuth 里增加个标识,如果get open_id有值,不必取cookie,直接标识为登录 } } //exit('x');exit; //用户信息 if(!empty($this->user_id)){ $m = M('User'); $r = $m->find($this->user_id); //var_dump($r); //echo $m->getLastSql(); //exit; if(empty($r['nickname']) && !empty($r['username'])) $r['nickname'] = $r['username']; $this->assign ( 'user', $r ); } if(C('USER_AUTH_ON')){ import ( '@.ORG.Util.RBAC_WEB' ); $app = 'USER'; }else{ import ( 'ORG.Util.RBAC' ); $app = APP_NAME; }*/ } function getPlatform(){ $platform = I('server.platform'); if(empty($platform)){ if(IS_MOBILE){ if(is_weixin()){ $platform = 'wx'; }else{ $platform = 'wap'; } }else{ $platform = 'pc'; } } return $platform; } /** * 设置用户id * @param $user_id */ protected function setUserId($user_id){ $_REQUEST['user_id'] = $_POST['user_id'] = $_GET['user_id'] = $user_id;//$this->user_id; } //有连接表显示列表 public function indexLink($option=array()) { //列表过滤器,生成查询Map对象 $map = $this->_search (); if (method_exists ( $this, '_filter' )) { $this->_filter ( $map ); } $name=CONTROLLER_NAME; if (! empty ( $this->m )) { if ($option['join']) { $this->_listLink($this->m, $map, $option); } else { $this->_list($this->m, $map); } } if(!IS_AJAX){ $tplContent = $this->generateListTpl(); } $this->pageTitle = $this->getControllerTitle(CONTROLLER_NAME)."列表"; $this->cgf="cgf"; $this->toview(); } public function msg($result,$text = '',$url=''){ if(false !== $result){ $this->success($text."成功"); }else{ $this->error($text."失败"); } } //获取用户登录凭证信息 function getAuth(){ $u = getUserAuth(); if(!ONLINE){ //$u['user_id'] = 4; } //===============================================临时代码 所有付费用户绑定完后,就要删除 同时要删除get-weixin-code.html里110行的临时代码 =============================================== if(is_weixin() && !empty($u)){ $code = I('code'); if(!empty($code)) { //是微信用户,且已经用手机登录过了,而且没有绑定过unionid,且unionid没有被其它用户绑定过,则绑定 $rU = M('User')->find($u['user_id']); if(empty($rU['wx_union_id']) || $rU['wx_union_id']==null ){ $conf = C('wechat'); $this->auth = new WechatAuth($conf['appid'], $conf['appSecret']); if (empty($token)) { $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$conf['appid']}&secret={$conf['appSecret']}&code={$code}&grant_type=authorization_code"; $accessToken = file_get_contents($url); $accessToken = json_decode($accessToken, 1); //var_dump($accessToken); $token = $accessToken['access_token']; $open_id = $accessToken['openid']; C('openid',$open_id); $url = "https://api.weixin.qq.com/sns/userinfo?access_token={$token}&openid=$open_id"; //echo $url; $userinfo = file_get_contents($url); $wxUserInfo = json_decode($userinfo, true); if($wxUserInfo['errcode'] == '41001'){ tplog("wx_error:".$userinfo['errmsg'],'ERR', '', LOG_PATH.'/wx.log'); } if(!empty($wxUserInfo['unionid'])){ $rUnionIdUser = M('User')->where(['wx_union_id'=>$wxUserInfo['unionid']])->find(); if(empty($rUnionIdUser)){ $mUser = D('User'); $userInfo = $mUser->wxUserInfoToUser($wxUserInfo); $mUser->where(['id' => $rU['id']])->save($userInfo); } } } } } } //===============================================临时代码 所有付费用户绑定完后,就要删除 =============================================== if(empty($u)){ $open_id = I('open_id'); $type = I('type'); $code = I('code'); if(!empty($open_id) && in_array($type,['wx','wb','qq','gzh']) ){ //公众号搜索进入 $field = $type.'_open_id'; $where[$field] = $open_id; $u['user_id'] = M('User')->where($where)->getField('id'); //微信公众号用户浏览,第一次要设置cookie,相当于登录操作 if($type=='gzh'){ setUserAuth($u); } }elseif(!empty($code)){ //公众号链接进入 $conf = C('wechat'); /* $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$conf['appid']}&secret={$conf['appSecret']}&code={$code}&grant_type=authorization_code"; $r = file_get_contents($url); var_dump($r);//exit;*/ //$this->wechat = new Wechat($conf['token'], $conf['appid'], $conf['crypt']); $this->auth = new WechatAuth($conf['appid'], $conf['appSecret']); //$token = S('weixin_token'); if(empty($token)){ //$accessToken = $this->auth->getAccessToken('code',$code); $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$conf['appid']}&secret={$conf['appSecret']}&code={$code}&grant_type=authorization_code"; $accessToken = file_get_contents($url); $accessToken = json_decode($accessToken,1); //var_dump($accessToken); $token =$accessToken['access_token']; $open_id=$accessToken['openid']; C('openid',$open_id); $url = "https://api.weixin.qq.com/sns/userinfo?access_token={$token}&openid=$open_id"; //echo $url; $userinfo = file_get_contents($url); $userinfo = json_decode($userinfo,true); //var_dump($userinfo);//exit('x=========='); if($userinfo['errcode'] == '41001'){ tplog("wx_error:".$userinfo['errmsg'],'ERR', '', LOG_PATH.'/wx.log'); } if(!empty($userinfo['unionid'])){ $mUser = M('User'); $rUser = $mUser->where(['wx_union_id'=>$userinfo['unionid']])->find(); if(!empty($rUser)){ $u['user_id'] = $rUser['id']; setUserAuth($u); }else{ $id = $this->registerLinkGzh($userinfo); $u['user_id'] = M('User')->where(['id'=>$id])->getField('id'); //微信公众号用户浏览,第一次要设置cookie,相当于登录操作 setUserAuth($u); // var_dump($u); // var_dump($userinfo);exit('============'); //var_dump($userinfo);exit('x'); //S('weixin_token',$token,$accessToken['expires_in']-120); } } } /*$this->auth->setAccessToken($token); $this->token = $token; $this->openid = $open_id; exit('x'); $info = $this->auth->getUserInfo($this->openid); var_dump($info);exit('x'); $this->registerUser();*/ } if(empty($u)){ return false; } } //要去数据库验证有没有此id $tableInfo = new TableInfo('list'); $selectFields = $tableInfo->createListSelectFields('user'); $dbUserInfo = M('User')->field($selectFields)->find($u['user_id']); if(empty($dbUserInfo)){ debug('没有此用户'); //echo '没有此用户'; return false; } $dbUserInfo['nickname'] = !empty($dbUserInfo['nickname']) ? $dbUserInfo['nickname'] : ( !empty($dbUserInfo['username']) ? $dbUserInfo['username'] : '竞拍用户') ; $dbUserInfo['avatar'] = img($dbUserInfo['avatar'],'user_avatar'); $this->user_id = $dbUserInfo['id']; $this->user = $dbUserInfo; $this->assign('user_id',$this->user_id); $this->assign('user',$this->user); return $dbUserInfo; } /** * 公众号链接新用户注册,unionid注册 * @param $info */ function registerLinkGzh($info){ $userInfo = []; $userInfo['unionid'] = $info['unionid']; $userInfo['gzh_open_id'] = $info['openid']; $userInfo['province'] = $info['province']; $userInfo['city'] = $info['city']; $userInfo['avatar'] = $info['headimgurl']; $userInfo['sex'] = $info['sex']; $userInfo['nickname'] = $info['nickname']; $sex_map=[0=>2,1=>1,2=>0]; $userInfo['sex'] = $sex_map[$info['sex']]; $extra = []; $extra['subscribe'] = $info['subscribe']; $extra['groupid'] = $info['groupid']; $extra['tagid_list'] = $info['tagid_list']; $extra['subscribe_time'] = $info['subscribe_time']; $userInfo['extra'] = json_encode($extra,JSON_UNESCAPED_UNICODE); //wx_open_id /** @var \Common\Model\UserModel $mUser */ $mUser = D('User'); $r = $mUser->oauthUnionidAdd('wx',$userInfo); return $r; } /** * 公众号搜索新用户注册 */ function registerUser(){ /** @var \Common\Model\UserModel $mUser */ $mUser = D('User'); $field = 'wx_open_id'; $r = $mUser->where(['gzh_open_id' => $this->openid ])->find(); if(empty($r)){ $info = $this->auth->getUserInfo($this->openid); if(empty($info)){ $message = "token:{$this->token}| open_id: {$this->openid}"; tplog($message, 'ERR', '', LOG_PATH.'/wx.log'); } $userInfo = []; $userInfo['province'] = $info['province']; $userInfo['city'] = $info['city']; $userInfo['avatar'] = $info['headimgurl']; $userInfo['sex'] = $info['sex']; $userInfo['nickname'] = $info['nickname']; $sex_map=[0=>2,1=>1,2=>0]; $userInfo['sex'] = $sex_map[$info['sex']]; $extra = []; $extra['subscribe'] = $info['subscribe']; $extra['groupid'] = $info['groupid']; $extra['tagid_list'] = $info['tagid_list']; $extra['subscribe_time'] = $info['subscribe_time']; $userInfo['extra'] = json_encode($extra,JSON_UNESCAPED_UNICODE); //wx_open_id $r = $mUser->oauthAdd($this->openid,'gzh',$userInfo); } } /** * 访问日志,记录用户请求的参数 */ function requestLog(){ $data = array(); $data['url'] = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; if(IS_POST){ $params = $_POST; }elseif(IS_GET){ $params = $_GET; } if(empty($params)) $params['input'] = file_get_contents("php://input"); $data['params'] = json_encode($params); //$data['cookie'] = json_encode($_COOKIE); //$data['user_agent'] = $_SERVER['HTTP_USER_AGENT']; $data['ip'] = get_client_ip(); $detail = array(); $detail['request'] = $_REQUEST; $header = []; $fields = ['HTTP_USER_ID','HTTP_DEVICE_VID','HTTP_DEVICE_ID','HTTP_PLATFORM','HTTP_VERSION']; //'HTTP_USER_AGENT', foreach ($fields as $k => $v){ if(empty($_SERVER[$v])) continue; $header[$v] = $_SERVER[$v]; } /*$this->version = I('server.HTTP_VERSION'); $this->device_id = I('device_id') ?:I('server.HTTP_DEVICE_ID'); $this->platform = I('server.HTTP_PLATFORM'); $user_id = I('user_id') ?: I('server.HTTP_USER_ID'); $detail['server'] = $_SERVER;*/ //$detail['header'] = $header; //$data['detail'] = json_encode($detail); $url = $_SERVER['REQUEST_METHOD']." ".$_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']." ".$_SERVER['SERVER_PROTOCOL']."\r\n"; $request = $url.getallheaders(true); $raw_post = ''; if(IS_POST){ $raw_post = http_build_query($_POST); if(empty($raw_post)){ $raw_post = file_get_contents("php://input"); } } $request .= "\r\n".$raw_post; $data['detail'] = $request; $data['user_agent'] = $_SERVER['HTTP_USER_AGENT']; $data['platform'] = I('server.HTTP_PLATFORM'); $data['user_id'] = cookie('user_id');//cookie可能取出null,要求字段必须可为null $data['create_time'] = date("Y-m-d H:i:s"); $data['method'] = $_SERVER['REQUEST_METHOD']; $data['date_int'] = time(); try{ $m = M('LogRequest','',C('log_db')); //$m->create($data); $logId = $m->add($data); C('logId',$logId); }catch (\Exception $e){ tplog($e->getMessage()); } //echo $m->getLastSql();exit; } /** * 记录响应,调用的地方有:\Think\Control->ajaxReturn() * @param $id * @param $response */ function responseLog($id,$response){ /* $data = []; $data['id'] = $id; $data['response'] = $response; $m = M('LogRequest','',C('log_db')); $m->save($data);*/ } public function lists() { //列表过滤器,生成查询Map对象 $map = $this->_search (); if (method_exists ( $this, '_filter' )) { $this->_filter ( $map ); } $name=CONTROLLER_NAME; //$model = D ($name); if (! empty ( $this->m )) { $this->_list ( $this->m, $map ); } $this->toview (); return; //exit('lists erorr'); // $this->display (); //return; } /** * 根据表单生成查询条件 进行列表过滤 * @param string $name * @return array */ protected function _search($name = '') { $map=[]; $autoIndistinct = true; $fields = Db::name($this->controllerName)->getFields(); //包含字段类型,注释等 foreach ( $fields as $column => $definition ) { $inputValue = input($column); if ( $inputValue !== null && $inputValue != '') { if($autoIndistinct && $this->columnType($definition['type']) == 'string'){ $map[] = [$column, 'like', '%'.$inputValue.'%']; } } } //配置select选项和选中值 $options = $this->cgf->getAllColumnOptions(); foreach ($options as $column => $option) { $this->assign('opt_' . $column, $option); $this->assign($column . '_selected', input($column,[])); //var_dump($column . '_selected'); } /*dump($fields); $fields = Db::name($this->controllerName)->getTableFields(); dump($fields);exit; $map = array (); foreach ( $fields as $key => $val ) { $inputValue = input($val); if ( $inputValue !== null && $inputValue != '') { $map[] = [$val, 'like', '%'.$inputValue.'%']; } }*/ return $map; } function columnType($type){ if( strpos($type,'char') !== false || strpos($type,'text') !== false){ return 'string'; }elseif (strpos($type,'int') !== false || strpos($type,'decimal') !== false || strpos($type,'numeric') || strpos($type,'double')){ return 'int'; }else{ return ''; } } /** * 根据表单生成查询条件 * 进行列表过滤 * @param $model 模型对象 * @param $map 过滤条件 * @param string $sortBy 排序 * @param bool $asc 是否正序 */ protected function _list($model, $map, $sortBy = '', $asc = false) { //排序字段 默认为主键名 if (!empty( $_REQUEST ['_order'] )) { $order = $_REQUEST ['_order']; } else { $order = ! empty ( $sortBy ) ? $sortBy : $model->getPk (); } //排序方式默认按照倒序排列 //接受 sost参数 0 表示倒序 非0都 表示正序 //$setOrder = setOrder(array(array('viewCount', 'a.view_count'), 'a.id'), $orderBy, $orderType, 'a'); if (!empty( $_REQUEST ['_sort'] )) { $sort = $_REQUEST ['_sort'] ; } else { $sort = $asc ? 'asc' : 'desc'; } //取得满足条件的记录数 $pk = $model->getPk(); $count = $model->where ( $map )->count (); if ($count > 0) { //import ( "ORG.Util.Page" ); //创建分页对象 if (! empty ( $_REQUEST ['listRows'] )) { $listRows = $_REQUEST ['listRows']; } elseif(!empty($this->listRows)){ $listRows = $this->listRows; } else { $listRows = '10'; } if(strtolower(MODULE_NAME) == 'user'){ unset($_GET['user_id']); } //========================================== cgf start ========================================= //1.生成查询字段 $selectFields = $this->cgf->generateListSelectColumn(); //var_dump($selectFields);exit; //if(strpos($order,'`') === false) $order = "`" . $order . "` "; //$r = $model->select(); //var_dump($r);exit; $voList = $model->field($selectFields)->where($map)->order($order.' '. $sort)->paginate(5, false, ['query' => []]); //去掉前台不显示的字段,与上面$selectFields功能重复 /*if(C('ret_format') == 'json' || C('ret_format') == 'jsonp'){ $tableInfo = new TableInfo('list'); $tableName = $this->m->getTableName(); $fields = $tableInfo->generateHomeListFields($tableName); foreach ($voList as $k => &$v){ foreach ($v as $column => $value){ if(!in_array($column,$fields)) unset($v[$column]); } } }*/ //2.当前表有关联的表字段时,取关联表信息并合并。实现join功能 $this->cgf->mergeRelatedTableData($voList); //3.调用字段显示处理函数 $this->cgf->executeColumnCallback($voList); //与后台管理的list里调用相关显示函数有重复,如|optionValue //if (method_exists ( $this, 'dateToViewModel' )) $this->dateToViewModel ( $voList ); //========================================== cgf end ========================================= if (method_exists ( $this, '_join' )) $this->_join ( $voList ); //将导出功能注入到此处 if(ACTION_NAME == 'exportExcel'){ $this->realExportExcel($voList); } //var_dump($voList);exit; //echo $model->getlastsql();exit('x'); //分页跳转的时候保证查询条件 foreach ( $map as $key => $val ) { if (! is_array ( $val ) && !in_array($key,['_logic'])) { //$p->parameter .= "$key=" . urlencode ( $val ) . "&"; if(strtolower(MODULE_NAME) == 'user' && $key =='user_id'){ continue; } //$p->parameter[$key] = urlencode ( $val ); } } $page = $voList->render(); $sortImg = $sort == 'desc' ? "glyphicon-arrow-down" : "glyphicon-arrow-up"; //排序图标 glyphicon glyphicon-arrow-up if($sort=='desc'){ $sortImg = 'glyphicon-arrow-down'; }elseif($sort='asc'){ $sortImg = 'glyphicon-arrow-up'; }else{ $sortImg = 'glyphicon-sort'; } $sortAlt = $sort == 'desc' ? '升序排列' : '倒序排列'; //排序提示 $sort = $sort == 'desc' ? 'asc' : 'desc'; //页面上显示的下一次排序方式 //模板赋值显示 $this->assign ( 'list', $voList ); $this->assign ( 'sort', $sort ); $this->assign ( 'order', $order ); $this->assign ( 'sortImg', $sortImg ); $this->assign ( 'sortType', $sortAlt ); $this->assign ( "page", $page ); $this->assign ( "totalPages", $p->totalPages ); $this->assign ( "nowPage", $p->nowPage ); $this->assign ('totalRows',$count); //顶部简易分页 if($this->enableLitePage){ $nextIndex = $p->nowPage+1; if($nextIndex > $p->totalPages) $nextIndex = $p->totalPages; $nextPageUrl = $p->url($nextIndex); $prevIndex = $p->nowPage-1; if($prevIndex < 1) $prevIndex = 1; $prevPageUrl = $p->url($prevIndex); $this->assign('nextPageUrl',$nextPageUrl); $this->assign('prevPageUrl',$prevPageUrl); } }else{ $this->assign ( 'list', [] ); } //cookie( '_currentUrl_', __SELF__ ); return; } function assign($key,$value){ View::assign($key,$value); } /** +---------------------------------------------------------- * 根据表单生成查询条件 * 进行列表过滤 * 返回结果,不输出 +---------------------------------------------------------- * @access protected +---------------------------------------------------------- * @param Model $model 数据对象 * @param HashMap $map 过滤条件 * @param string $sortBy 排序 * @param boolean $asc 是否正序 +---------------------------------------------------------- * @return void +---------------------------------------------------------- * @throws ThinkExecption +---------------------------------------------------------- */ protected function _getlist($model, $map, $sortBy = '', $asc = false) { //排序字段 默认为主键名 if (isset ( $_REQUEST ['_order'] )) { $order = $_REQUEST ['_order']; } else { $order = ! empty ( $sortBy ) ? $sortBy : $model->getPk (); } //排序方式默认按照倒序排列 //接受 sost参数 0 表示倒序 非0都 表示正序 //$setOrder = setOrder(array(array('viewCount', 'a.view_count'), 'a.id'), $orderBy, $orderType, 'a'); if (isset ( $_REQUEST ['_sort'] )) { $sort = $_REQUEST ['_sort'] ? 'asc' : 'desc'; } else { $sort = $asc ? 'asc' : 'desc'; } //取得满足条件的记录数 $pk = $model->getPk(); $count = $model->where ( $map )->count ( $pk ); if ($count > 0) { import ( "ORG.Util.Page" ); //创建分页对象 if (! empty ( $_REQUEST ['listRows'] )) { $listRows = $_REQUEST ['listRows']; } else { $listRows = ''; } $p = new Page ( $count, $listRows ); //echo C('PAGE_STYLE');exit; $p->style = C('PAGE_STYLE');//设置风格 //分页查询数据 //var_dump($p->listRows);exit; $voList = $model->where($map)->order( "`" . $order . "` " . $sort)->limit($p->firstRow . ',' . $p->listRows)->select ( ); //echo $model->getlastsql(); //分页跳转的时候保证查询条件 foreach ( $map as $key => $val ) { if (! is_array ( $val )) { $p->parameter .= "$key=" . urlencode ( $val ) . "&"; } } //分页显示 $page = $p->show (); //列表排序显示 $sortImg = $sort; //排序图标 $sortAlt = $sort == 'desc' ? '升序排列' : '倒序排列'; //排序提示 $sort = $sort == 'desc' ? 'asc' : 'desc'; //页面上显示的排序方式 //模板赋值显示 return array('list' => $voList , 'sort' => $sort, 'order' => $order); //$this->assign ( 'sortImg', $sortImg ); //$this->assign ( 'sortType', $sortAlt ); //$this->assign ( "page", $page );* /*$this->assign ( 'list', $voList ); $this->assign ( 'sort', $sort ); $this->assign ( 'order', $order ); $this->assign ( 'sortImg', $sortImg ); $this->assign ( 'sortType', $sortAlt ); $this->assign ( "page", $page );*/ } //cookie( '_currentUrl_', __SELF__ ); return; } /** +---------------------------------------------------------- * 连接查询列表显示 * 进行列表过滤 +---------------------------------------------------------- * @access protected +---------------------------------------------------------- * @param Model $model 数据对象 * @param HashMap $map 过滤条件 * @param string $sortBy 排序 * @param boolean $asc 是否正序 +---------------------------------------------------------- * @return void +---------------------------------------------------------- * @throws ThinkExecption +---------------------------------------------------------- */ protected function _listLink($model,$map,$option=array(), $sortBy = '', $asc = false,$sql='') { extract($option); //$option['join'] = $join; //有查询条件,开启连接查询 $field || $field = "*"; $table || $table = $model->getTableName(); //$table = "{$this->trueTableName} j"; //$r = $this->table($table)->field($field)->join($join)->where($map)->count(); //dump($r); //return $r; //排序字段 默认为主键名 if (isset ( $_REQUEST ['_order'] )) { $order = $_REQUEST ['_order']; } else { $order = ! empty ( $sortBy ) ? $sortBy : $model->getPk (); } //排序方式默认按照倒序排列 //接受 sost参数 0 表示倒序 非0都 表示正序 //$setOrder = setOrder(array(array('viewCount', 'a.view_count'), 'a.id'), $orderBy, $orderType, 'a'); if (isset ( $_REQUEST ['_sort'] )) { $sort = $_REQUEST ['_sort'] ? 'asc' : 'desc'; } else { $sort = $asc ? 'asc' : 'desc'; } //取得满足条件的记录数 $pk = $model->getPk(); if ($option['num'] ){ //限制取几条记录,直接返回指定条记录 if($sql){ $voList = $model->query($sql); }elseif($option['join']){ if(strpos($order,'`') === false) $order = "`" . $order . "` "; $voList = $model->table($table)->alias('a')->field($field)->join($option['join'])->where($map)->order( $order .' '. $sort)->limit($p->firstRow . ',' . $p->listRows)->select ( ); }else{ $voList = $model->where($map)->order( "`" . $order . "` " .' '. $sort)->limit($p->firstRow . ',' . $p->listRows)->select ( ); } return $voList; }else{ //分页 if($sql){ $count = $count = $model->query(getCountSql($sql)); $count = $count[0]; }elseif($option['join']){ //if(strpos($order,'`') === false) $order = "`" . $order . "` "; $count = $model->table($table)->alias('a')->field($field)->join($join)->where($map)->count(); }else{ $count = $model->where ( $map )->count ( $pk ); } if($count<0) return; import ( "ORG.Util.Page" ); //创建分页对象 if (! empty ( $_REQUEST ['listRows'] )) { $listRows = $_REQUEST ['listRows']; } else { $listRows = ''; } $p = new \Think\Page ( $count, $listRows ); //echo C('PAGE_STYLE');exit; //$s = rand(1,25);echo $s; $p->style = C('PAGE_STYLE');//设置风格 //分页查询数据 if($sql){ $voList = $model->query($sql); }elseif($option['join']){ if(strpos($order,'`') === false) $order = "`" . $order . "` "; $voList = $model->table($table)->alias('a')->field($field)->join($join)->where($map)->order( $order .' '. $sort)->limit($p->firstRow . ',' . $p->listRows)->select ( ); }else{ $voList = $model->where($map)->order( "`" . $order . "` " . $sort)->limit($p->firstRow . ',' . $p->listRows)->select ( ); } //高亮关键字 if(C('highLightKeyword') && $_REQUEST['keyword']){ $keyword = $_REQUEST['keyword']; foreach($voList as $k => $v){ $voList[$k]['jtitle'] = hightLightKeyword($v['jtitle'],$keyword); $voList[$k]['request'] = hightLightKeyword($v['request'],$keyword); $voList[$k]['ctitle'] = hightLightKeyword($v['ctitle'],$keyword); } } //分页跳转的时候保证查询条件 foreach ( $map as $key => $val ) { if (! is_array ( $val )) { $p->parameter .= "$key=" . urlencode ( $val ) . "&"; } } //分页显示 $page = $p->show (); //列表排序显示 $sortImg = $sort; //排序图标 $sortAlt = $sort == 'desc' ? '升序排列' : '倒序排列'; //排序提示 $sort = $sort == 'desc' ? 'asc' : 'desc'; //页面上显示的排序方式 //模板赋值显示 $this->assign ( 'list', $voList ); $this->assign ( 'sort', $sort ); $this->assign ( 'order', $order ); $this->assign ( 'sortImg', $sortImg ); $this->assign ( 'sortType', $sortAlt ); $this->assign ( "page", $page ); $this->assign ( "totalPages", $p->totalPages ); $this->assign ( "nowPage", $p->nowPage ); $this->assign ('totalRows',$count); } //cookie( '_currentUrl_', __SELF__ ); return; } public function delete() { //删除指定记录 $name=CONTROLLER_NAME; //$model = M ($name); if (! empty ( $this->m )) { $pk = $this->m->getPk (); $id = I($pk); if (!empty ( $id )) { $condition = array ($pk => array ('in', explode ( ',', $id ) ) ); $list=$this->m->where ( $condition )->setField ( 'status', 0 ); if ($list!==false) { $this->success ('删除成功!',cookie ( '_currentUrl_' )); } else { $this->error ('删除失败!'); } } else { $this->error ( '非法操作' ); } } } public function foreverdelete() { //删除指定记录 $name=CONTROLLER_NAME; //$model = D ($name); if (! empty ( $this->m )) { $pk = $this->m->getPk (); $id = I($pk); if (isset ( $id )) { $condition = array ($pk => array ('in', explode ( ',', $id ) ) ); //用户中心增加用户id条件 if(MODULE_NAME == 'User') $condition['user_id'] = $this->user_id; $r = $this->m->where($condition)->select(); if(empty($r)) $this->error ( '非法操作' ); if (false !== $this->m->where ( $condition )->delete ()) { if (!empty(I(C('VAR_JSONP_HANDLER'))) || IS_AJAX){ $method_name = '_after_' . ACTION_NAME; if(method_exists($this,$method_name)){ //if(is_callable([$this,$method_name])){ $this->$method_name($r); /* if ($after->isPublic()) { $after->invoke($module); }*/ } } $this->assign ( 'jumpUrl', cookie ( '_currentUrl_' ) ); $this->success ('删除成功!',cookie ( '_currentUrl_' )); } else { $this->error ('删除失败!'); } } else { $this->error ( '非法操作' ); } } $this->forward (); } public function clear() { //删除指定记录 $name=CONTROLLER_NAME; //$this->m = D ($name); if (! empty ( $this->m )) { if (false !== $this->m->where ( 'status=1' )->delete ()) { $this->assign ( "jumpUrl", $this->getReturnUrl () ); $this->success ( L ( '_DELETE_SUCCESS_' ) ); } else { $this->error ( L ( '_DELETE_FAIL_' ) ); } } $this->forward (); } public function forbid() { $name=CONTROLLER_NAME; //$model = D ($name); $pk = $this->m->getPk (); $id = $_REQUEST [$pk]; $condition = array ($pk => array ('in', $id ) ); $list=$this->m->forbid ( $condition ); if ($list!==false) { $this->assign ( "jumpUrl", $this->getReturnUrl () ); $this->success ( '状态禁用成功' ); } else { $this->error ( '状态禁用失败!' ); } } public function checkPass() { $name=CONTROLLER_NAME; //$model = D ($name); $pk = $this->m->getPk (); $id = $_GET [$pk]; $condition = array ($pk => array ('in', $id ) ); if (false !== $this->m->checkPass( $condition )) { $this->assign ( "jumpUrl", $this->getReturnUrl () ); $this->success ( '状态批准成功!' ); } else { $this->error ( '状态批准失败!' ); } } public function recycle() { $name=CONTROLLER_NAME; //$model = D ($name); $pk = $this->m->getPk (); $id = $_GET [$pk]; $condition = array ($pk => array ('in', $id ) ); if (false !== $this->m->recycle ( $condition )) { $this->assign ( "jumpUrl", $this->getReturnUrl () ); $this->success ( '状态还原成功!' ); } else { $this->error ( '状态还原失败!' ); } } public function recycleBin() { $map = $this->_search (); $map ['status'] = - 1; $name=CONTROLLER_NAME; //$model = D ($name); if (! empty ( $this->m )) { $this->_list ( $this->m, $map ); } $this->display (); } /** +---------------------------------------------------------- * 默认恢复操作 * +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @return string +---------------------------------------------------------- * @throws FcsException +---------------------------------------------------------- */ function resume() { //恢复指定记录 $name=CONTROLLER_NAME; //$model = D ($name); $pk = $this->m->getPk (); $id = $_GET [$pk]; $condition = array ($pk => array ('in', $id ) ); if (false !== $this->m->resume ( $condition )) { $this->assign ( "jumpUrl", $this->getReturnUrl () ); $this->success ( '状态恢复成功!' ); } else { $this->error ( '状态恢复失败!' ); } } function saveSort() { $seqNoList = $_POST ['seqNoList']; if (! empty ( $seqNoList )) { //更新数据对象 $name=CONTROLLER_NAME; //$model = D ($name); $col = explode ( ',', $seqNoList ); //启动事务 $this->m->startTrans (); foreach ( $col as $val ) { $val = explode ( ':', $val ); $this->m->id = $val [0]; $this->m->sort = $val [1]; $result = $this->m->save (); if (! $result) { break; } } //提交事务 $this->m->commit (); if ($result!==false) { //采用普通方式跳转刷新页面 $this->success ( '更新成功' ); } else { $this->error ( $this->m->getError () ); } } } protected function msgText($nextModel,$nextModelText,$id){ $app = __APP__; $url = __CONTROLLER__; return "发布成功! 发布{$nextModelText}信息 返回修改信息 返回列表"; } public function show($content="",$charset='',$contentType='',$prefix=''){ $id = I('id'); $vo = $this->m->getById ( $id ); if (method_exists ( $this, '_show' )) { $this->_show ( $vo ); } $this->vo = $vo; $this->toview(); } function upload($stype='file'){ $uploadInfo = $this->commonUpload($stype); $this->upload = $uploadInfo; $this->toview(); } /** * 通用上传,支持多张上传 * @param string $moduleDir 模块目录名 * @return array 上传结果,一张图片,一个array,key为上传控件的名字 */ protected function commonUpload($stype='file'){ $type = I('type','file'); if(C('UPLOAD_STRORAGE') == 'oss'){ //传到aliyun C('UPLOAD_SITEIMG_OSS.savePath',$stype.'/'); $setting=C('UPLOAD_SITEIMG_OSS'); $upload = new \Think\Upload($setting); $info = $upload->upload(); }else{ $config = array( 'subName' => array('date','Ymd'), ); //$modelName = "file/"; $rootPath = C('SAVE_PATH'); $upload = new \Think\Upload($config); $upload->maxSize = 31457280 ;// 设置附件上传大小 $upload->exts = array('jpg', 'gif', 'png', 'jpeg','doc','docx','rar','zip','tar','tar.gz','tgz','7z','txt','flv','mp4','mov');// 设置附件上传类型 $upload->rootPath = $rootPath; // 设置附件上传根目录 $upload->savePath = $stype.'/'; // 设置附件上传(子)目录 //传到本地 $info = $upload->upload(); } if(!$info) { $this->error($upload->getError()); }else{ $ret = []; $f = M('image'); $multiple = I('multiple'); //从数组中取出重复的元素 if(!$multiple){ $file_names = array_column($info,'key'); $unique_arr = array_unique ( $file_names ); //有多个文件的file对象的名称 $muti_file_key = array_diff_assoc ( $file_names, $unique_arr ); } //var_dump($repeat_arr); //exit; $goods_id = 1; foreach ($info as $k => $fileInfo){ /* $cropInfo = I('avatar_data'); $cropInfo = json_decode($cropInfo,1); foreach ($cropInfo as &$v){ $v = round($v); }*/ $filePath = $fileInfo['savepath'].$fileInfo['savename']; /* $data = []; if( $this->crop($fileInfo,$cropInfo['width'],$cropInfo['height'],$cropInfo['x'],$cropInfo['y'],$cropInfo['rotate'])){ $filePath .= "_{$cropInfo['width']}x{$cropInfo['height']}.{$fileInfo['ext']}"; } $data['url'] = URL_IMG.'/'.$filePath;*/ //$data = $info['avatar_file']; $data = []; $data['res_id'] = $goods_id; $data['type'] = 20; //$data['user_id'] = $this->user_id; $data['hd_url'] = $filePath; $data['nhd_url'] = $filePath; $data['create_t'] = time(); /*$data['title'] = I('title'); $data['content'] = I('content'); $data['type'] = $type; $data['input_name'] = trim(trim($fileInfo['key'],"'"),'_');*/ $id = $f->add($data); if( $multiple || !empty($muti_file_key) && in_array($data['input_name'],$muti_file_key)){ //多文件上传,返回数组 $ret[$data['input_name']][] = ["id" => $id,'path' => $filePath,'url' => img($filePath,'big'), ]; }else{ $ret[$data['input_name']] = ["id" => $id,'path' => $filePath,'url' => img($filePath,'big'), ]; } } return $ret; //$this->success(); //var_dump($data);exit('x'); //$this->toview($data); } } function responseFormat(){ $format = ""; if(IS_AJAX || C('RETRUN_FORMAT') == "android_json" || I('ret_format') == 'json' || $_SERVER['HTTP_ACCEPT'] == 'application/json'){ //json,app: code,msg,data return "json"; }elseif (!empty(I(C('VAR_JSONP_HANDLER')))){ //jsonp return "jsonp"; }elseif(isMobile()){ return "wap"; }else{ return "web"; } } /** * @name 根据请求方式,显示对应的格式到页面 * @param 数据 array $data * @param 格式类型 int $type * @return member */ public function toview($data = "", $tpl=""){ if(!APP_DEBUG) { //action结束,缓存viewData \Think\Hook::listen('setViewData', $this); // //tag('setViewData',$this); } if(empty($data)) $data = $this->get(); //var_dump($data);//exit; //if(!empty($tpl)) $this->display($tpl); //var_dump($_SERVER);exit; if(IS_AJAX || C('RETRUN_FORMAT') == "android_json" || I('ret_format') == 'json' || $_SERVER['HTTP_ACCEPT'] == 'application/json'){ //json,app: code,msg,data if(empty($data)) $data = (object)$data; $this->success($data,"",1); }elseif (!empty(I(C('VAR_JSONP_HANDLER')))){ //jsonp $this->ajaxReturn(array("code" =>1, "msg" => "","data" => $data),'JSONP'); }elseif(isMobile()){ //wap empty($tpl) && $tpl = RAW_ACTION_NAME; $wapTpl = "wap_".$tpl; $templateFile = $this->view->parseTemplate($wapTpl); //var_dump($templateFile);exit; //if() $www_host = parse_url(URL_WWW)['host']; if($_SERVER['HTTP_HOST'] == $www_host){ redirect(URL_M.__SELF__); } /* elseif ($_SERVER['HTTP_HOST'] == $news_host){ //新闻则跳转到wap的新闻模块 redirect(URL_M.'news/'.__SELF__); }*/ //var_dump(SCHEME.$_SERVER['HTTP_HOST'] ,URL_M, SCHEME.$_SERVER['HTTP_HOST'] , URL_USER,URL_M.__SELF__);exit; //if(SCHEME.$_SERVER['HTTP_HOST'] !=URL_M && SCHEME.$_SERVER['HTTP_HOST'] != URL_USER) redirect(URL_M.__SELF__); if(is_file($templateFile)) $this->display($wapTpl); else $this->display($tpl); }else{ //web $this->display($tpl); } /* if(!empty(I(C('VAR_JSONP_HANDLER')))){ //ajax返回,默认json格式 $this->ajaxReturn($data,$type); }elseif(IS_AJAX){ //jsonp格式 //var_dump($data);exit; $this->success($data,"成功!",1); }elseif(C('RETRUN_FORMAT') == "android_json" || I('ret_format') == 'json'){ $this->ajaxReturn($data); //android格式数据必须有个[] }elseif(isMobile()){ $this->display("wap".__ACTION__); }else{ //html $this->display($tpl); } */ } /*function success($data,$msg = 'success',$code = 1,$jumpUrl = ''){ $this->dispatchJump2($data,$msg,$code,$jumpUrl); }*/ /** * @param string $firstParam * @param string $secondParam * @param string $jumpUrl * @param bool $ajax */ function success($firstParam='成功',$secondParam='',$jumpUrl='',$ajax=false){ //第一个参数是数组或对象,说明是app返回,则第二个参数是msg if(is_array($firstParam) || is_object($firstParam)){ //api返回 $data = $firstParam; $msg = $secondParam; }else{ //pc返回,第一个参数做msg,第二个参数做跳转url $data = ''; $msg = $firstParam; $jumpUrl = $secondParam; } $this->dispatchJump2($data,$msg,1,$jumpUrl,$ajax); } function error($message='',$jumpUrl='',$ajax=false,$status=0){ $ret_format = $this->responseFormat(); if(in_array($ret_format,['json','jsonp']) ){ $data = []; $data['code'] = $status; $data['msg'] = $message; $data['data'] = (object)array(); if($jumpUrl) $data['jumpUrl'] = $jumpUrl; $this->ajaxReturn($data,$ret_format); } /*if("json" == $this->responseFormat() || "jsonp" == $this->responseFormat()) $ajax = 1; if($ajax || IS_AJAX) {// AJAX提交 $data = is_array($ajax)?$ajax:array(); $data['code'] = $status; $data['msg'] = $message; $data['data'] = (object)array(); $type = C('ret_format'); if($type != 'json' && $type != 'jsonp') $type = 'json'; $this->ajaxReturn($data,$type); }*/ if(is_int($ajax)) $this->assign('waitSecond',$ajax); if(!empty($jumpUrl)) $this->assign('jumpUrl',$jumpUrl); // 提示标题 $this->assign('msgTitle',$status? L('_OPERATION_SUCCESS_') : L('_OPERATION_FAIL_')); //如果设置了关闭窗口,则提示完毕后自动关闭窗口 if($this->get('closeWin')) $this->assign('jumpUrl','javascript:window.close();'); $this->assign('status',$status); // 状态 //保证输出不受静态缓存影响 C('HTML_CACHE_ON',false); if($status) { //发送成功信息 $this->assign('message',$message);// 提示信息 // 成功操作后默认停留1秒 if(!isset($this->waitSecond)) $this->assign('waitSecond','1'); // 默认操作成功自动返回操作前页面 if(!isset($this->jumpUrl)) $this->assign("jumpUrl",$_SERVER["HTTP_REFERER"]); if(isMobile()){ $this->display(C('TMPL_ACTION_SUCCESS_WAP')); }else{ $this->display(C('TMPL_ACTION_SUCCESS')); } }else{ $this->assign('error',$message);// 提示信息 //发生错误时候默认停留3秒 if(!isset($this->waitSecond)) $this->assign('waitSecond','3'); // 默认发生错误的话自动返回上页 if(!isset($this->jumpUrl)) $this->assign('jumpUrl',"javascript:history.back(-1);"); if(isMobile()){ $this->display(C('TMPL_ACTION_ERROR_WAP')); }else{ $this->display(C('TMPL_ACTION_ERROR')); } // 中止执行 避免出错后继续执行 exit ; } } // $this->dispatchJump2($message,1,$jumpUrl,$ajax); function dispatchJump2($data, $msg='', $status = 1, $jumpUrl='', $ajax=false){ if (!empty(I(C('VAR_JSONP_HANDLER')))){ //jsonp if(empty($data)) $data = (object)[]; $this->ajaxReturn(array("code" =>$status, "msg" => $msg,"data" => $data),'JSONP'); } if(IS_AJAX) {// AJAX和ret_format=json if(empty($data)) $data = (object)[]; $ret = []; $ret['code'] = $status; $ret['msg'] = $msg; $ret['data'] = $data; $ret['jumpUrl'] = $jumpUrl; $this->ajaxReturn($ret); } if(is_int($ajax)) $this->assign('waitSecond',$ajax); if(!empty($jumpUrl)) $this->assign('jumpUrl',$jumpUrl); // 提示标题 $this->assign('msgTitle',$status? L('_OPERATION_SUCCESS_') : L('_OPERATION_FAIL_')); //如果设置了关闭窗口,则提示完毕后自动关闭窗口 if($this->get('closeWin')) $this->assign('jumpUrl','javascript:window.close();'); $this->assign('status',$status); // 状态 //保证输出不受静态缓存影响 C('HTML_CACHE_ON',false); if($status) { //发送成功信息 $this->assign('message',$msg);// 提示信息 if($this->jumpMenu){ $this->jumpMenu = str_replace('{$info_id}', C('info_id'),$this->jumpMenu); $this->assign('jumpMenu',$this->jumpMenu); } // 成功操作后默认停留1秒 if(!isset($this->waitSecond)) $this->assign('waitSecond','1'); // 默认操作成功自动返回操作前页面 if(!isset($this->jumpUrl)) $this->assign("jumpUrl",$_SERVER["HTTP_REFERER"]); if(isMobile()){ $this->display(C('TMPL_ACTION_SUCCESS_WAP')); }else{ $this->display(C('TMPL_ACTION_SUCCESS')); } }else{ $this->assign('error',$msg);// 提示信息 //发生错误时候默认停留3秒 if(!isset($this->waitSecond)) $this->assign('waitSecond','3'); // 默认发生错误的话自动返回上页 if(!isset($this->jumpUrl)) $this->assign('jumpUrl',"javascript:history.back(-1);"); if(isMobile()){ $this->display(C('TMPL_ACTION_ERROR_WAP')); }else{ $this->display(C('TMPL_ACTION_ERROR')); } // 中止执行 避免出错后继续执行 exit ; } } /** * @param string $firstParam data | msg * @param string $secondParam msg | jumpUrl * @param string $jumpUrl * @param bool $ajax */ //function response($firstParam='',$secondParam='',$jumpUrl=''){ function error_new($msg='',$jumpUrl='',$ajax=false){ /* //第一个参数是数组或对象,说明是app返回,则第二个参数是msg if(is_array($firstParam) || is_object($firstParam)){ //api返回 $data = $firstParam; $msg = $secondParam; }else{ //pc返回,第一个参数做msg,第二个参数做跳转url $data = ''; $msg = $firstParam; $jumpUrl = $secondParam; }*/ $status = 0; $ret_format = $this->responseFormat(); if(in_array($ret_format,['josn','jsonp']) ){ $data = []; $data['code'] = $status; $data['msg'] = $msg; $data['data'] = (object)array(); $this->ajaxReturn($data,$ret_format); } //保证输出不受静态缓存影响 C('HTML_CACHE_ON',false); $this->assign('error',$msg);// 提示信息 //发生错误时候默认停留3秒 if(!isset($this->waitSecond)) $this->assign('waitSecond','3'); // 默认发生错误的话自动返回上页 if(!isset($this->jumpUrl)) $this->assign('jumpUrl',"javascript:history.back(-1);"); if(isMobile()){ $this->display(C('TMPL_ACTION_ERROR_WAP')); }else{ $this->display(C('TMPL_ACTION_ERROR')); } // 中止执行 避免出错后继续执行 exit ; } //用户信息 function userinfo(){ if(empty($this->user_id)) return; $u = M('User'); $userinfo = $u->find($this->user_id); unset($userinfo['id']); unset($userinfo['pwd']); unset($userinfo['open_id']); unset($userinfo['bind']); $userinfo = json_encode($userinfo); $this->userinfo = $userinfo; } //设置标题 function setTitle($title){ $this->pageTitle = empty($title) ? C('SITE_TITLE') : $title.'_'.C('SITE_TITLE'); //$title && $title = $title."_"; //$this->pageTitle = $title.C('SITE_TITLE'); } //验证码 public function createVerifyCode(){ $Verify = new \Think\Verify(); $Verify->entry(); } function setParam($key,$value){ $_REQUEST[$key] = $_POST[$key] = $_GET[$key] = $value; } }