search_arr = ['name','field']; $module_id = $this->request->param('module_id', 0); $_op = $this->field('*'); if($module_id){ $_op = $this->where('module_id',$module_id); } //执行通用查询 return parent::parentLists($_op); } /** * 读取后 * @param Model $model * @return bool|void */ public static function onAfterRead(Model $model) { if (in_array(request()->action(), [ 'delete', 'status'])) { return true; } $m_id = $model->getAttr('module_id'); $type = $model->getAttr('type'); $m_model = new Module(); if($m_id>0){ $module_data = $m_model->find($m_id)->toArray(); if($module_data){ $model->setAttr('module_name',$module_data['module_name']); }else{ $model->setAttr('module_name',''); } }else{ $model->setAttr('module_name',''); } $cms_field_rtoes = $lists = config('cms.field_types'); if(isset($cms_field_rtoes[$type])){ $model->setAttr('type_name',$cms_field_rtoes[$type]); }else{ $model->setAttr('type_name',''); } } public function delPost($ids){ if (strpos($ids, ',') !== false) { return -1; } $site_id = SITE_ID; //获取module信息 $m_model = new Module(); $field_info = $this->find($ids)->toArray(); $field = $field_info['field']; if(!$field_info){ return -1; } //获取模型信息 $module_info = $m_model->find($field_info['module_id'])->toArray(); if(!$module_info){ return -1; } $table_name = $this->cms_table.'_'.$module_info['table_name'].'_'.$site_id; $stste = $this->parentDel($ids); if($stste){ //实际查询表中是否有该字段 if ($this->_iset_field($table_name,$field )) { Db::execute("ALTER TABLE `{$table_name}` DROP `$field`"); } } return $stste; } /** * 新增或修改前 * @param Model $model * @return mixed|void */ // public static function onBeforeWrite(Model $model) // { // if (!in_array(request()->action(), ['add', 'edit','dataEdit','dataAdd'])) { // return; // } // // // } public function addPost(){ $_param = $this->request->post(); if(!$_param){ return 0; } $site_id = SITE_ID; //获取module信息 $m_model = new Module(); $module_info = $m_model->find($_param['module_id'])->toArray(); if(!$module_info){ return -1; } $table_name = $this->cms_table.'_'.$module_info['table_name'].'_'.$site_id; //数据库没有表先建立表 $tables = Db::getTables(); if(!in_array($table_name,$tables)){ $t_sqlStr = "`id` int(11) unsigned NOT NULL AUTO_INCREMENT, " . "`common_id` int(11) NOT NULL DEFAULT '0', "; $t_sql = "CREATE TABLE `{$table_name}` ( {$t_sqlStr} PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='".$module_info['table_comment']."'"; Db::execute($t_sql); } // 查询字段是否已录入 $hasIn = $this->where('field', $_param['field'])->where('module_id', $_param['module_id'])->count(); if ($hasIn) { return -2; } // 查询字段是否已在表中存在 if ($this->_iset_field($table_name, $_param['field'])) { return -2; } else { // 获取字段sql $addfieldsql = $this->get_tablesql($_param, 'add'); } $field = $this->parentAdd($_param); if ($field) { // 数据库已存在字段时不再执行字段操作 if (isset($addfieldsql) && !empty($addfieldsql)) { if (is_array($addfieldsql)) { foreach ($addfieldsql as $sql) { Db::execute($sql); } } else { Db::execute($addfieldsql); } } } return $field; } public function editPost($id){ $_param = $this->request->post(); if(!$_param){ return 0; } $site_id = SITE_ID; //获取module信息 $m_model = new Module(); $module_info = $m_model->find($_param['module_id'])->toArray(); if(!$module_info){ return -1; } $table_name = $this->cms_table.'_'.$module_info['table_name'].'_'.$site_id; //数据库没有表先建立表 $tables = Db::getTables(); if(!in_array($table_name,$tables)){ $t_sqlStr = "`id` int(11) unsigned NOT NULL AUTO_INCREMENT, " . "`common_id` int(11) NOT NULL DEFAULT '0', "; $t_sql = "CREATE TABLE `{$table_name}` ( {$t_sqlStr} PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='".$module_info['table_comment']."'"; Db::execute($t_sql); } // 查询字段是否已在表中存在 if (!$this->_iset_field($table_name, $_param['field'])) { return -2; } else { // 获取字段sql $editfieldsql = $this->get_tablesql($_param, 'edit'); } $field = $this->parentEdit($_param,$id); if ($field) { // 数据库已存在字段时不再执行字段操作 if (is_array($editfieldsql)) { foreach ($editfieldsql as $sql) { Db::execute($sql); } } else { Db::execute($editfieldsql); } } return $field; } /** * 判断表中是否存在所选字段 * @param $table 表全称 * @param $field 字段名称 * @return mixed */ protected function _iset_field($table, $field) { $fields = Db::getTableFields($table); if (array_search($field, $fields) === false) { return false; } else { return true; } } /** * 获取要执行的sql * @param array $info 字段信息 * @param string $do 操作类型[add/edit] * @return array|string */ protected function get_tablesql(array $info, string $do = 'add') { $sql = ''; $comment = $info['name']; $type = $info['type']; $cms_field_set_ups = $lists = config('cms.field_set_ups'); $set_ups = $cms_field_set_ups[$type]; $fieldtype = $set_ups?$set_ups['fieldtype']:'varchar'; $default = $set_ups?$set_ups['default']:'varchar'; $field = $info['field']; $site_id = SITE_ID; //获取module信息 $m_model = new Module(); $module_info = $m_model->find($info['module_id'])->toArray(); $tablename = $this->cms_table.'_'.$module_info['table_name'].'_'.$site_id; $pk = 'id'; $maxlength = isset($info['maxlength'])?intval($info['maxlength']):0; $minlength = isset($info['minlength'])?intval($info['minlength']):0; $numbertype = '1'; // 是否包含负数 if ($do == 'add') { $do = ' ADD '; } else { $do = " CHANGE `$field` "; } // int varchart text longtext switch ($fieldtype){ case 'int': if (!$maxlength) $maxlength = 10; $sql = "ALTER TABLE `$tablename` $do `$field` $fieldtype( $maxlength ) "." NOT NULL DEFAULT '$default' COMMENT '$comment'"; break; case 'varchar': if (!$maxlength) { $maxlength = 255; } $maxlength = min($maxlength, 500); $sql = "ALTER TABLE `$tablename` $do `$field` $fieldtype( $maxlength ) NOT NULL DEFAULT '$default' COMMENT '$comment'"; break; case 'text': $sql = "ALTER TABLE `$tablename` $do `$field` TEXT NULL COMMENT '$comment'"; break; case 'longtext': $sql = "ALTER TABLE `$tablename` $do `$field` LONGTEXT NULL COMMENT '$comment'"; break; default: if (!$maxlength) { $maxlength = 255; } $maxlength = min($maxlength, 255); $sql = "ALTER TABLE `$tablename` $do `$field` $fieldtype( $maxlength ) NOT NULL DEFAULT '$default' COMMENT '$comment'"; break; } return $sql; } }