git-svn-id: http://xe-core.googlecode.com/svn/trunk@305 201d5d3c-b55e-5fd7-737f-ddc643e51545

This commit is contained in:
zero 2007-03-07 10:43:37 +00:00
parent a97f265837
commit 25ef6566f4
13 changed files with 276 additions and 104 deletions

View file

@ -7,7 +7,8 @@
<action name="dispLayoutInfo" type="view" standalone="true" />
<action name="dispList" type="controller" standalone="true" />
<action name="getLayoutMenuSrl" type="model" standalone="true" />
<action name="getMenuInfo" type="model" standalone="true" />
<action name="getMenuTplInfo" type="model" standalone="true" />
<action name="procInsertLayout" type="controller" standalone="true" />
<action name="procInsertLayoutMenu" type="controller" standalone="true" />
</actions>
</module>

View file

@ -11,6 +11,8 @@
$lang->menu_management = '메뉴 관리';
$lang->depth = '단계';
$lang->menu_name = '메뉴명';
$lang->menu_srl = '메뉴의 고유 번호';
$lang->menu_id = '메뉴의 이름';
$lang->menu_url = '연결 url';
$lang->menu_open_window = '새창 열기';
$lang->menu_img_btn = '이미지 버튼';

View file

@ -28,5 +28,85 @@
$this->add('layout_srl', $args->layout_srl);
}
/**
* @brief 레이아웃 메뉴 추가
**/
function procInsertLayoutMenu() {
// 입력할 변수 정리
$source_args = Context::getRequestVars();
unset($source_args->module);
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);
// 변수를 다시 정리 (form문의 column과 DB column이 달라서)
$args->menu_srl = $source_args->menu_srl;
$args->layout_srl = $source_args->layout_srl;
$args->menu_id = $source_args->menu_id;
$args->name = $source_args->menu_name;
$args->url = $source_args->menu_url;
$args->open_window = $source_args->menu_open_window;
$args->normal_btn = $source_args->menu_normal_btn;
$args->hover_btn = $source_args->menu_hover_btn;
$args->active_btn = $source_args->menu_active_btn;
$args->group_srls = $source_args->group_srls;
// 이미 존재하는지를 확인
$oLayoutModel = &getModel('layout');
$menu_info = $oLayoutModel->getLayoutMenuInfo($args->menu_srl);
$oDB = &DB::getInstance();
// 존재하게 되면 update를 해준다
if($menu_info->menu_srl == $args->menu_srl) {
$output = $oDB->executeQuery('layout.updateLayoutMenu', $args);
// 존재하지 않으면 insert를 해준다
} else {
$args->listorder = -1*$args->menu_srl;
$output = $oDB->executeQuery('layout.insertLayoutMenu', $args);
}
$xml_file = $this->makeXmlFile($args->layout_srl);
$this->add('xml_file', $xml_file[$args->menu_id]);
$this->add('menu_id', $args->menu_id);
$this->add('name', $args->name);
}
/**
* @brief 메뉴의 xml 파일을 만들고 위치를 return
**/
function makeXmlFile($layout_srl) {
$oDB = &DB::getInstance();
$args->layout_srl = $layout_srl;
$output = $oDB->executeQuery("layout.getLayoutMenuList", $args);
if(!$output->toBool()) return;
$list = $output->data;
$list_count = count($list);
for($i=0;$i<$list_count;$i++){
$node = $list[$i];
$menu_id = $node->menu_id;
$menu_list[$menu_id][] = $node;
$menu_id_list[] = $menu_id;
}
if(!count($menu_id_list)) return;
foreach($menu_id_list as $menu_id) {
unset($node_list);
$node_list = $menu_list[$menu_id];
$buff = "";
foreach($node_list as $node) {
$buff .= sprintf('<node node_srl="%s" text="%s" />', $node->menu_srl, $node->name);
}
$buff = "<root>".$buff."</root>";
$xml_file[$menu_id] = sprintf("./files/cache/layout/%s_%s.xml", $layout_srl, $menu_id);
FileHandler::writeFile($xml_file[$menu_id], $buff);
}
return $xml_file;
}
}
?>

View file

