request->isAjax) { $data = []; $params = Yii::$app->request->get('ContentModel'); $query = mergeParams($query,$params); $countQuery = clone $query; //分页 if(isset($_GET['limit'])){ $query->limit(intval($_GET['limit']));} if(isset($_GET['offset'])){ $query->offset(intval($_GET['offset']));} //排序 if(isset($_GET['sort'])&&isset($_GET['sortOrder'])) { $resultList = $query->orderBy([$_GET['sort']=>($_GET['sortOrder']=='asc'?SORT_ASC:SORT_DESC)])->all(); } else { $resultList = $query->orderBy(['model_id'=>SORT_ASC])->all(); } foreach($resultList as $result) { $data[] = array('model_id'=>$result->model_id,'name'=>$result->name,'table_name'=>$result->table_name,'description'=>$result->description,'type'=>$result->type,'typetxt'=>ContentModel::typeOptions($result->type),'for_cms'=>$result->boolOptions($result->for_cms),'disabled'=>$result->disabled,'is_systemtxt'=>$result->boolOptions($result->is_system),'is_system'=>$result->is_system,'create_time'=>get_date($result->create_time,'Y-m-d H:i')); } $result = ["total"=>$countQuery->count(),"totalNotFiltered"=>$countQuery->count(),"rows"=>$data]; echo_json($result); } $this->tableTitle = array( array('field'=>'model_id','title'=>ContentModel::getAttributeName('model_id'),'align'=>'center','class'=>'col-md-1'), array('field'=>'name','title'=>ContentModel::getAttributeName('name'),'align'=>'center','class'=>'col-md-1'), array('field'=>'table_name','title'=>ContentModel::getAttributeName('table_name'),'align'=>'center','class'=>'col-md-2'), array('field'=>'typetxt','title'=>ContentModel::getAttributeName('type'),'align'=>'center','sortable'=>true,'class'=>'col-md-2'), array('field'=>'for_cms','title'=>ContentModel::getAttributeName('for_cms'),'align'=>'center','class'=>'col-md-2'), array('field'=>'is_systemtxt','title'=>ContentModel::getAttributeName('is_system'),'align'=>'center','sortable'=>true,'class'=>'col-md-2'), array('field'=>'operate','title'=>ContentModel::getAttributeName('operate'),'align'=>'center','events'=>'window.operateEvents','formatter'=>'operateFormatter','class'=>'col-md-2'), ); $this->tableConfig = array('table'=>ContentModel::shortTableName(),'url'=>$this->createRealUrl(['admin/contentmodel/list']),'setFieldUrl'=>$this->createRealUrl(['admin/contentmodel/setfield']),'idField'=>ContentModel::modelPrimaryKey(),'checkbox'=>0,'dropmenu'=>1,'pagination'=>false,'refresh'=>true); return $this->render('list',array('model'=>new ContentModel())); } //添加 function actionAdd() { $model = new ContentModel(); if(Yii::$app->request->isAjax&&$model->load(Yii::$app->request->post())){ $exist = ContentModel::find()->where("table_name='".$model->table_name."' or name='".$model->name."'")->exists(); if($exist) { $msgdata = ['error' => 1,'msg' => '已存在该模型,添加失败']; echo_json($msgdata); } $model->create_time = TIMESTAMP; if(!$model->validate()) { $msgdata = ['error' => 1,'msg' => $model->returnFirstError()]; } else { if($model->save()) { $model_id = getLastInsertId(); if($model->type==1) { $table_name = $model->table_name; $model_sql = file_get_contents(BASE_PATH.'common'.DIRECTORY_SEPARATOR.'data'.DIRECTORY_SEPARATOR.'model.sql'); $table_pre = Yii::$app->db->tablePrefix; $model_sql = str_replace('$basic_table', $table_pre.$table_name, $model_sql); $model_sql = str_replace('$table_data',$table_pre.$table_name.'_data', $model_sql); $model_sql = str_replace('$table_model_field',$table_pre.'content_model_field', $model_sql); $model_sql = str_replace('$model_id',$model_id,$model_sql); Yii::$app->db->createCommand($model_sql)->execute(); //初始化一个根栏目 /* $category = new Category(); $category->content_model_id = $model_id; $category->cat_name = $model->name; $category->cat_type = 1; $category->save();*/ $msgdata = ['error' => 0,'msg' => '操作成功']; } else if($model->type==2) { $tableName = Yii::$app->db->tablePrefix.'user_'.$model->table_name; //判断是否存在同样表名的模型 $sql = "show tables like '".$tableName."';"; $result = Yii::$app->db->createCommand($sql)->queryOne(); if($result) { $msgdata = ['error' => 1,'msg' => '该表已经存在']; } else { $model->table_name = str_replace(Yii::$app->db->tablePrefix,'',$tableName); if($model->save()) { //建立数据表 $model_sql = "CREATE TABLE `$tableName` ( `user_id` int(10) unsigned NOT NULL, PRIMARY KEY (`user_id`));"; Yii::$app->db->createCommand($model_sql)->execute(); $msgdata = ['error' => 0,'msg' => '操作成功']; } else { $msgdata = ['error' => 1,'msg' => '操作失败']; } } } } else { $msgdata = ['error' => 1,'msg' => '操作失败']; } } echo_json($msgdata); } return $this->renderAjax('add',array('model'=>$model)); } function actionEdit() { $id = $this->getKeyId('model_id'); $model = ContentModel::findOne($id); check_record_exists($model); if(Yii::$app->request->isAjax&&$model->load(Yii::$app->request->post())){ $post = Yii::$app->request->post(); $model->for_cms = $post['ContentModel']['for_cms']?$post['ContentModel']['for_cms']:0; $model->enable_search = $post['ContentModel']['enable_search']?$post['ContentModel']['enable_search']:0; $model->is_system = $post['ContentModel']['is_system']?$post['ContentModel']['is_system']:0; if(!$model->validate()) { $msgdata = ['error' => 1,'msg' => $model->returnFirstError()]; } else { if($model->save()) { $msgdata = ['error' => 0,'msg' => '操作成功']; } else { $msgdata = ['error' => 1,'msg' => '操作失败']; } } echo_json($msgdata); } return $this->renderAjax('edit',array('model'=>$model)); } function actionSettings() { $id = $this->getKeyId('model_id'); $model = ContentModel::findOne($id); check_record_exists($model); $settings = string2array($model->settings); if(Yii::$app->request->isAjax&&Yii::$app->request->post()){ $settings = isset($_POST['settings'])?$_POST['settings']:NULL; $model->settings = array2string($settings); if(!$model->validate()) { $msgdata = ['error' => 1,'msg' => $model->returnFirstError()]; } else { if($model->save()) { $msgdata = ['error' => 0,'msg' => '操作成功']; } else { $msgdata = ['error' => 1,'msg' => '操作失败']; } } echo_json($msgdata); } return $this->renderAjax('settings',array('model'=>$model,'settings'=>$settings)); } //删除模型 public function actionDel() { $model_id = $this->getKeyId('model_id'); $contentModel = ContentModel::findOne($model_id); check_record_exists($contentModel); if($contentModel->items>0) { $msgdata = ['error' => 1,'msg' => '该模型已经关联内容,请手动操作数据库']; echo_json($msgdata); } if($contentModel->delete()) { if($contentModel->type==1) { ContentModelField::deleteAll(['model_id' =>$model_id]); Category::deleteAll(['content_model_id' =>$model_id]); $table_name = $contentModel->table_name; $table_pre = Yii::$app->db->tablePrefix; $table1 = $table_pre.$table_name; $table2 = $table_pre.$table_name."_data"; $sql="DROP TABLE IF EXISTS `".$table1."`;DROP TABLE IF EXISTS `".$table2."`;"; Yii::$app->db->createCommand($sql)->execute(); $msgdata = ['error' => 0,'msg' => '操作成功']; } else if($contentModel->type==2) { $table_name = $contentModel->table_name; $table = Yii::$app->db->tablePrefix.$table_name; $sql = "select count(*) from $table "; $count = Yii::$app->db->createCommand($sql)->queryScalar(); if($count>0) { $msgdata = ['error' => 1,'msg' => '该模型已经关联内容,请手动操作数据库']; } else { ContentModelField::deleteAll(['model_id' =>$model_id]); $sql="DROP TABLE IF EXISTS `".$table."`;"; Yii::$app->db->createCommand($sql)->execute(); $msgdata = ['error' => 0,'msg' => '操作成功']; } } } else { $msgdata = ['error' => 1,'msg' => '操作失败']; } echo_json($msgdata); } //字段管理 public function actionFieldlist() { $model_id = $this->getKeyId('model_id'); $contentModel = ContentModel::findOne($model_id); check_record_exists($contentModel); $query = ContentModelField::find(); if (Yii::$app->request->isAjax) { $data = []; $params = Yii::$app->request->get('ContentModelField'); $query = mergeParams($query,$params,['model_id'=>$model_id]); $countQuery = clone $query; //分页 if(isset($_GET['limit'])){ $query->limit(intval($_GET['limit']));} if(isset($_GET['offset'])){ $query->offset(intval($_GET['offset']));} //排序 if(isset($_GET['sort'])&&isset($_GET['sortOrder'])) { $resultList = $query->orderBy([$_GET['sort']=>($_GET['sortOrder']=='asc'?SORT_ASC:SORT_DESC)])->all(); } else { $resultList = $query->orderBy(['field_id'=>SORT_ASC])->all(); } foreach($resultList as $result) { $data[] = array('field_id'=>$result->field_id,'name'=>$result->name,'field'=>$result->field,'form_type'=>$result->form_type,'is_system'=>$result->is_system,'is_systemtxt'=>$result->boolOptions($result->is_system),'is_listshow'=>$result->is_listshow,'is_listshowtxt'=>$result->boolOptions($result->is_listshow),'is_base'=>$result->is_base,'is_search'=>$result->is_search,'is_searchtxt'=>$result->boolOptions($result->is_search),'is_add_admin'=>$result->is_add_admin,'list_order'=>$result->list_order); } $result = ["total"=>$countQuery->count(),"totalNotFiltered"=>$countQuery->count(),"rows"=>$data]; echo_json($result); } $this->tableTitle = array( array('field'=>'name','title'=>ContentModelField::getAttributeName('name'),'align'=>'center','class'=>'col-md-1'), array('field'=>'field','title'=>ContentModelField::getAttributeName('field'),'align'=>'center','class'=>'col-md-1'), array('field'=>'form_type','title'=>ContentModelField::getAttributeName('form_type'),'align'=>'center','class'=>'col-md-2'), array('field'=>'is_systemtxt','title'=>ContentModelField::getAttributeName('is_system'),'align'=>'center','class'=>'col-md-1'), array('field'=>'is_add_admin','title'=>ContentModelField::getAttributeName('is_add_admin'),'align'=>'center','class'=>'col-md-1','formatter'=>'switchFormatter'), array('field'=>'is_listshow','title'=>ContentModelField::getAttributeName('is_listshow'),'align'=>'center','class'=>'col-md-1','formatter'=>'switchFormatter'), array('field'=>'is_base','title'=>ContentModelField::getAttributeName('is_base'),'align'=>'center','class'=>'col-md-1','formatter'=>'switchFormatter'), array('field'=>'is_search','title'=>ContentModelField::getAttributeName('is_search'),'align'=>'center','class'=>'col-md-1','formatter'=>'switchFormatter'), array('field'=>'list_order','title'=>ContentModelField::getAttributeName('list_order'),'align'=>'center','class'=>'col-md-2','sortable'=>true,'formatter'=>'editFormatter'), array('field'=>'operate','title'=>ContentModelField::getAttributeName('operate'),'align'=>'center','events'=>'window.operateEvents','formatter'=>'operateFormatter','class'=>'col-md-2'), ); $this->tableConfig = array('table'=>ContentModelField::shortTableName(),'url'=>$this->createRealUrl(['admin/contentmodel/fieldlist','model_id'=>$model_id]),'setFieldUrl'=>$this->createRealUrl(['admin/contentmodel/setfield']),'idField'=>ContentModelField::modelPrimaryKey(),'checkbox'=>0,'dropmenu'=>1,'pagination'=>false,'refresh'=>true); return $this->render('fieldlist',array('model'=>new ContentModelField(),'contentModel'=>$contentModel)); } //获取字段信息 public function actionFieldsetting() { $form_type = $_GET['form_type']; if(!empty($form_type)) { require BASE_PATH.'common'.DIRECTORY_SEPARATOR.'widget'.DIRECTORY_SEPARATOR.'fields'.DIRECTORY_SEPARATOR.$form_type.DIRECTORY_SEPARATOR.'config.inc.php'; ob_start(); include BASE_PATH.'common'.DIRECTORY_SEPARATOR.'widget'.DIRECTORY_SEPARATOR.'fields'.DIRECTORY_SEPARATOR.$form_type.DIRECTORY_SEPARATOR.'field_add_form.inc.php'; $data_setting = ob_get_contents(); if(strtolower(CHARSET)!='utf-8') { $data_setting = array_iconv($data_setting); } ob_end_clean(); $settings = array('field_basic_table'=>$field_basic_table,'field_minlength'=>$field_minlength,'field_maxlength'=>$field_maxlength,'field_allow_search'=>$field_allow_search,'field_allow_fullsearch'=>$field_allow_fullsearch,'field_allow_isunique'=>$field_allow_isunique,'setting'=>$data_setting); $msgdata = [ 'error' => 0, 'msg' => 'success', 'data'=>$settings, 'code'=>'200', ]; echo_json($msgdata); } } //添加 function actionAddfield() { $model_id = $this->getKeyId('model_id'); $contentModel = ContentModel::findOne($model_id); check_record_exists($contentModel); $model = new ContentModelField(); $postdata = Yii::$app->request->post('ContentModelField'); if(Yii::$app->request->isAjax&&$model->load(Yii::$app->request->post())){ $exist = ContentModelField::find()->where("field='".$model->field."' and model_id=".$model_id)->exists(); if($exist) { $msgdata = ['error' => 1,'msg' => '已存在该字段,添加失败']; echo_json($msgdata); } $model->is_system= $contentModel->type==2?1:intval($postdata['is_system']); $model->is_unique = intval($postdata['is_unique']); $model->is_base = intval($postdata['is_base']); $model->is_search = intval($postdata['is_search']); $model->is_add = intval($postdata['is_add']); $model->is_fullsearch = intval($postdata['is_fullsearch']); $model->is_add_admin = intval($postdata['is_add_admin']); $model->is_omnipotent = intval($postdata['is_omnipotent']); $model->is_listshow = intval($postdata['is_listshow']); $model->is_position = intval($postdata['is_position']); require BASE_PATH.'common'.DIRECTORY_SEPARATOR.'widget'.DIRECTORY_SEPARATOR.'fields'.DIRECTORY_SEPARATOR.$model->form_type.DIRECTORY_SEPARATOR.'config.inc.php'; if(empty($model->min_length)){$model->min_length = intval($field_minlength);} if(empty($model->max_length)){$model->max_length = intval($field_maxlength);} $model->setting = !empty($_POST['setting'])?array2string($_POST['setting']):''; if($_POST['setting']['field_type'])$field_type = $_POST['setting']['field_type']; $model->unset_group_ids = !empty($_POST['unset_group_ids'])?join(",",$_POST['unset_group_ids']):''; $model->unset_role_ids = !empty($_POST['unset_role_ids'])?join(",",$_POST['unset_role_ids']):''; $model->model_id = $model_id; if(!$model->validate()) { $msgdata = ['error' => 1,'msg' => $model->returnFirstError()]; } else { if($model->save()) { if(in_array($model->form_type,array('image','downfile'))) { $model->max_length = $field_maxlength; } if($this->_addField(['field_type'=>$field_type,'field'=>$model->field,'max_length'=>$model->max_length,'table_name'=>$contentModel->table_name,'is_system'=>$model->is_system,'contentmodel_type'=>$contentModel->type])==true) { $msgdata = ['error' => 0,'msg' => '操作成功']; } else { $msgdata = ['error' => 1,'msg' => '操作失败']; } } else { $msgdata = ['error' => 1,'msg' => '操作失败']; } } echo_json($msgdata); } return $this->renderAjax('addfield',array('model'=>$model,'contentModel'=>$contentModel)); } //编辑字段 function actionEditfield() { $field_id = $this->getKeyId('field_id'); $model = ContentModelField::findOne($field_id); check_record_exists($model); $contentModel = ContentModel::findOne($model->model_id); check_record_exists($contentModel); $oldfield = $model->field; $is_system = $model->is_system; $postdata = Yii::$app->request->post('ContentModelField'); if(Yii::$app->request->isAjax&&$model->load(Yii::$app->request->post())){ $model->is_system= $contentModel->type==2?1:$is_system; $model->is_unique = intval($postdata['is_unique']); $model->is_base = intval($postdata['is_base']); $model->is_search = intval($postdata['is_search']); $model->is_add = intval($postdata['is_add']); $model->is_fullsearch = intval($postdata['is_fullsearch']); $model->is_add_admin = intval($postdata['is_add_admin']); $model->is_omnipotent = intval($postdata['is_omnipotent']); $model->is_listshow = intval($postdata['is_listshow']); $model->is_position = intval($postdata['is_position']); require BASE_PATH.'common'.DIRECTORY_SEPARATOR.'widget'.DIRECTORY_SEPARATOR.'fields'.DIRECTORY_SEPARATOR.$model->form_type.DIRECTORY_SEPARATOR.'config.inc.php'; if(empty($model->min_length)){$model->min_length = intval($field_minlength);} if(empty($model->max_length)){$model->max_length = intval($field_maxlength);} $model->setting = !empty($_POST['setting'])?array2string($_POST['setting']):''; if($_POST['setting']['field_type'])$field_type = $_POST['setting']['field_type']; $model->unset_group_ids = !empty($_POST['unset_group_ids'])?join(",",$_POST['unset_group_ids']):''; $model->unset_role_ids = !empty($_POST['unset_role_ids'])?join(",",$_POST['unset_role_ids']):''; if(!$model->validate()) { $msgdata = ['error' => 1,'msg' => $model->returnFirstError()]; } else { if($model->save()) { if(in_array($model->form_type,array('image','downfile'))) { $model->max_length = $field_maxlength; } if($this->_editField(['field_type'=>$field_type,'field'=>$model->field,'max_length'=>$model->max_length,'table_name'=>$contentModel->table_name,'is_system'=>$model->is_system,'oldfield'=>$oldfield,'contentmodel_type'=>$contentModel->type])===true) { $msgdata = ['error' => 0,'msg' => '操作成功']; } else { $msgdata = ['error' => 1,'msg' => '操作失败']; } } else { $msgdata = ['error' => 1,'msg' => '操作失败']; } } echo_json($msgdata); } return $this->renderAjax('editfield',array('model'=>$model,'contentModel'=>$contentModel)); } private function _addField($config) { extract($config); $default_value = isset($_POST['setting']['default_value']) ? new_add_slashes($_POST['setting']['default_value']) : ''; //正整数 UNSIGNED && SIGNED $min_number = isset($_POST['setting']['min_number']) ? $_POST['setting']['min_number'] : 1; $decimal_digits = isset($_POST['setting']['decimal_digits']) ? $_POST['setting']['decimal_digits'] : ''; if($decimal_digits<0)$decimal_digits=0; $save_format = isset($_POST['setting']['save_format']) ? $_POST['setting']['save_format'] : 'datetime';//日期保存格式 if($contentmodel_type==2)//用户模型 { $table_name = Yii::$app->db->tablePrefix.$table_name; } else { $table_name = $is_system?Yii::$app->db->tablePrefix.$table_name:Yii::$app->db->tablePrefix.$table_name.'_data'; } switch($field_type) { case 'varchar': if(!isset($max_length)||empty($max_length)) $max_length = 255; $sql = "ALTER TABLE `$table_name` ADD `$field` VARCHAR( $max_length ) NOT NULL DEFAULT '$default_value'"; Yii::$app->db->createCommand($sql)->execute(); break; case 'tinyint': if(!isset($max_length)||empty($max_length)) $max_length = 3; $min_number = intval($min_number); $default_value = intval($default_value); $sql = "ALTER TABLE `$table_name` ADD `$field` TINYINT( $max_length ) ".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'"; Yii::$app->db->createCommand($sql)->execute(); break; case 'number': if(!isset($max_length)||empty($max_length)) $max_length = 10; $min_number = intval($min_number); $default_value = $decimal_digits == 0 ? intval($default_value) : floatval($default_value); if($decimal_digits==0) { $sql = "ALTER TABLE `$table_name` ADD `$field` INT( $max_length )".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'"; } else { $sql = "ALTER TABLE `$table_name` ADD `$field` DECIMAL ( $max_length,$decimal_digits )".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'"; } Yii::$app->db->createCommand($sql)->execute(); break; case 'smallint': if(!isset($max_length)||empty($max_length)) $max_length = 5; $min_number = intval($min_number); $sql = "ALTER TABLE `$table_name` ADD `$field` SMALLINT( $max_length )".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL"; Yii::$app->db->createCommand($sql)->execute(); break; case 'int': if(!isset($max_length)||empty($max_length)) $max_length = 10; $min_number = intval($min_number); $default_value = intval($default_value); $sql = "ALTER TABLE `$table_name` ADD `$field` INT( $max_length )".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'"; Yii::$app->db->createCommand($sql)->execute(); break; case 'mediumint': if(!isset($max_length)||empty($max_length)) $max_length = 8; $min_number = intval($min_number); $default_value = intval($default_value); $sql = "ALTER TABLE `$table_name` ADD `$field` INT( $max_length )".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'"; Yii::$app->db->createCommand($sql)->execute(); break; case 'mediumtext': $sql = "ALTER TABLE `$table_name` ADD `$field` MEDIUMTEXT NULL"; Yii::$app->db->createCommand($sql)->execute(); break; case 'text': $sql = "ALTER TABLE `$table_name` ADD `$field` TEXT NOT NULL"; Yii::$app->db->createCommand($sql)->execute(); break; case 'datetime': if($save_format=='int')$save_format='bigint(20)'; $sql = "ALTER TABLE `$table_name` ADD `$field` $save_format NULL"; Yii::$app->db->createCommand($sql)->execute(); break; //特殊自定义字段 case 'pages': $sql = "ALTER TABLE `$table_name` ADD `pagination_type` TINYINT( 1 ) NOT NULL DEFAULT '0'"; Yii::$app->db->createCommand($sql)->execute(); $sql = "ALTER TABLE `$table_name` ADD `maxchar_perpage` MEDIUMINT( 6 ) NOT NULL DEFAULT '0'"; Yii::$app->db->createCommand($sql)->execute(); break; case 'read_price': $default_value = intval($default_value); $sql = "ALTER TABLE `$table_name` ADD `read_price` decimal(12,2) unsigned NOT NULL default '$default_value'"; Yii::$app->db->createCommand($sql)->execute(); $sql = "ALTER TABLE `$table_name` ADD `pay_type` tinyint(1) unsigned NOT NULL default '0'"; Yii::$app->db->createCommand($sql)->execute(); break; } return true; } private function _editField($config) { extract($config); $default_value = isset($_POST['setting']['default_value']) ? new_add_slashes($_POST['setting']['default_value']) : ''; //正整数 UNSIGNED && SIGNED $min_number = isset($_POST['setting']['min_number']) ? $_POST['setting']['min_number'] : 1; $decimal_digits = isset($_POST['setting']['decimal_digits']) ? $_POST['setting']['decimal_digits'] : ''; if($decimal_digits<0)$decimal_digits=0; $save_format = isset($_POST['setting']['save_format']) ? $_POST['setting']['save_format'] : 'datetime';//日期保存格式 if($contentmodel_type==2)//用户模型 { $table_name = Yii::$app->db->tablePrefix.$table_name; } else { $table_name = $is_system?Yii::$app->db->tablePrefix.$table_name:Yii::$app->db->tablePrefix.$table_name.'_data'; } switch($field_type) { case 'varchar': if(empty($max_length)) $max_length = 255; $form_type = 'VARCHAR'; $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` $form_type( $max_length ) NOT NULL DEFAULT '$default_value'"; Yii::$app->db->createCommand($sql)->execute(); break; case 'tinyint': if(empty($max_length)) $max_length = 3; $min_number = intval($min_number); $default_value = intval($default_value); $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` TINYINT( $max_length ) ".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'"; Yii::$app->db->createCommand($sql)->execute(); break; case 'number': if(empty($max_length)) $max_length = 10; $min_number = intval($min_number); $default_value = $decimal_digits == 0 ? intval($default_value) : floatval($default_value); if($decimal_digits==0) { $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` INT($max_length)".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'"; } else { $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` DECIMAL ( $max_length,$decimal_digits )".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'"; } Yii::$app->db->createCommand($sql)->execute(); break; case 'smallint': if(empty($max_length)) $max_length = 5; $min_number = intval($min_number); $default_value = intval($default_value); $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` SMALLINT($max_length)".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'"; Yii::$app->db->createCommand($sql)->execute(); break; case 'mediumint': if(empty($max_length)) $max_length = 8; $min_number = intval($min_number); $default_value = intval($default_value); $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` MEDIUMINT($max_length)".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'"; Yii::$app->db->createCommand($sql)->execute(); break; case 'int': if(empty($max_length)) $max_length = 10; $min_number = intval($min_number); $default_value = intval($default_value); $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` INT($max_length)".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'"; Yii::$app->db->createCommand($sql)->execute(); break; case 'mediumtext': $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` MEDIUMTEXT NULL"; Yii::$app->db->createCommand($sql)->execute(); break; case 'text': $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` TEXT NOT NULL"; Yii::$app->db->createCommand($sql)->execute(); break; case 'datetime': if($save_format=='int')$save_format='bigint(20)'; $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` $save_format"; Yii::$app->db->createCommand($sql)->execute(); break; //特殊自定义字段 case 'pages': break; case 'read_price': $default_value = intval($default_value); $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` decimal(12,2) unsigned NOT NULL default '$default_value'"; Yii::$app->db->createCommand($sql)->execute(); break; } return true; } //删除字段 public function actionDelfield() { $field_id = $this->getKeyId('field_id'); $model = ContentModelField::findOne($field_id); check_record_exists($model); $contentModel = ContentModel::findOne($model->model_id); if($model->delete()) { if($contentModel->type==2) { $tablename = Yii::$app->db->tablePrefix.$contentModel->table_name; } else { $tablename = $model->is_system?Yii::$app->db->tablePrefix.$contentModel->table_name:Yii::$app->db->tablePrefix.$contentModel->table_name.'_data'; } $field = $model->field; if($model->form_type=='pages') { $sql = "ALTER TABLE `$tablename` DROP `pagination_type`"; Yii::$app->db->createCommand($sql)->execute(); $sql = "ALTER TABLE `$tablename` DROP `maxchar_perpage`"; Yii::$app->db->createCommand($sql)->execute(); } else { $sql = "ALTER TABLE `$tablename` DROP `$field`"; Yii::$app->db->createCommand($sql)->execute(); } $msgdata = ['error' => 0,'msg' => '成功']; } else { $msgdata = ['error' => 1,'msg' => '失败']; } echo_json($msgdata); } //批量排序 public function actionSortfield() { $model_id = $this->getKeyId('model_id'); $contentModel = ContentModel::findOne($model_id); check_record_exists($contentModel); $canChangeFields = array(); $canChangeDataFields = array(); $tableName = ''; $tableName1 = ''; $orderRs = array(); $orderRs1 = array(); $resultList = ContentModelField::findAll(['model_id'=>$model_id]); if(is_array($resultList))foreach($resultList as $result) { if($result->is_system) { $tableName = Yii::$app->db->tablePrefix.$contentModel->table_name; $orderRs[$result->field] = $result->list_order; $canChangeFields[] = $result->field; } else { $tableName1 = Yii::$app->db->tablePrefix.$contentModel->table_name.'_data'; $orderRs1[$result->field] = $result->list_order; $canChangeDataFields[] = $result->field; } } $fieldList = array(); $realOrder = array(); $sql = "show full columns from ".$tableName.""; $resultList = Yii::$app->db->createCommand($sql)->queryAll(); if(is_array($resultList))foreach($resultList as $result) { $realOrder[$result['Field']] = $orderRs[$result['Field']]; $fieldList[$result['Field']] = array('type'=>$result['Type'],'null'=>$result['Null'],'collation'=>$result['Collation'],'default'=>$result['Default']); } $fieldList1 = array(); $realOrder1 = array(); if(!empty($tableName1)) { $sql = "show full columns from ".$tableName1.""; $resultList = Yii::$app->db->createCommand($sql)->queryAll(); if(is_array($resultList))foreach($resultList as $result) { $realOrder1[$result['Field']] = $orderRs1[$result['Field']]; $fieldList1[$result['Field']] = array('type'=>$result['Type'],'null'=>$result['Null'],'collation'=>$result['Collation'],'default'=>$result['Default']); } } $orderRs = $realOrder; $orderRs1 = $realOrder1; asort($orderRs); asort($orderRs1); for($i=0;$idb->createCommand($sql)->execute(); } for($i=0;$idb->createCommand($sql)->execute(); } $msgdata = ['error' => 0,'msg' => '表结构修改成功']; echo_json($msgdata); } }