diff --git a/common/lang/ko.lang.php b/common/lang/ko.lang.php index 84aad4ffd..4c29b8ba6 100644 --- a/common/lang/ko.lang.php +++ b/common/lang/ko.lang.php @@ -39,6 +39,8 @@ $lang->cmd_unselect_all = "모두해제"; $lang->cmd_close_all = "모두닫기"; $lang->cmd_open_all = "모두열기"; + $lang->cmd_reload = "다시읽기"; + $lang->cmd_remake_cache = "캐시파일 재생성"; $lang->enable = '가능'; $lang->disable = '불가능'; diff --git a/modules/layout/conf/module.xml b/modules/layout/conf/module.xml index 19fc9eeba..935c5fde8 100644 --- a/modules/layout/conf/module.xml +++ b/modules/layout/conf/module.xml @@ -11,5 +11,6 @@ + diff --git a/modules/layout/lang/ko.lang.php b/modules/layout/lang/ko.lang.php index dff8cf154..5f076ad2e 100644 --- a/modules/layout/lang/ko.lang.php +++ b/modules/layout/lang/ko.lang.php @@ -4,6 +4,7 @@ * @author zero * @brief 레이아웃(layout) 모듈의 기본 언어팩 **/ + $lang->cmd_make_child = '하부 메뉴 추가'; $lang->layout = '레이아웃'; $lang->layout_name = '레이아웃 이름'; diff --git a/modules/layout/layout.controller.php b/modules/layout/layout.controller.php index d5f045c10..affe1dad8 100644 --- a/modules/layout/layout.controller.php +++ b/modules/layout/layout.controller.php @@ -39,9 +39,11 @@ unset($source_args->act); if($source_args->menu_open_window!="Y") $source_args->menu_open_window = "N"; $source_args->group_srls = str_replace('|@|',',',$source_args->group_srls); + $source_args->parent_srl = (int)$source_args->parent_srl; // 변수를 다시 정리 (form문의 column과 DB column이 달라서) $args->menu_srl = $source_args->menu_srl; + $args->parent_srl = $source_args->parent_srl; $args->layout_srl = $source_args->layout_srl; $args->menu_id = $source_args->menu_id; $args->name = $source_args->menu_name; @@ -122,6 +124,36 @@ $this->add('menu_title', $menu_title); } + /** + * @brief xml 파일을 갱싱 + **/ + function procMakeXmlFile() { + // 입력값을 체크 + $menu_id = Context::get('menu_id'); + $layout = Context::get('layout'); + $layout_srl = Context::get('layout_srl'); + + // 해당 메뉴의 정보를 구함 + $oLayoutModel = &getModel('layout'); + $layout_info = $oLayoutModel->getLayoutInfoXml($layout); + $navigations = $layout_info->navigations; + if(count($navigations)) { + foreach($navigations as $key => $val) { + if($menu_id == $val->id) { + $menu_title = $val->name; + } + } + } + + // xml파일 재생성 + $xml_file = $this->makeXmlFile($layout_srl); + + // return 값 설정 + $this->add('menu_id',$menu_id); + $this->add('menu_title',$menu_title); + $this->add('xml_file',$xml_file[$menu_id]); + } + /** * @brief 메뉴의 xml 파일을 만들고 위치를 return **/ @@ -148,7 +180,8 @@ foreach($node_list as $node) { $buff .= sprintf('', $node->menu_srl, $node->name); } - $buff = "".$buff.""; + if($buff) $buff = "".$buff.""; + else $buff = ""; $xml_file[$menu_id] = sprintf("./files/cache/layout/%s_%s.xml", $layout_srl, $menu_id); FileHandler::writeFile($xml_file[$menu_id], $buff); diff --git a/modules/layout/layout.model.php b/modules/layout/layout.model.php index e906b4d06..671f4a9c5 100644 --- a/modules/layout/layout.model.php +++ b/modules/layout/layout.model.php @@ -168,19 +168,28 @@ $menu_id = Context::get('menu_id'); $menu_srl = Context::get('menu_srl'); $layuot = Context::get('layout'); + $parent_srl = Context::get('parent_srl'); // 회원 그룹의 목록을 가져옴 $oMemberModel = &getModel('member'); $group_list = $oMemberModel->getGroups(); Context::set('group_list', $group_list); - // menu_srl 이 있으면 해당 메뉴의 정보를 가져온다 - if($menu_srl) $menu_info = $this->getLayoutMenuInfo($menu_srl); - - if(!$menu_info->menu_srl) { + // parent_srl이 있고 menu_srl이 없으면 하부 메뉴 추가임 + if(!$menu_srl && $parent_srl) { $oDB = &DB::getInstance(); $menu_info->menu_srl = $oDB->getNextSequence(); + $menu_info->parent_srl = $parent_srl; + } else { + // menu_srl 이 있으면 해당 메뉴의 정보를 가져온다 + if($menu_srl) $menu_info = $this->getLayoutMenuInfo($menu_srl); + + if(!$menu_info->menu_srl) { + $oDB = &DB::getInstance(); + $menu_info->menu_srl = $oDB->getNextSequence(); + } } + Context::set('menu_info', $menu_info); // template 파일을 직접 컴파일한후 tpl변수에 담아서 return한다. diff --git a/modules/layout/queries/insertLayoutMenu.xml b/modules/layout/queries/insertLayoutMenu.xml index dc755b801..71bef7141 100644 --- a/modules/layout/queries/insertLayoutMenu.xml +++ b/modules/layout/queries/insertLayoutMenu.xml @@ -4,6 +4,7 @@ + diff --git a/modules/layout/schemas/layout_menu.xml b/modules/layout/schemas/layout_menu.xml index 9861ab365..1b78da8ac 100644 --- a/modules/layout/schemas/layout_menu.xml +++ b/modules/layout/schemas/layout_menu.xml @@ -1,5 +1,6 @@ + diff --git a/modules/layout/tpl.admin/js/admin.js b/modules/layout/tpl.admin/js/admin.js index c2a374e32..db1e404a0 100644 --- a/modules/layout/tpl.admin/js/admin.js +++ b/modules/layout/tpl.admin/js/admin.js @@ -10,6 +10,8 @@ function completeInsertLayoutMenu(ret_obj) { var xml_file = ret_obj['xml_file']; var menu_title = ret_obj['menu_title']; var menu_srl = ret_obj['menu_srl']; + + if(!xml_file) return; loadTreeMenu(xml_file, menu_id, "menu_zone_"+menu_id, menu_title, doGetMenuInfo, menu_srl); if(!menu_srl) { @@ -31,25 +33,44 @@ function doGetMenuInfo(menu_id, obj) { var fo_obj = xGetElementById("fo_layout"); var layout = fo_obj.layout.value; var node_srl = 0; + var parent_srl = 0; if(typeof(obj.getAttribute)!="undefined") { node_srl = obj.getAttribute("node_srl"); } else { node_srl = obj.node_srl; + parent_srl = obj.parent_srl; } var params = new Array(); params["menu_id"] = menu_id; params["layout"] = layout; params["menu_srl"] = node_srl; + params["parent_srl"] = parent_srl; // 서버에 요청하여 해당 노드의 정보를 수정할 수 있도록 한다. var response_tags = new Array('error','message','menu_id', 'tpl'); exec_xml('layout', 'getMenuTplInfo', params, completeGetMenuInfo, response_tags, params); } +/* 메뉴 목록 갱신 */ +function doReloadTreeMenu(menu_id) { + var fo_obj = xGetElementById("fo_"+menu_id); + if(!fo_obj) return; + + var params = new Array(); + params["menu_id"] = menu_id; + params["layout"] = fo_obj.layout.value; + params["layout_srl"] = fo_obj.layout_srl.value; + + // 서버에 요청하여 해당 노드의 정보를 수정할 수 있도록 한다. + var response_tags = new Array('error','message','menu_id', 'xml_file', 'menu_title'); + exec_xml('layout', 'procMakeXmlFile', params, completeInsertLayoutMenu, response_tags, params); +} + /* 빈 메뉴 추가시 사용 */ -function doInsertLayoutMenu(menu_id) { - var params = {node_srl:0} +function doInsertLayoutMenu(menu_id, parent_srl) { + if(typeof(parent_srl)=='undefined') parent_srl = 0; + var params = {node_srl:0, parent_srl:parent_srl} doGetMenuInfo(menu_id, params); deSelectNode(); } @@ -58,5 +79,6 @@ function doInsertLayoutMenu(menu_id) { function completeGetMenuInfo(ret_obj, response_tags) { var menu_id = ret_obj['menu_id']; var tpl = ret_obj['tpl']; + xInnerHtml("menu_zone_info_"+menu_id, ""); xInnerHtml("menu_zone_info_"+menu_id, tpl); } diff --git a/modules/layout/tpl.admin/layout_info.html b/modules/layout/tpl.admin/layout_info.html index 556cd6ee1..47a87849b 100644 --- a/modules/layout/tpl.admin/layout_info.html +++ b/modules/layout/tpl.admin/layout_info.html @@ -63,6 +63,7 @@ +
diff --git a/modules/layout/tpl.admin/layout_menu_info.html b/modules/layout/tpl.admin/layout_menu_info.html index 11c3db327..e8a995025 100644 --- a/modules/layout/tpl.admin/layout_menu_info.html +++ b/modules/layout/tpl.admin/layout_menu_info.html @@ -1,4 +1,6 @@ + + @@ -56,7 +58,8 @@
- + +