@ -145,22 +145,25 @@
}
/**
* @brief 메뉴 구성을 하기 위해 메뉴 srl을 return
* @brief 특정 menu_srl의 정보를 return
**/
function getLayoutMenuSrl() {
$menu_id = Context::get('menu_id');
function getLayoutMenuInfo($menu_srl) {
$oDB = &DB::getInstance();
$menu_srl = $oDB->getNextSequence();
$this->add('menu_id', $menu_id);
$this->add('menu_srl', $menu_srl);
// menu_srl 이 있으면 해당 메뉴의 정보를 가져온다
$args->menu_srl = $menu_srl;
$output = $oDB->executeQuery('layout.getLayoutMenu', $args);
if(!$output->toBool()) return $output;
$node = $output->data;
if($node->group_srls) $node->group_srls = explode(',',$node->group_srls);
return $node;
}
/**
* @brief 특정 menu_srl의 정보를 이용하여 템플릿을 구한후 return
**/
function getMenuInfo() {
function getMenuTplInfo() {
// 해당 메뉴의 정보를 가져오기 위한 변수 설정
$menu_id = Context::get('menu_id');
$menu_srl = Context::get('menu_srl');
@ -171,11 +174,22 @@
$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) {
$oDB = &DB::getInstance();
$menu_info->menu_srl = $oDB->getNextSequence();
}
Context::set('menu_info', $menu_info);
// template 파일을 직접 컴파일한후 tpl변수에 담아서 return한다.
require_once("./classes/template/TemplateHandler.class.php");
$oTemplate = new TemplateHandler();
$tpl = $oTemplate->compile($this->module_path.'tpl.admin', 'layout_menu_info');
// return 할 변수 설정
$this->add('menu_id', $menu_id);
$this->add('tpl', $tpl);
}

View file

@ -0,0 +1,11 @@
<query id="getLayoutMenu" action="select">
<tables>
<table name="layout_menu" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="menu_srl" var="menu_srl" filter="number" notnull="notnull" />
</conditions>
</query>

View file

@ -0,0 +1,14 @@
<query id="getLayoutMenuList" action="select">
<tables>
<table name="layout_menu" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="layout_srl" var="layout_srl" filter="number" notnull="notnull" />
</conditions>
<navigation>
<index var="sort_index" default="listorder" order="desc" />
</navigation>
</query>

View file

@ -0,0 +1,19 @@
<query id="insertLayoutMenu" action="insert">
<tables>
<table name="layout_menu" />
</tables>
<columns>
<column name="menu_srl" var="menu_srl" filter="number" notnull="notnull" />
<column name="layout_srl" var="layout_srl" filter="number" notnull="notnull" />
<column name="menu_id" var="menu_id" filter="number" notnull="notnull" />
<column name="name" var="name" notnull="notnull" />
<column name="url" var="url" />
<column name="open_window" var="open_window" />
<column name="normal_btn" var="normal_btn" />
<column name="hover_btn" var="hover_btn" />
<column name="active_btn" var="active_btn" />
<column name="group_srls" var="group_srls" />
<column name="listorder" var="listorder" notnull="notnull" />
<column name="regdate" var="regdate" default="curdate()" />
</columns>
</query>

View file

@ -0,0 +1,17 @@
<query id="updateLayoutMenu" action="update">
<tables>
<table name="layout_menu" />
</tables>
<columns>
<column name="name" var="name" notnull="notnull" />
<column name="url" var="url" />
<column name="open_window" var="open_window" />
<column name="normal_btn" var="normal_btn" />
<column name="hover_btn" var="hover_btn" />
<column name="active_btn" var="active_btn" />
<column name="group_srls" var="group_srls" />
</columns>
<conditions>
<condition operation="equal" column="menu_srl" var="menu_srl" filter="number" notnull="notnull" />
</conditions>
</query>

View file

@ -1,5 +1,7 @@
<table name="layout_menu">
<column name="layout_srl" type="number" size="12" notnull="notnull" primary_key="primary_key" />
<column name="menu_srl" type="number" size="12" notnull="notnull" primary_key="primary_key" />
<column name="layout_srl" type="number" size="12" notnull="notnull" index="idx_layout_menu" />
<column name="menu_id" type="varchar" size="250" notnull="notnull" index="idx_layout_menu" />
<column name="name" type="varchar" size="250" />
<column name="url" type="varchar" size="250" />
<column name="open_window" type="char" size="1" default="N" />

View file

@ -1,14 +1,16 @@
<filter name="insert_layout" module="layout" act="procInsertLayout" confirm_msg_code="confirm_submit">
<filter name="insert_layout_menu" module="layout" act="procInsertLayoutMenu" confirm_msg_code="confirm_submit">
<form>
<node target="title" required="true" />
<node target="layout_srl" required="true" />
<node target="layout" required="true" />
<node target="menu_srl" required="true" />
<node target="menu_id" required="true" />
<node target="menu_name" required="true" />
</form>
<parameter>
<param name="layout" target="layout" />
<param name="title" target="title" />
</parameter>
<response callback_func="completeInsertLayout">
<response callback_func="completeInsertLayoutMenu">
<tag name="error" />
<tag name="message" />
<tag name="layout_srl" />
<tag name="xml_file" />
<tag name="menu_id" />
<tag name="name" />
</response>
</filter>

View file

@ -4,6 +4,14 @@ function completeInsertLayout(ret_obj) {
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 name = ret_obj['name'];
loadTreeMenu(xml_file, menu_id, "menu_zone_"+menu_id, name, doGetMenuInfo);
}
/* 레이아웃 메뉴에를 클릭시 적용할 함수 */
function doGetMenuInfo(menu_id, obj) {
// layout, menu_id, node_srl을 추출
@ -23,7 +31,7 @@ function doGetMenuInfo(menu_id, obj) {
// 서버에 요청하여 해당 노드의 정보를 수정할 수 있도록 한다.
var response_tags = new Array('error','message','menu_id', 'tpl');
exec_xml('layout', 'getMenuInfo', params, completeGetMenuInfo, response_tags, params);
exec_xml('layout', 'getMenuTplInfo', params, completeGetMenuInfo, response_tags, params);
}
/* 빈 메뉴 추가시 사용 */

View file

@ -3,7 +3,7 @@
<form id="fo_layout" action="./" method="post" enctype="multipart/form-data">
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="layout" value="{$layout}" />
<input type="hidden" name="layout" value="{$layout_info->layout}" />
<div style="margin-bottom:10px;">
<table border="1" width="100%">
@ -35,21 +35,25 @@
</div>
</form>
<div style="margin-bottom:10px;">
<table border="1" width="100%">
<col width="140" />
<col width="*" />
<tr>
<th>{$lang->menu_management}</th>
<td>{nl2br($lang->about_menu_management)}</td>
</tr>
<!--@foreach($layout_info->navigations as $key => $val)-->
<tr>
<th>
{$val->name} <br />
({$val->maxdepth} {$lang->depth})
</th>
<td>
<div style="margin-bottom:10px;">
<table border="1" width="100%">
<col width="140" />
<col width="*" />
<tr>
<th>{$lang->menu_management}</th>
<td>{nl2br($lang->about_menu_management)}</td>
</tr>
<!--@foreach($layout_info->navigations as $key => $val)-->
<tr>
<th>
{$val->name} <br />
({$val->maxdepth} {$lang->depth})
</th>
<td>
<form action="./" method="get" onsubmit="return procFilter(this, insert_layout_menu)">
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="layout" value="{$layout_info->layout}" />
<input type="hidden" name="menu_id" value="{$val->id}" />
<table border="0">
<tr valign="top">
<td width="300">
@ -66,11 +70,12 @@
</td>
</tr>
</table>
<script type="text/javascript">
xAddEventListener(window,'load', function() { loadTreeMenu("{$val->xml_file}", "{$val->id}", "menu_zone_{$val->id}", "{$val->name}", doGetMenuInfo); });
</script>
</td>
</tr>
<!--@end-->
</table>
</div>
</form>
<script type="text/javascript">
xAddEventListener(window,'load', function() { loadTreeMenu("{$val->xml_file}", "{$val->id}", "menu_zone_{$val->id}", "{$val->name}", doGetMenuInfo); });
</script>
</td>
</tr>
<!--@end-->
</table>
</div>

View file

@ -1,63 +1,60 @@
<form action="./" method="get" onsubmit="procFilter(this, insert_layout_menu)">
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="layout" value="{$layout}" />
<input type="hidden" name="menu_srl" value="{$menu_info->menu_srl}" />
<table border="1" width="100%">
<col width="100" />
<col width="*" />
<tr>
<th rowspan="2">{$lang->menu_name}</th>
<td><input type="text" name="menu_name" value="{$layout_info->name}" /></td>
</tr>
<tr>
<td>{$lang->about_menu_name}</td>
</tr>
<tr>
<th rowspan="2">{$lang->menu_url}</th>
<td><input type="text" name="menu_url" value="{$layout_info->url}" /></td>
</tr>
<tr>
<td>{$lang->about_menu_url}</td>
</tr>
<tr>
<th rowspan="2">{$lang->menu_open_window}</th>
<td><input type="checkbox" name="menu_open_window" <!--@if($layout_info->open_window=="Y")-->checked="true"<!--@end--> /></td>
</tr>
<tr>
<td>{$lang->about_menu_open_window}</td>
</tr>
<tr>
<th>{$lang->menu_img_btn}</th>
<td>{$lang->about_menu_img_btn}</td>
</tr>
<tr>
<td>{$lang->menu_normal_btn}</td>
<td>http://<input type="text" name="menu_normal_btn" value="{$layout_info->normal_btn}" /></td>
</tr>
<tr>
<td>{$lang->menu_hover_btn}</td>
<td>http://<input type="text" name="menu_hover_btn" value="{$layout_info->hover_btn}" /></td>
</tr>
<tr>
<td>{$lang->menu_active_btn}</td>
<td>http://<input type="text" name="menu_active_btn" value="{$layout_info->active_btn}" /></td>
</tr>
<tr>
<th rowspan="2">{$lang->menu_group_srls}</th>
<td>
<!--@foreach($group_list as $key=>$val)-->
<input type="checkbox" name="group_srls" value="{$key}" id="group_{$key}" <!--@if($member_info->group_srls[$key])-->checked="true"<!--@end-->/>
<label for="group_{$key}">{$val->title}</label>
<!--@end-->
<col width="100" />
<col width="*" />
<tr>
<th rowspan="2">{$lang->menu_name}</th>
<td><input type="text" name="menu_name" value="{$menu_info->name}" /></td>
</tr>
<tr>
<td>{$lang->about_menu_name}</td>
</tr>
<tr>
<th rowspan="2">{$lang->menu_url}</th>
<td><input type="text" name="menu_url" value="{$menu_info->url}" /></td>
</tr>
<tr>
<td>{$lang->about_menu_url}</td>
</tr>
<tr>
<th rowspan="2">{$lang->menu_open_window}</th>
<td><input type="checkbox" name="menu_open_window" value="Y" <!--@if($menu_info->open_window=="Y")-->checked="true"<!--@end--> /></td>
</tr>
<tr>
<td>{$lang->about_menu_open_window}</td>
</tr>
<tr>
<th>{$lang->menu_img_btn}</th>
<td>{$lang->about_menu_img_btn}</td>
</tr>
<tr>
<td>{$lang->menu_normal_btn}</td>
<td><input type="text" name="menu_normal_btn" value="{$menu_info->normal_btn}" /></td>
</tr>
<tr>
<td>{$lang->menu_hover_btn}</td>
<td><input type="text" name="menu_hover_btn" value="{$menu_info->hover_btn}" /></td>
</tr>
<tr>
<td>{$lang->menu_active_btn}</td>
<td><input type="text" name="menu_active_btn" value="{$menu_info->active_btn}" /></td>
</tr>
<tr>
<th rowspan="2">{$lang->menu_group_srls}</th>
<td>
<!--@foreach($group_list as $key=>$val)-->
<input type="checkbox" name="group_srls" value="{$key}" id="group_{$key}" <!--@if(in_array($key, $menu_info->group_srls))-->checked="true"<!--@end-->/>
<label for="group_{$key}">{$val->title}</label>
<!--@end-->
</td>
</tr>
<tr>
<td>{$lang->about_menu_group_srls}</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="{$lang->cmd_submit}" />
</td>
</tr>
</table>
</form>
</td>
</tr>
<tr>
<td>{$lang->about_menu_group_srls}</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="{$lang->cmd_submit}" />
</td>
</tr>
</table>