From c32a8400d362ddf5a11fbd2761eba742dbd5d685 Mon Sep 17 00:00:00 2001 From: zero Date: Thu, 8 Mar 2007 03:54:35 +0000 Subject: [PATCH] git-svn-id: http://xe-core.googlecode.com/svn/trunk@323 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- layouts/sample_layout/conf/info.xml | 2 +- modules/layout/conf/module.xml | 1 + modules/layout/layout.controller.php | 30 +++++++++-- modules/layout/layout.model.php | 24 ++++++--- modules/layout/layout.view.php | 11 +--- modules/layout/queries/updateLayout.xml | 12 +++++ modules/layout/schemas/layouts.xml | 2 +- .../tpl.admin/filter/update_layout_info.xml | 9 ++++ modules/layout/tpl.admin/js/admin.js | 53 ++++++++++--------- modules/layout/tpl.admin/layout_info.html | 14 +++-- 10 files changed, 107 insertions(+), 51 deletions(-) create mode 100644 modules/layout/queries/updateLayout.xml create mode 100644 modules/layout/tpl.admin/filter/update_layout_info.xml diff --git a/layouts/sample_layout/conf/info.xml b/layouts/sample_layout/conf/info.xml index c23a74615..ce7905a74 100644 --- a/layouts/sample_layout/conf/info.xml +++ b/layouts/sample_layout/conf/info.xml @@ -12,7 +12,7 @@ sample layout - + 상단 제목 top title text diff --git a/modules/layout/conf/module.xml b/modules/layout/conf/module.xml index dc72b0881..7268ed522 100644 --- a/modules/layout/conf/module.xml +++ b/modules/layout/conf/module.xml @@ -8,6 +8,7 @@ + diff --git a/modules/layout/layout.controller.php b/modules/layout/layout.controller.php index 5bf5959d4..69dcaa07b 100644 --- a/modules/layout/layout.controller.php +++ b/modules/layout/layout.controller.php @@ -30,6 +30,30 @@ $this->add('layout_srl', $args->layout_srl); } + /** + * @brief 레이아웃 정보 변경 + * 생성된 레이아웃의 제목과 확장변수(extra_vars)를 적용한다 + **/ + function procUpdateLayout() { + // module, act, layout_srl, layout, title을 제외하면 확장변수로 판단.. 좀 구리다.. + $extra_vars = Context::getRequestVars(); + unset($extra_vars->module); + unset($extra_vars->act); + unset($extra_vars->layout_srl); + unset($extra_vars->layout); + unset($extra_vars->title); + + // DB에 입력하기 위한 변수 설정 + $args = Context::gets('layout_srl','title'); + $args->extra_vars = serialize($extra_vars); + + $oDB = &DB::getInstance(); + $output = $oDB->executeQuery('layout.updateLayout', $args); + if(!$output->toBool()) return $output; + + $this->setMessage('success_updated'); + } + /** * @brief 레이아웃 삭제 * 삭제시 메뉴 xml 캐시 파일도 삭제 @@ -105,7 +129,7 @@ } // 해당 메뉴의 정보를 구함 - $layout_info = $oLayoutModel->getLayoutInfoXml($layout); + $layout_info = $oLayoutModel->getLayoutInfo($layout); $menu_title = $layout_info->menu->{$args->menu_id}->name; // XML 파일을 갱신하고 위치을 넘겨 받음 @@ -143,7 +167,7 @@ if(!$output->toBool()) return $output; // 해당 메뉴의 정보를 구함 - $layout_info = $oLayoutModel->getLayoutInfoXml($args->layout); + $layout_info = $oLayoutModel->getLayoutInfo($args->layout); $menu_title = $layout_info->menu->{$args->menu_id}->name; // XML 파일을 갱신하고 위치을 넘겨 받음 @@ -169,7 +193,7 @@ // 해당 메뉴의 정보를 구함 $oLayoutModel = &getModel('layout'); - $layout_info = $oLayoutModel->getLayoutInfoXml($layout); + $layout_info = $oLayoutModel->getLayoutInfo($layout); $menu_title = $layout_info->menu->{$menu_id}->name; // xml파일 재생성 diff --git a/modules/layout/layout.model.php b/modules/layout/layout.model.php index 46a98dbf7..554ce48f7 100644 --- a/modules/layout/layout.model.php +++ b/modules/layout/layout.model.php @@ -29,15 +29,22 @@ /** * @brief DB 에 생성된 한개의 레이아웃 정보를 구함 - * 생성된 레이아웃의 DB정보를 return + * 생성된 레이아웃의 DB정보+XML정보를 return **/ function getLayout($layout_srl) { + // 일단 DB에서 정보를 가져옴 $oDB = &DB::getInstance(); $args->layout_srl = $layout_srl; $output = $oDB->executeQuery('layout.getLayout', $args); if(!$output->data) return; + + // layout, extra_vars를 정리한 후 xml 파일 정보를 불러옴 (불러올때 결합) + $info = $output->data; + $layout_title = $info->title; + $layout = $info->layout; + $vars = unserialize($info->extra_vars); - return $output->data; + return $this->getLayoutInfo($layout, $layout_srl, $layout_title, $vars); } /** @@ -72,7 +79,7 @@ $layout = $searched_list[$i]; // 해당 레이아웃의 정보를 구함 - $layout_info = $this->getLayoutInfoXml($layout); + $layout_info = $this->getLayoutInfo($layout); $list[] = $layout_info; } @@ -83,7 +90,7 @@ * @brief 모듈의 conf/info.xml 을 읽어서 정보를 구함 * 이것 역시 캐싱을 통해서 xml parsing 시간을 줄인다.. **/ - function getLayoutInfoXml($layout, $layout_srl = 0) { + function getLayoutInfo($layout, $layout_srl = 0, $layout_title = "", $vars = null) { // 요청된 모듈의 경로를 구한다. 없으면 return $layout_path = $this->getLayoutPath($layout); if(!$layout_path) return; @@ -112,6 +119,8 @@ $buff .= sprintf('$layout_info->path = "%s";', $layout_path); $buff .= sprintf('$layout_info->title = "%s";', $xml_obj->title->body); $buff .= sprintf('$layout_info->version = "%s";', $xml_obj->attrs->version); + $buff .= sprintf('$layout_info->layout_srl = $layout_srl;'); + $buff .= sprintf('$layout_info->layout_title = $layout_title;'); // 작성자 정보 $buff .= sprintf('$layout_info->author->name = "%s";', $xml_obj->author->name->body); @@ -129,15 +138,16 @@ unset($var); $var = $extra_vars[$i]; - $buff .= sprintf('$layout_info->extra_var->{%s}->name = "%s";', $var->attrs->id, $var->name->body); - $buff .= sprintf('$layout_info->extra_var->{%s}->type = "%s";', $var->attrs->id, $var->type->body); + $buff .= sprintf('$layout_info->extra_var->%s->name = "%s";', $var->attrs->id, $var->name->body); + $buff .= sprintf('$layout_info->extra_var->%s->type = "%s";', $var->attrs->id, $var->type->body); + $buff .= sprintf('$layout_info->extra_var->%s->value = $vars->%s;', $var->attrs->id, $var->attrs->id); $options = $var->options->value; if(!$options) continue; if(!is_array($options)) $options = array($options); $options_count = count($options); for($i=0;$i<$options_count;$i++) { - $buff .= sprintf('$layout_info->extra_var->{%s}->options[] = "%s";', $var->attrs->id, $options[$i]->body); + $buff .= sprintf('$layout_info->extra_var->%s->options[] = "%s";', $var->attrs->id, $options[$i]->body); } } diff --git a/modules/layout/layout.view.php b/modules/layout/layout.view.php index 170ba2aa6..1424a2f6f 100644 --- a/modules/layout/layout.view.php +++ b/modules/layout/layout.view.php @@ -45,21 +45,12 @@ // 선택된 레이아웃의 정보르 구해서 세팅 $layout_srl = Context::get('layout_srl'); - // DB에 등록된 레이아웃의 정보를 가져옴 + // 레이아웃의 정보를 가져옴 $oLayoutModel = &getModel('layout'); $layout_info = $oLayoutModel->getLayout($layout_srl); // 등록된 레이아웃이 없으면 오류 표시 if(!$layout_info) return $this->dispContent(); - $layout_title = $layout_info->title; - - // xml 정보를 가져옴 - $layout = $layout_info->layout; - $layout_info = $oLayoutModel->getLayoutInfoXml($layout, $layout_srl); - - // 기본 layout_info에 세부 정보를 입력할 layout_srl, layout_title을 추가 - $layout_info->layout_srl = $layout_srl; - $layout_info->layout_title = $layout_title; Context::set('layout_info', $layout_info); diff --git a/modules/layout/queries/updateLayout.xml b/modules/layout/queries/updateLayout.xml new file mode 100644 index 000000000..6e33ffa27 --- /dev/null +++ b/modules/layout/queries/updateLayout.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/modules/layout/schemas/layouts.xml b/modules/layout/schemas/layouts.xml index 5754b5ce7..94fd19326 100644 --- a/modules/layout/schemas/layouts.xml +++ b/modules/layout/schemas/layouts.xml @@ -2,6 +2,6 @@ - +
diff --git a/modules/layout/tpl.admin/filter/update_layout_info.xml b/modules/layout/tpl.admin/filter/update_layout_info.xml new file mode 100644 index 000000000..0c869e6d1 --- /dev/null +++ b/modules/layout/tpl.admin/filter/update_layout_info.xml @@ -0,0 +1,9 @@ + +
+ + + + + + +
diff --git a/modules/layout/tpl.admin/js/admin.js b/modules/layout/tpl.admin/js/admin.js index fc31046ab..4551df3db 100644 --- a/modules/layout/tpl.admin/js/admin.js +++ b/modules/layout/tpl.admin/js/admin.js @@ -19,6 +19,15 @@ function completeInsertLayoutMenu(ret_obj) { } } +/* 레이아웃 삭제 */ +function doDeleteLayout(layout_srl) { + var fo_obj = xGetElementById("fo_layout"); + if(!fo_obj) return; + fo_obj.layout_srl.value = layout_srl; + + procFilter(fo_obj, delete_layout); +} + /* 레이아웃 메뉴 삭제 */ function doDeleteLayoutMenu(menu_srl, menu_id) { var fo_obj = xGetElementById("fo_"+menu_id); @@ -52,6 +61,25 @@ function doGetMenuInfo(menu_id, obj) { exec_xml('layout', 'getMenuTplInfo', params, completeGetMenuInfo, response_tags, params); } +/* 서버로부터 받아온 메뉴 정보를 출력 */ +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 fo_obj = xGetElementById("fo_"+menu_id); + fo_obj.menu_name.focus(); +} + +/* 빈 메뉴 추가시 사용 */ +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(); +} + /* 메뉴 목록 갱신 */ function doReloadTreeMenu(menu_id) { var fo_obj = xGetElementById("fo_"+menu_id); @@ -66,28 +94,3 @@ function doReloadTreeMenu(menu_id) { 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(); -} - -/* 서버로부터 받아온 메뉴 정보를 출력 */ -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); -} - -/* 레이아웃 삭제 */ -function doDeleteLayout(layout_srl) { - var fo_obj = xGetElementById("fo_layout"); - if(!fo_obj) return; - fo_obj.layout_srl.value = layout_srl; - - procFilter(fo_obj, delete_layout); -} diff --git a/modules/layout/tpl.admin/layout_info.html b/modules/layout/tpl.admin/layout_info.html index df31947db..9f6e389b9 100644 --- a/modules/layout/tpl.admin/layout_info.html +++ b/modules/layout/tpl.admin/layout_info.html @@ -1,4 +1,5 @@ + @@ -26,7 +27,7 @@
-
+ @@ -41,19 +42,24 @@ {$var->name} - + - + + + + + +