diff --git a/common/js/tree_menu.js b/common/js/tree_menu.js index d5fefbbc6..35a5a3b81 100644 --- a/common/js/tree_menu.js +++ b/common/js/tree_menu.js @@ -10,9 +10,9 @@ // 아이콘을 미리 생성해 놓음 var tree_folder_icon = new Image(); -tree_folder_icon.src = "./common/tpl/images/folder.gif"; +tree_folder_icon.src = "./common/tpl/images/page.gif"; var tree_open_folder_icon = new Image(); -tree_open_folder_icon.src = "./common/tpl/images/imgfolder.gif"; +tree_open_folder_icon.src = "./common/tpl/images/page.gif"; var tree_minus_icon = new Image(); tree_minus_icon.src = "./common/tpl/images/minus.gif"; @@ -119,10 +119,10 @@ function drawNode(parent_node, menu_id) { if(hasChild) { if(!hasNextSibling) { line_icon = "minus"; - folder_icon = "folder"; + folder_icon = "page"; } else { line_icon = "minusbottom"; - folder_icon = "folder"; + folder_icon = "page"; } } else { if(hasNextSibling) { diff --git a/modules/layout/lang/ko.lang.php b/modules/layout/lang/ko.lang.php index cfb2271a7..293729dda 100644 --- a/modules/layout/lang/ko.lang.php +++ b/modules/layout/lang/ko.lang.php @@ -31,4 +31,6 @@ $lang->about_menu_open_window = '메뉴 선택시 새창으로 띄울 것인지를 정할 수 있습니다'; $lang->about_menu_img_btn = '이미지 버튼을 등록하시면 레이아웃에서 자동으로 이미지 버튼으로 교체되어 표시가 됩니다.'; $lang->about_menu_group_srls = '그룹을 선택하시면 해당 그룹의 사용자만 메뉴가 보이게 됩니다. (xml파일을 직접 열람하면 노출이 됩니다)'; + + $lang->msg_cannot_delete_for_child = '하부 메뉴가 있는 메뉴는 삭제하실 수 없습니다'; ?> diff --git a/modules/layout/layout.controller.php b/modules/layout/layout.controller.php index 58cfbfac5..08064bf5d 100644 --- a/modules/layout/layout.controller.php +++ b/modules/layout/layout.controller.php @@ -105,8 +105,15 @@ $node_info = $oLayoutModel->getLayoutMenuInfo($args->menu_srl); if($node_info->parent_srl) $parent_srl = $node_info->parent_srl; - // DB에서 삭제 $oDB = &DB::getInstance(); + + // 자식 노드가 있는지 체크 + $output = $oDB->executeQuery('layout.getChildMenuCount', $args); + if(!$output->toBool()) return $output; + + if($output->data->count>0) return new Object(-1, msg_cannot_delete_for_child); + + // DB에서 삭제 $output = $oDB->executeQuery("layout.deleteLayoutMenu", $args); if(!$output->toBool()) return $output; diff --git a/modules/layout/queries/getChildMenuCount.xml b/modules/layout/queries/getChildMenuCount.xml new file mode 100644 index 000000000..dccb4b454 --- /dev/null +++ b/modules/layout/queries/getChildMenuCount.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/modules/layout/tpl.admin/js/admin.js b/modules/layout/tpl.admin/js/admin.js index db1e404a0..e929ce2a5 100644 --- a/modules/layout/tpl.admin/js/admin.js +++ b/modules/layout/tpl.admin/js/admin.js @@ -1,84 +1,84 @@ /* 레이아웃 신규 생성시 완료 후 요청하는 함수 */ function completeInsertLayout(ret_obj) { - var layout_srl = ret_obj['layout_srl']; - location.href="./?module=admin&mo=layout&act=dispLayoutInfo&layout_srl="+layout_srl; + var layout_srl = ret_obj['layout_srl']; + location.href="./?module=admin&mo=layout&act=dispLayoutInfo&layout_srl="+layout_srl; } /* 레이아웃메뉴 입력후 */ function completeInsertLayoutMenu(ret_obj) { - var menu_id = ret_obj['menu_id']; - var xml_file = ret_obj['xml_file']; - var menu_title = ret_obj['menu_title']; - var menu_srl = ret_obj['menu_srl']; + var menu_id = ret_obj['menu_id']; + 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(!xml_file) return; + loadTreeMenu(xml_file, menu_id, "menu_zone_"+menu_id, menu_title, doGetMenuInfo, menu_srl); - if(!menu_srl) { - xInnerHtml("menu_zone_info_"+menu_id, ""); - } + if(!menu_srl) { + xInnerHtml("menu_zone_info_"+menu_id, ""); + } } -/* 레이아웃 멘뉴 삭제 */ +/* 레이아웃 메뉴 삭제 */ function doDeleteLayoutMenu(menu_srl, menu_id) { - var fo_obj = xGetElementById("fo_"+menu_id); - if(!fo_obj) return; + var fo_obj = xGetElementById("fo_"+menu_id); + if(!fo_obj) return; - procFilter(fo_obj, delete_layout_menu); + procFilter(fo_obj, delete_layout_menu); } /* 레이아웃 메뉴에를 클릭시 적용할 함수 */ function doGetMenuInfo(menu_id, obj) { - // layout, menu_id, node_srl을 추출 - 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; - } + // layout, menu_id, node_srl을 추출 + 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 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); + // 서버에 요청하여 해당 노드의 정보를 수정할 수 있도록 한다. + 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 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 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); + // 서버에 요청하여 해당 노드의 정보를 수정할 수 있도록 한다. + 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, parent_srl) { - if(typeof(parent_srl)=='undefined') parent_srl = 0; - var params = {node_srl:0, parent_srl:parent_srl} - doGetMenuInfo(menu_id, params); - deSelectNode(); + if(typeof(parent_srl)=='undefined') parent_srl = 0; + var params = {node_srl:0, parent_srl:parent_srl} + doGetMenuInfo(menu_id, params); + deSelectNode(); } /* 서버로부터 받아온 메뉴 정보를 출력 */ 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); + 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); }