homepagePHP/app/Common/Coder/ContentCate/ContentCateCoder.class.php

303 lines
13 KiB
PHP
Executable File

<?php
namespace Common\Coder\ContentCate;
use Common\Coder\Coder;
class ContentCateCoder extends Coder{
public function __construct() {
parent::__construct();
$this->_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 = "<?php
{$content}";
$file = APP_PATH . 'Common/Model/' . $model_name . 'Model' . EXT;
file_put_contents($file,$content);
//创建model end
}
private function _createController($controller_name, $model_name, $list_title, $nid, $save_action_arr, $show_columns, $add_columns, $select_search, $like_search, $tree = ''){
//创建controller begin
$controller_view = new \Think\View();
$controller_view->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 = "<?php
{$controller_content}";
$file = APP_PATH . 'Admin/Controller/' . $controller_name . 'Controller' . EXT;
file_put_contents($file,$controller_content);
//创建controller end
}
}