model = model('PostsModelx'); } /** * Index */ public function index() { //设置过滤方法 $this->request->filter(['strip_tags']); if ($this->request->isAjax()) { //如果发送的来源是Selectpage,则转发到Selectpage if ($this->request->request('pkey_name')) { return $this->selectpage(); } list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $total = $this->model ->where($where) ->order($sort, $order) ->count(); $list = $this->model ->where($where) ->field('extra', true) ->order($sort, $order) ->limit($offset, $limit) ->select(); $result = array("total" => $total, "rows" => $list); return json($result); } $this->view->assign('typeList', $this->model->getTypeList()); return $this->view->fetch(); } /** * Edit */ public function edit($ids = NULL) { $row = $this->model->get($ids); if (!$row) $this->error(__('No Results were found')); if ($this->request->isPost()) { $params = $this->request->post("row/a"); if ($params) { try { //是否采用模型验证 if ($this->modelValidate) { $name = basename(str_replace('\\', '/', get_class($this->model))); $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.edit' : true) : $this->modelValidate; $row->validate($validate); } $result = $row->allowField(true)->save($params); if ($result !== false) { $this->success(); } else { $this->error($row->getError()); } } catch (think\exception\PDOException $e) { $this->error($e->getMessage()); } } $this->error(__('Parameter %s can not be empty', '')); } $params = json_decode($row['extra'], true); unset($row['extra']); $row['extra']=$params; $this->view->assign("row", $row); $this->view->assign('typeList', $this->model->getTypeList()); return $this->view->fetch(); } /** * 字段设置 */ public function fieldset() { if($this->request->isAjax()) { $ids = $this->request->post('ids/a'); $fieldset = $this->request->post('fieldset'); if(!empty($fieldset)){ $row = $this->model->get($ids); if(!$row) $this->error(__('No Results were found')); $modelx = $row['name']; $modelname = $row['title']; $tablename = config('database.prefix') . 'extra' . $row->name; //do check && make sql $json = json_decode($fieldset,true); $sql = $cols = []; foreach ($json as $k=>$v){ switch (strtolower($v['type'])){ case "string": $v['length'] = isset($v['length']) ? $v['length']>0 && $v['length']<256 ? $v['length'] : 255: 255; $cols[$v['field']] = 'varchar(' . $v['length'] . ')'; $sql[$v['field']] = "`". $v['field'] . "` VARCHAR(" . $v['length'] . ") NOT NULL DEFAULT '' COMMENT '". $v['fieldname'] . "' "; break; case "number": $v['float'] = isset($v['float']) ? $v['float']<=0? 0 : $v['float']<3 ? $v['float']: 2: 0; if($v['float']==0) { $sql[$v['field']] = "`" . $v['field'] . "` INT(10) NOT NULL DEFAULT '0' COMMENT '". $v['fieldname'] . "' "; $cols[$v['field']] = 'int(10)'; }else{ $cols[$v['field']] = 'float(10,'.$v['float'].')'; $sql[$v['field']] = "`" . $v['field'] . "` FLOAT(10,". $v['float'] . ") NOT NULL DEFAULT '0.0' COMMENT '". $v['fieldname'] . "' "; } break; case "datetime": $sql[$v['field']] = "`". $v['field'] . "` INT(10) NOT NULL DEFAULT '0' COMMENT '". $v['fieldname'] . "' "; $cols[$v['field']] = 'int(10)'; break; case "textarea": case"richtext": case"editor": $sql[$v['field']] = "`". $v['field'] . "` TEXT NOT NULL DEFAULT '' COMMENT '". $v['fieldname'] . "' "; $cols[$v['field']] = 'text'; break; case "images": case"files": $sql[$v['field']] = "`". $v['field'] . "` TEXT NOT NULL DEFAULT '' COMMENT '". $v['fieldname'] . "' "; $cols[$v['field']] = 'text'; break; case "image": case "file": $sql[$v['field']] = "`". $v['field'] . "` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '". $v['fieldname'] . "' "; $cols[$v['field']] = 'varchar(255)'; break; case "select": case "selects": case "checkbox": case"radio": $sql[$v['field']] = "`". $v['field'] . "` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '". $v['fieldname'] . "' "; $cols[$v['field']] = 'varchar(255)'; break; default: break; } } //save $result = $row->save(['extra'=>$fieldset]); if ($result === false){ $this->error($row->getError()); } unset($row); if(Db::query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='". config('database.database') . "' AND TABLE_NAME='". $tablename . "';")) { $columns=[]; foreach (Db::query("SHOW COLUMNS FROM `" . $tablename . "`;") as $k=>$v){ if($v['Field']!='id' && $v['Field']!='item_id'){ $columns[$v['Field']] = $v['Type']; } } $arr = array_diff_key($cols, $columns); $alterSql = []; foreach ($arr as $k=>$v){ $alterSql[$k] = " ADD COLUMN " . $sql[$k]; unset($cols[$k]); } $arr=array_intersect_assoc($columns, $cols); foreach ($arr as $k => $v) { unset($cols[$k]); unset($columns[$k]); } foreach($columns as $k=>$v){ if(isset($cols[$k])) { $alterSql[$k] = " MODIFY COLUMN " . $sql[$k] ; } else { $alterSql[$k] = " DROP COLUMN `" . $k . "` "; } } $execSql = "ALTER TABLE `".$tablename."` ". join(',',$alterSql) . ";"; }else { $fieldset = join(", ", $sql); $execSql = <<error($e->getMessage()); } } catch (\think\exception\PDOException $e) { $this->error($e->getMessage()); } $this->success(); } } //$this->view->assign("params", $params); $this->view->assign('typeList', $this->model->getTypeList()); return $this->view->fetch(); } /** * 修改字段状态 */ public function chgstatus($ids=null) { if ($this->request->isAjax()) { $row = $this->model->get($ids); if (!$row) $this->error(); if(empty($row['extra'])) $this->error(); $field = $this->request->post('field'); $params = json_decode($row['extra'],true); foreach($params as $k => &$v){ if($v['field']==$field){ $v['status'] = $v['status']=='hidden' ? 'normal' : 'hidden'; } } $params = json_encode($params, JSON_UNESCAPED_UNICODE); $result = $row->save(['extra'=>$params]); if ($result !== false) { $this->success(); } else { $this->error($row->getError()); } } } public function rulelist() { $search = $this->request->post('searchValue'); $rules = $this->model->getRules(); if($search){ $result[] = ['id'=> $search, 'name'=> $rules[$search]]; }else { foreach ($rules as $k => $v) { $result[] = ['id' => $k, 'name' => $v]; } } return ['list'=>$result]; } /** * 检查模型名称是否可用 */ public function check() { $params = $this->request->post("row/a"); if ($params) { $result = $this->model->get($params); if ($result!=false) { $this->error( __('Name already exist')); } else { $this->success(); } } else { $this->error( __('Invalid parameters')); } } public function check_element_available() { if($this->request->isAjax()) { $modelid = $this->request->post('id'); $val = $this->request->post('value'); $m = $this->model->get($modelid); $tablename = config('database.prefix') . 'extra' . $m->name; if (Db::query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='" . config('database.database') . "' AND TABLE_NAME='" . $tablename . "';")) { foreach (Db::query("SHOW COLUMNS FROM `" . $tablename . "`;") as $k => $v) { if ($v['Field'] == $val) { //return json(['error' => __('Field already exist')]); $this->error(__('Field already exist')); } } } //return json(['ok' => '']); $this->success(); } } }