create(); $data['table_name'] = strtolower($data['table_name']); $table_id = $this->add($data); if ($table_id) { //创建数据表 if ($this->createModel("cms_".$data['table_name'], $table_id,$data['name'])) { //将模型表默认的系统字段创建htmlcode $m_data=M("table_field")->where(array("table_id"=>$table_id))->select(); foreach($m_data as $rs){ $newdata=array(); $newdata['field_id']=$rs['field_id']; unset($rs['field_id']);//销毁fieldid 便于重新创建字段htmlcode $newdata['htmlcode']=$this->createFieldHtmlCode($rs); $newdata['memberhtmlcode']=$this->createMemberFieldHtmlCode($rs); M("table_field")->save($newdata); } return $table_id; } else { //表创建失败 $this->where(array("table_id" => $table_id))->delete(); $this->error = '数据表创建失败!'; return false; } } else { return false; } // return $data; } //修改模型 public function data_editor(){ $data=$this->create(); $data['table_name'] = strtolower($data['table_name']);//强制表名小写 $table_id=$data['table_id']; $info = $this->where(array("table_id" => $table_id))->find(); if (empty($info)){ $this->error = '数据表不存在!'; return false; } $this->save($data); //修改model表中的table_name M("model")->where(array("table_id"=>$table_id))->save(array("table_name"=>$data['table_name'])); //修改备注 //表前缀 $dbPrefix = C("DB_PREFIX")."cms_"; //主表 if (!$this->sql_execute("ALTER TABLE `{$dbPrefix}{$info['table_name']}` COMMENT='".$data['name']."';")) { $this->error = '数据库修改表名失败!'; return false; } //副表 if (!$this->sql_execute("ALTER TABLE `{$dbPrefix}{$info['table_name']}_data` COMMENT='".$data['name']."-副表"."';")) { //主表未修改成功,进行回滚 $this->sql_execute("ALTER TABLE `{$dbPrefix}{$info['table_name']}` COMMENT='".$info['name']."';"); $this->error = '数据库修改副表表名失败!'; return false; } //检查是否更改表名了 if ($info['table_name'] != $data['table_name'] && !empty($data['table_name'])) { //检查新表名是否存在 if ($this->table_exists("cms_" . $data['table_name']) || $this->table_exists("cms_" . $data['table_name'] . '_data')) { $this->error = '该表名已经存在!'; return false; } //表名更改 if (!$this->sql_execute("RENAME TABLE `{$dbPrefix}{$info['table_name']}` TO `{$dbPrefix}{$data['table_name']}` ;")) { $this->error = '数据库修改表名失败!'; return false; } //修改副表 if (!$this->sql_execute("RENAME TABLE `{$dbPrefix}{$info['table_name']}_data` TO `{$dbPrefix}{$data['table_name']}_data` ;")) { //主表未修改成功,进行回滚 $this->sql_execute("RENAME TABLE `{$dbPrefix}{$data['table_name']}` TO `{$dbPrefix}{$info['table_name']}` ;"); $this->error = '数据库修改副表表名失败!'; return false; } } // return $data; } //删除模型 public function data_delete($table_id) { if (empty($table_id)){ $this->error = 'id不存在!'; return false; } $data = $this->where(array("table_id" => $table_id))->find(); if (!$data) { $this->error = '数据表不存在!'; return false; } //检查该模型下是否有分类 $model = M("model")->where(array("table_id" => $table_id))->find(); if ($model) { $this->error = '该数据表下有模型,请先删除模型!'; return false; } //检查新表名是否存在(如果存在需要验证该表里是否有数据) if ($this->table_exists("cms_" . $data['table_name'])) { $count=M("cms_".$data['table_name'])->count(); if($count>0){ $this->error = '该模型下有数据,请先删除数据!'; return false; } } //表名 $table_name = $data['table_name']; //删除模型数据 $this->where(array("table_id" => $table_id))->delete(); //删除所有和这个模型相关的字段 D("TableField")->where(array("table_id" => $table_id))->delete(); //删除主表 $this->deleteTable("cms_".$table_name); //删除副表 $this->deleteTable("cms_".$table_name . "_data"); return true; } /** * 创建内容模型 * @param type $tableName 模型主表名称(不包含表前缀) * @param type $modelId 模型id * @return boolean */ protected function createModel($tableName,$table_id,$name){ if (empty($tableName) || $table_id < 1) { return false; } //表前缀 $dbPrefix = C("DB_PREFIX"); //读取模型主表SQL模板 $mainTableSqll = file_get_contents(APP_PATH.self::mainTableSql); //副表 $sideTablesSql = file_get_contents(APP_PATH.self::sideTablesSql); //字段数据 $modelTablesInsert = file_get_contents(APP_PATH.self::modelTablesInsert); //表备注 $zhubiao_note=$name; $fubiao_note=$name."-副表"; //表前缀,表名,模型id替换 $sqlSplit = str_replace(array('@cms@', '@zhubiao@', '@table_id@', '@zhubiao_note@', '@fubiao_note@'), array($dbPrefix, $tableName, $table_id, $zhubiao_note, $fubiao_note), $mainTableSqll . "\n" . $sideTablesSql . "\n" . $modelTablesInsert); $this->execute($sqlSplit); return $table_id; } /* * 创建字段html代码 */ public function createFieldHtmlCode($data){ if($data['field_id']){ $info=M("table_field")->find($data['field_id']); //当字段类型 and 宽度 and 高度 and 默认值 未改变的时候htmlcode等于提交过来的,否则执行重新生成动作 if( $data['htmlcode'] &&$info['field']==$data['field'] &&$info['name']==$data['name'] &&$info['formtype']==$data['formtype'] &&$info['formwidth']==$data['formwidth'] &&$info['formheight']==$data['formheight'] &&$info['defaultval']==$data['defaultval'] &&$info['tips']==$data['tips'] &&$info['imgwidth']==$data['imgwidth'] ){ $htmlcode=$data['htmlcode']; }else{ $htmlcode=$this->FieldHtmlCodeReplace($data); } }else{ $htmlcode=$this->FieldHtmlCodeReplace($data); } return $htmlcode; } /* * 创建会员投入字段html代码 */ public function createMemberFieldHtmlCode($data){ if($data['field_id']){ $info=M("table_field")->find($data['field_id']); //当字段类型 and 宽度 and 高度 and 默认值 未改变的时候htmlcode等于提交过来的,否则执行重新生成动作 if( $data['memberhtmlcode'] &&$info['field']==$data['field'] &&$info['name']==$data['name'] &&$info['formtype']==$data['formtype'] &&$info['formwidth']==$data['formwidth'] &&$info['formheight']==$data['formheight'] &&$info['defaultval']==$data['defaultval'] &&$info['tips']==$data['tips'] ){ $htmlcode=$data['memberhtmlcode']; }else{ $htmlcode=$this->FieldHtmlCodeReplace($data,1); } }else{ $htmlcode=$this->FieldHtmlCodeReplace($data,1); } return $htmlcode; } /* * 替换字段类型的代码 * */ public function FieldHtmlCodeReplace($rs,$isMember=0){ //获取表单类型的模板文件 if($isMember){ $field_temp= file_get_contents(APP_PATH.self::modelFieldMemberPath.$rs['formtype'].".php"); }else{ $field_temp= file_get_contents(APP_PATH.self::modelFieldPath.$rs['formtype'].".php"); } //内容替换 $field_temp= str_replace("{modelFieldTemp_field}",$rs['field'],$field_temp); $field_temp= str_replace("{tips}",$rs['tips'],$field_temp); $field_temp= str_replace("{defaultval}",$rs['defaultval'],$field_temp); //宽度 if($rs['formwidth']){ $style_formwidth="width:".$rs['formwidth']."%;"; }else{ $style_formwidth=""; } $field_temp= str_replace("{style_formwidth}",$style_formwidth,$field_temp); //高度 if($rs['formheight']){ $style_formheight="height:".$rs['formheight']."px;"; }else{ $style_formheight=""; } $field_temp= str_replace("{style_formheight}",$style_formheight,$field_temp); //编辑器高度 宽度替换(因为编辑器只调用数值,不需要css样式) $field_temp= str_replace("{imgwidth}",$rs['imgwidth'],$field_temp); $field_temp= str_replace("{imgheight}",$rs['imgheight'],$field_temp); $field_temp= str_replace("{formwidth}",$rs['formwidth']."%",$field_temp); $field_temp= str_replace("{formheight}",$rs['formheight'],$field_temp); //图片上传高度宽度替换 //checkbox radio select选项替换 $checkbox_option=""; if($rs['formtype']=="checkbox"||$rs['formtype']=="radio"||$rs['formtype']=="select"){ if($rs['defaultval']){ $defaultval=explode("\r\n",$rs['defaultval']); foreach($defaultval as $v){ $dufault_arr=explode(":",$v); $option_arr=explode("==",$dufault_arr[0]); $select_checked=$dufault_arr[1]=="default"?'':"";//select 默认选择中的 $checked_default=$dufault_arr[1]=="default"?'':"";//checked radio 默认选择中的 $option_name=trim($option_arr[0]);//字段名称 $option_value=trim($option_arr[1]==""?$option_arr[0]:$option_arr[1]);//字段值 为空时=名称 if($rs['formtype']=="checkbox"){ $checkbox_option.=''; } if($rs['formtype']=="radio"){ $checkbox_option.=''; } if($rs['formtype']=="select"){ $checkbox_option.=''; } } } } $field_temp= str_replace("{select_option}",$checkbox_option,$field_temp); return $field_temp; } }