_name = '内容分类快速生成器'; $this->_desc = '可快速生成内容及分类的内容管理模块'; $this->_namespace = __NAMESPACE__; $this->_view = CODER_DIR . '/ContentCate/View/index.html'; } public function displayVew($log_id = ''){ $this->assign('meta_title', $this->getName()); $this->assign('id', 'ContentCate'); if($log_id){ $ent = D('CoderLog')->getOne($log_id); $this->assign('coder_log', json_decode($ent['content'], true)); $this->assign('log_id', $log_id); } $this->display($this->getView()); } public function logList(){ $model = D('CoderLog'); $map['coder_name'] = 'ContentCate'; $count = $model->getListForCount($map); $per_page = C('ADMIN_PER_PAGE_NUM', null, false); if($per_page === false){ $page = new \Gy_Library\GyPage($count); } else{ $page = new \Gy_Library\GyPage($count, $per_page); } $data_list = $model->getListForPage($map, $page->nowPage, $page->listRows, 'id desc'); $builder = new \Qscmf\Builder\ListBuilder(); $builder = $builder->setMetaTitle($this->_name . '生成记录') ->addTopButton('delete'); $builder->setNID(301) ->addTableColumn('name', '控制器名称', '', '', false)->addTableColumn('create_date', '创建时间', 'fun', 'date("Y-m-d H:i:s",__data_id__)', false) ->addTableColumn('right_button', '操作', 'btn') ->setTableDataList($data_list) ->setTableDataPage($page->show()) ->addRightButton('edit') ->addRightButton('delete') ->display(); } public function generate($save_flag = ''){ $this->dbname = ''; if(IS_POST){ parent::autoCheckToken(); $data = I('post.'); if($data['log_id']){ $log_data = D('CoderLog')->getOne($data['log_id']); } $log_data['coder_name'] = 'ContentCate'; $log_data['content'] = json_encode($data); $log_data['create_date'] = time(); $log_data['name'] = $data['content_controller_name']; if(isset($log_data['id'])){ D('CoderLog')->save($log_data); } else{ D('CoderLog')->add($log_data); } if($save_flag){ $this->success('保存成功', U('admin/coder/coderLog', array('id' => 'ContentCate'))); return; } $content_show_columns = array(); $content_select_search = array(); $content_like_search = array(); $content_add_columns = array(); $content_columns = array(); $content_table_name = $data['content_table_name']; $this->_makeTable($data, $content_table_name, 'content_',$content_columns, $content_show_columns, $content_select_search, $content_like_search, $content_add_columns); $cate_show_columns = array(); $cate_select_search = array(); $cate_like_search = array(); $cate_add_columns = array(); $cate_columns = array(); $cate_table_name = $data['content_table_name'] . '_cate'; $this->_makeTable($data, $cate_table_name, 'cate_',$cate_columns, $cate_show_columns, $cate_select_search, $cate_like_search, $cate_add_columns); $content_model_name = ''; $this->_createModel($content_table_name, $content_model_name, $content_add_columns, $content_columns); $cate_model_name = ''; $this->_createModel($cate_table_name, $cate_model_name, $cate_add_columns, $cate_columns); $menu_data['title'] = $data['menu_title']; $menu_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS; $menu_data['sort'] = D('Menu')->Max('sort') + 1; $menu_data['type'] = 'backend_menu'; $menu_data['icon'] = $data['menu_icon']; $menu_data['pid'] = 0; $menu_data['level'] = 1; $menu_id = D('Menu')->add($menu_data); $content_action_id = $this->_createNode($data, $menu_id, 'content'); $this->_createController(ucfirst($data['content_controller_name']), $content_model_name, '内容', $content_action_id, array('action' => $data['action'], 'btn_title' => $data['save_btn_title']), $content_show_columns, $content_add_columns, $content_select_search, $content_like_search); $cate_action_id = $this->_createNode($data, $menu_id, 'cate'); $this->_createController(ucfirst($data['content_controller_name']) . 'Cate', $cate_model_name, '分类', $cate_action_id, array('action' => $data['action'], 'btn_title' => $data['save_btn_title']), $cate_show_columns, $cate_add_columns, $cate_select_search, $cate_like_search, "tree"); $this->success('成功'); } } private function _createNode($data, $menu_id, $type){ $controller_node_data['name'] = $type == 'content' ? $data['content_controller_name'] : $data['content_controller_name'] . 'Cate'; $controller_node_data['title'] = $type == 'content' ? $data['menu_title'] : $data['menu_title'] . '分类'; $controller_node_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS; $controller_node_data['pid'] = 1; $controller_node_data['level'] = \Gy_Library\DBCont::LEVEL_CONTROLLER; $controller_id = D('Node')->add($controller_node_data); $action_node_data['name'] = 'index'; $action_node_data['title'] = $type == 'content' ? '内容管理' : '分类管理'; $action_node_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS; $action_node_data['sort'] = $type == 'content' ? 1 : 2; $action_node_data['pid'] = $controller_id; $action_node_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION; $action_node_data['menu_id'] = $menu_id; $action_id = D('Node')->add($action_node_data); $add_data['name'] = 'add'; $add_data['title'] = '新增'; $add_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS; $add_data['pid'] = $controller_id; $add_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION; D('Node')->add($add_data); $edit_data['name'] = 'edit'; $edit_data['title'] = '修改'; $edit_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS; $edit_data['pid'] = $controller_id; $edit_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION; D('Node')->add($edit_data); $del_data['name'] = 'delete'; $del_data['title'] = '删除'; $del_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS; $del_data['pid'] = $controller_id; $del_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION; D('Node')->add($del_data); $forbid_data['name'] = 'forbid'; $forbid_data['title'] = '禁用'; $forbid_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS; $forbid_data['pid'] = $controller_id; $forbid_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION; D('Node')->add($forbid_data); $resume_data['name'] = 'resume'; $resume_data['title'] = '启用'; $resume_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS; $resume_data['pid'] = $controller_id; $resume_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION; D('Node')->add($resume_data); if($data['action'] == 'save'){ $save_data['name'] = 'save'; $save_data['title'] = $data['save_btn_title']; $save_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS; $save_data['pid'] = $controller_id; $save_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION; D('Node')->add($save_data); } return $action_id; } private function _makeTable($data, $table_name,$prefix, &$columns, &$content_show_columns, &$content_select_search, &$content_like_search, &$content_add_columns){ $table_maker = new \Gy_Library\TableMaker(); $table_maker->setTableName($table_name); $add_n = 0; $list_n = 0; foreach($data[$prefix . 'column_name'] as $k => $v){ $column['name'] = $v; $column['column_type'] = $data[$prefix . 'column_type'][$k]; $column['comment'] = $data[$prefix . 'comment'][$k]; $column['require'] = $data[$prefix . 'require'][$k]; $table_maker->addColumns($column); $columns[] = $column; if($data[$prefix . 'list_show'][$k] == 1){ $content_show_columns[] = array('name' => $v, 'type' => $data[$prefix . 'list_show_type'][$list_n] , 'title' => $data[$prefix . 'comment'][$k], 'fun' => $data[$prefix . 'list_show_fun'][$list_n], 'edit' => ($data[$prefix . 'list_edit'][$list_n] == 1) ); if($data[$prefix . 'list_show_select_search'][$list_n] == 1){ $content_select_search[] = array( 'title' => $data[$prefix . 'comment'][$k], 'name' => $v, 'fun' => $data[$prefix . 'list_show_select_options_fun'][$list_n] ); } if($data[$prefix . 'list_show_like_search'][$list_n] == 1){ $content_like_search[$v] = $data[$prefix . 'comment'][$k]; } $list_n++; } if($data[$prefix . 'add_show'][$k] == 1){ $content_add_columns[] = array( 'name' => $v, 'type' => $data[$prefix . 'add_show_type'][$add_n], 'title' => $data[$prefix . 'comment'][$k], 'options_fun' => $data[$prefix . 'add_show_options_fun'][$add_n], 'extra_attr' => $data[$prefix . 'add_show_extra_attr'][$add_n], 'default' => $data[$prefix . 'add_show_default'][$add_n], 'tips' => $data[$prefix. 'add_show_tips'][$add_n] ); $add_n++; } } if($table_maker->make() === false){ $this->error($table_maker->getError()); } } private function _createModel($table_name, &$model_name, $add_columns, $columns){ //创建model begin if(strpos($table_name, '_') !== false){ $arr = explode('_', $table_name); $table_name = ''; foreach($arr as $v){ $table_name .= ucfirst($v); } } $model_name = ucfirst($table_name); $view = new \Think\View(); $view->assign('table_name', $model_name); $view->assign('add_columns', $add_columns); $view->assign('columns', $columns); $content = $view->fetch(CODER_DIR . '/ContentCate/tpl/model.tpl'); $content = "assign('controller_name', $controller_name); $controller_view->assign('model_name', $model_name); $controller_view->assign('list_title', $list_title); $controller_view->assign('nid', $nid); $controller_view->assign('save_action', $save_action_arr); $controller_view->assign('show_columns', $show_columns); $controller_view->assign('add_columns', $add_columns); $controller_view->assign('select_search', $select_search); $controller_view->assign('tree', $tree); $like_search_arr = array(); foreach($like_search as $k=>$v){ $like_search_arr[] = "'{$k}'=>'{$v}'"; } if($like_search_arr){ $like_search_str = implode(',', $like_search_arr); $like_search_str = "array({$like_search_str})"; } $controller_view->assign('like_search', $like_search_str); $controller_content = $controller_view->fetch(CODER_DIR . '/ContentCate/tpl/controller.tpl'); $controller_content = "