css 및 js 호출순서 조정기능 추가

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@5785 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ngleader 2009-03-06 05:33:56 +00:00
parent 4f380d9c48
commit 61851f1dfe
2149 changed files with 109090 additions and 18689 deletions

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">메뉴</title>
<title xml:lang="zh-CN">菜单</title>
<title xml:lang="zh-CN">菜单管理</title>
<title xml:lang="jp">メニュー</title>
<title xml:lang="en">Menu</title>
<title xml:lang="es">Menú</title>
@ -16,7 +16,7 @@
<description xml:lang="zh-TW">可建立並管理連結版面和模組的選單。</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>manager</category>
<category>construction</category>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>

View file

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<module>
<grants />
<permissions />
<actions>
<action name="dispMenuAdminContent" type="view" admin_index="true" standalone="true" />
<action name="dispMenuAdminInsert" type="view" standalone="true" />

View file

@ -24,24 +24,24 @@
$lang->menu_hover_btn = '마우스오버';
$lang->menu_active_btn = '선택시';
$lang->menu_group_srls = '그룹 제한';
$lang->layout_maker = "레이아웃 제작자";
$lang->layout_history = "변경 사항 ";
$lang->layout_info = "레이아웃 정보";
$lang->layout_maker = '레이아웃 제작자';
$lang->layout_history = '변경 사항 ';
$lang->layout_info = '레이아웃 정보';
$lang->layout_list = '레이아웃 목록';
$lang->downloaded_list = '다운로드 목록';
$lang->limit_menu_depth = '표시 가능';
$lang->cmd_make_child = '하부 메뉴 추가';
$lang->cmd_move_to_installed_list = "생성된 목록 보기";
$lang->cmd_enable_move_menu = "메뉴 옮기기 (선택후 위 메뉴를 드래그하세요)";
$lang->cmd_search_mid = "mid 찾기";
$lang->cmd_move_to_installed_list = '생성된 목록 보기';
$lang->cmd_enable_move_menu = '메뉴 옮기기 (선택후 위 메뉴를 드래그하세요)';
$lang->cmd_search_mid = 'mid 찾기';
$lang->msg_cannot_delete_for_child = '하부 메뉴가 있는 메뉴는 삭제하실 수 없습니다';
$lang->about_title = '모듈에 연결시 쉽게 구분할 수 있는 제목을 입력해주세요';
$lang->about_menu_management = "메뉴관리는 선택하신 레이아웃에서 사용하는 메뉴를 구성할 수 있도록 합니다.\n정해진 단계까지 메뉴를 구성 가능하며 입력하신 메뉴를 클릭하시면 상세 정보를 입력할 수 있습니다.\n폴더그림을 클릭하시면 메뉴를 확장하실 수 있습니다.\n간혹 메뉴가 정상적으로 나타나지 않으면 \"캐시파일 재생성\" 버튼을 눌러서 정보를 갱신하세요.\n* 정해진 단계 이상의 메뉴는 제대로 표시되지 않을 수 있습니다.";
$lang->about_menu_name = '관리 및 이미지 버튼이 아닐경우 메뉴 명으로 나타날 제목입니다';
$lang->about_menu_url = "메뉴를 선택시 이동한 URL입니다.<br />다른 모듈을 연결하고자 할 때에는 id값만 입력해주시면 됩니다.<br />내용이 없을시 메뉴를 선택하여도 아무런 동작이 없게 됩니다.";
$lang->about_menu_url = '메뉴를 선택시 이동한 URL입니다.<br />다른 모듈을 연결하고자 할 때에는 mid값만 입력해주시면 됩니다.<br />내용이 없을시 메뉴를 선택하여도 아무런 동작이 없게 됩니다.';
$lang->about_menu_open_window = '메뉴 선택시 새창으로 띄울 것인지를 정할 수 있습니다';
$lang->about_menu_expand = '트리메뉴(tree_menu.js)를 사용시 늘 펼쳐진 상태로 있게 합니다';
$lang->about_menu_img_btn = '이미지 버튼을 등록하시면 레이아웃에서 자동으로 이미지 버튼으로 교체되어 표시가 됩니다.';
@ -49,5 +49,5 @@
$lang->about_menu = "메뉴모듈은 생성된 모듈을 편리한 메뉴관리기를 통해 정리하고 레이아웃과 연결하여 별도의 수작업 없이 완성된 사이트를 구축하도록 도와줍니다..\n메뉴는 사이트를 관리하기 보다는 모듈과 레이아웃을 연결해 주며 레이아웃을 통해서 여러가지 형태의 메뉴를 표시할 수 있도록 하는 정보만 가지고 있습니다.";
$lang->alert_image_only = "이미지 파일만 등록가능합니다.";
$lang->alert_image_only = '이미지 파일만 등록가능합니다.';
?>

View file

@ -39,7 +39,7 @@
$lang->msg_cannot_delete_for_child = '有下级菜单的菜单不能删除。';
$lang->about_title = '请输入连接模块时容易区分的标题。';
$lang->about_menu_management = "菜单管理可以构筑被选布局中使用的菜单。\n不仅可以构筑指定级(层级)菜单,点击输入的菜单项即可对其详细设置。\n点击菜单前置图标可以展开菜单。\n偶尔不能正常显示菜单时,请按\"缓冲文件再生成\"按钮更新信息。\n* 可能不能正常显示指定级(层级)以上的菜单。";
$lang->about_menu_management = "在此创建要在布局中使用的菜单。\n点击菜单前的文件夹图标可以展开收缩菜单。\n偶尔不能正常显示菜单时,请按\"更新缓冲\"按钮更新信息。\n* 不能正常显示指定级(层级)以上的菜单,创建菜单项的时候,请确认你要使用的布局究竟支持多少级别的菜单";
$lang->about_menu_name = '输入不是图片按钮时显示为菜单名标题。';
$lang->about_menu_url = "点击菜单时要移动的URL。<br />连接其他模块时只输入id值即可。<br />没有内容时点击菜单也不会有什么动作。";
$lang->about_menu_open_window = '可以设置点击菜单时是否要在新窗口中打开。';

View file

@ -41,11 +41,11 @@
$lang->about_title = '請輸入連接模組時,容易區分的標題。';
$lang->about_menu_management = "選單管理可以建構所選擇版面中使用的選單。\n不僅可以建構指定級(層級)選單,點擊輸入的選單名稱即可對其進行詳細設置。\n點擊選單前圖標可以展開選單。\n偶爾無法正常顯示選單時,請按\"重新建立暫存檔\"按鈕更新資料。\n* 可能無法正常顯示指定級(層級)以上的選單。";
$lang->about_menu_name = '輸入不是圖片按鈕時,顯示為選單名標題。';
$lang->about_menu_url = "按選單名稱後,要移往的網址。<br />連結其他模組時,只要輸入模組id即可。<br />沒有內容時,點擊選單不會產生任何事情。";
$lang->about_menu_url = "按選單名稱後,要移往的網址。<br />連結其他模組時,只要輸入模組mid即可。<br />沒有內容時,點擊選單不會產生任何事情。";
$lang->about_menu_open_window = '按選單後,是否要以新視窗開啟。';
$lang->about_menu_expand = '使用樹型選單tree_menu.js時,總是呈現展開狀態。';
$lang->about_menu_expand = '使用樹型選單(tree_menu.js)時,總是呈現展開狀態。';
$lang->about_menu_img_btn = '如果登錄圖片按鈕,在版面中會自動替換顯示為圖片按鈕。';
$lang->about_menu_group_srls = '如果選擇用戶組,只有所屬組用戶才能看到此選單。xml檔案中不能隱藏';
$lang->about_menu_group_srls = '如果選擇用戶組,只有所屬組用戶才能看到此選單。(如果可直接連結xml檔案內容將無法隱藏)';
$lang->about_menu = "選單模組可以透過選單管理器,管理已建立的模組並可和版面相互連結,輕鬆架設一個完整的網站。\n選單模組雖然可連結模組和版面,並透過版面來顯示多種類型的選單,但它不具備管理網站的功能。";

View file

@ -18,6 +18,8 @@
**/
function procMenuAdminInsert() {
// 입력할 변수 정리
$site_module_info = Context::get('site_module_info');
$args->site_srl = (int)$site_module_info->site_srl;
$args->title = Context::get('title');
$args->menu_srl = getNextSequence();
$args->listorder = $args->menu_srl * -1;
@ -49,7 +51,10 @@
**/
function procMenuAdminDelete() {
$menu_srl = Context::get('menu_srl');
return $this->deleteMenu($menu_srl);
}
function deleteMenu($menu_srl) {
// 캐시 파일 삭제
$cache_list = FileHandler::readDir("./files/cache/menu","",false,true);
if(count($cache_list)) {
@ -73,7 +78,7 @@
$output = executeQuery("menu.deleteMenu", $args);
if(!$output->toBool()) return $output;
$this->setMessage('success_deleted');
return new Object(0,'success_deleted');
}
/**
@ -89,25 +94,13 @@
$source_args->group_srls = str_replace('|@|',',',$source_args->group_srls);
$source_args->parent_srl = (int)$source_args->parent_srl;
// 메뉴 이름 체크
$lang_supported = Context::get('lang_supported');
$name_inserted = false;
foreach($lang_supported as $key => $val) {
$menu_name[$key] = $source_args->{"menu_name_".strtolower($key )};
if($menu_name[$key]) $name_inserted = true;
}
if(!$name_inserted) {
global $lang;
return new Object(-1, sprintf($lang->filter->isnull, $lang->menu_name));
}
// 변수를 다시 정리 (form문의 column과 DB column이 달라서)
$args->menu_srl = $source_args->menu_srl;
$args->menu_item_srl = $source_args->menu_item_srl;
$args->parent_srl = $source_args->parent_srl;
$args->menu_srl = $source_args->menu_srl;
$args->menu_id = $source_args->menu_id;
$args->name = serialize($menu_name);
$args->name = $source_args->menu_name;
$args->url = trim($source_args->menu_url);
$args->open_window = $source_args->menu_open_window;
$args->expand = $source_args->menu_expand;
@ -209,41 +202,6 @@
/**
* @brief 메뉴의 메뉴를 이동
**/
/*
function procMenuAdminMoveItem() {
// 변수 설정
$menu_id = Context::get('menu_id');
$source_item_srl = str_replace('menu_'.$menu_id.'_','',Context::get('source_item'));
$target_item_srl = str_replace('menu_'.$menu_id.'_','',Context::get('target_item'));
// target_item 의 값을 구함
$oMenuModel = &getAdminModel('menu');
$target_item = $oMenuModel->getMenuItemInfo($target_item_srl);
// source_item에 target_item_srl의 parent_srl, listorder 값을 입력
$source_args->menu_item_srl = $source_item_srl;
$source_args->parent_srl = $target_item->parent_srl;
$source_args->listorder = $target_item->listorder;
$output = executeQuery('menu.updateMenuItemParent', $source_args);
if(!$output->toBool()) return $output;
// target_item의 listorder값을 +1해 준다
$target_args->menu_item_srl = $target_item_srl;
$target_args->parent_srl = $target_item->parent_srl;
$target_args->listorder = $target_item->listorder -1;
$output = executeQuery('menu.updateMenuItemParent', $target_args);
if(!$output->toBool()) return $output;
// xml파일 재생성
$xml_file = $this->makeXmlFile($target_item->menu_srl);
// return 변수 설정
$this->add('menu_srl', $target_item->menu_srl);
$this->add('xml_file', $xml_file);
$this->add('source_item_srl', $source_item_srl);
}
*/
function procMenuAdminMoveItem() {
$menu_srl = Context::get('menu_srl');
$mode = Context::get('mode');
@ -255,8 +213,6 @@
$this->moveMenuItem($menu_srl,$parent_srl,$source_srl,$target_srl,$mode);
}
function moveMenuItem($menu_srl,$parent_srl,$source_srl,$target_srl,$mode){
// 원본 메뉴들을 구함
$oMenuAdminModel = &getAdminModel('menu');
@ -298,10 +254,8 @@
$xml_file = $this->makeXmlFile($menu_srl);
return $xml_file;
// $this->add('xml_file', $xml_file);
}
/**
* @brief xml 파일을 갱신
* 관리자페이지에서 메뉴 구성 간혹 xml파일이 재생성 안되는 경우가 있는데\n
@ -377,6 +331,12 @@
// xml파일 생성시 필요한 정보가 없으면 그냥 return
if(!$menu_srl) return;
// 메뉴 정보를 구함
$args->menu_srl = $menu_srl;
$output = executeQuery('menu.getMenu', $args);
if(!$output->toBool() || !$output->data) return $output;
$site_srl = $output->data->site_srl;
// DB에서 menu_srl에 해당하는 메뉴 아이템 목록을 listorder순으로 구해옴
$args->menu_srl = $menu_srl;
$args->sort_index = 'listorder';
@ -440,11 +400,11 @@
'?>'.
'<root>%s</root>',
$header_script,
$this->getXmlTree($tree[0], $tree)
$this->getXmlTree($tree[0], $tree, $site_srl)
);
// php 캐시 파일 생성
$php_output = $this->getPhpCacheCode($tree[0], $tree);
$php_output = $this->getPhpCacheCode($tree[0], $tree, $site_srl);
$php_buff = sprintf(
'<?php '.
'if(!defined("__ZBXE__")) exit(); '.
@ -468,7 +428,7 @@
* 메뉴 xml파일은 node라는 tag가 중첩으로 사용되며 xml doc으로 관리자 페이지에서 메뉴를 구성해줌\n
* (tree_menu.js 에서 xml파일을 바로 읽고 tree menu를 구현)
**/
function getXmlTree($source_node, $tree) {
function getXmlTree($source_node, $tree, $site_srl) {
if(!$source_node) return;
$oMenuAdminModel = &getAdminModel('menu');
@ -477,10 +437,10 @@
$child_buff = "";
// 자식 노드의 데이터 가져옴
if($menu_item_srl&&$tree[$menu_item_srl]) $child_buff = $this->getXmlTree($tree[$menu_item_srl], $tree);
if($menu_item_srl&&$tree[$menu_item_srl]) $child_buff = $this->getXmlTree($tree[$menu_item_srl], $tree, $site_srl);
// 변수 정리
$names = $oMenuAdminModel->getMenuItemNames($node->name);
$names = $oMenuAdminModel->getMenuItemNames($node->name, $site_srl);
foreach($names as $key => $val) {
$name_arr_str .= sprintf('"%s"=>"%s",',$key, str_replace('\\','\\\\',htmlspecialchars($val)));
}
@ -551,7 +511,7 @@
* php로 캐시파일을 만들어서 db이용없이 바로 메뉴 정보를 구할 있도록 한다
* 캐시는 ModuleHandler::displayContent() 에서 include하여 Context::set() 한다
**/
function getPhpCacheCode($source_node, $tree) {
function getPhpCacheCode($source_node, $tree, $site_srl) {
$output = array("buff"=>"", "url_list"=>array());
if(!$source_node) return $output;
@ -559,11 +519,11 @@
foreach($source_node as $menu_item_srl => $node) {
// 자식 노드가 있으면 자식 노드의 데이터를 먼저 얻어옴
if($menu_item_srl&&$tree[$menu_item_srl]) $child_output = $this->getPhpCacheCode($tree[$menu_item_srl], $tree);
if($menu_item_srl&&$tree[$menu_item_srl]) $child_output = $this->getPhpCacheCode($tree[$menu_item_srl], $tree, $site_srl);
else $child_output = array("buff"=>"", "url_list"=>array());
// 변수 정리
$names = $oMenuAdminModel->getMenuItemNames($node->name);
$names = $oMenuAdminModel->getMenuItemNames($node->name, $site_srl);
foreach($names as $key => $val) {
$name_arr_str .= sprintf('"%s"=>"%s",',$key, str_replace('\\','\\\\',htmlspecialchars($val)));
}

View file

@ -18,7 +18,11 @@
* @brief 전체 메뉴 목록을 구해옴
**/
function getMenuList($obj) {
if(!$obj->site_srl) {
$site_module_info = Context::get('site_module_info');
$obj->site_srl = (int)$site_module_info->site_srl;
}
$args->site_srl = $obj->site_srl;
$args->sort_index = $obj->sort_index;
$args->page = $obj->page?$obj->page:1;
$args->list_count = $obj->list_count?$obj->list_count:20;
@ -36,8 +40,13 @@
/**
* @brief 등록된 모든 메뉴를 return
**/
function getMenus() {
function getMenus($site_srl = 0) {
if(!$site_srl) {
$site_module_info = Context::get('site_module_info');
$site_srl = (int)$site_module_info->site_srl;
}
// 일단 DB에서 정보를 가져옴
$args->site_srl = $site_srl ;
$args->menu_srl = $menu_srl;
$output = executeQuery('menu.getMenus', $args);
if(!$output->data) return;
@ -74,40 +83,28 @@
if($node->group_srls) $node->group_srls = explode(',',$node->group_srls);
else $node->group_srls = array();
$node->name = $this->getMenuItemNames($node->name);
$tmp_name = unserialize($node->name);
if($tmp_name && count($tmp_name) ) {
$selected_lang = array();
$rand_name = $tmp_name[Context::getLangType()];
if(!$rand_name) $rand_name = array_shift($tmp_name);
$node->name = $rand_name;
}
return $node;
}
/**
* @brief 다국어 지원을 위해 menu의 name을 언어별로 나눠서 return
*/
function getMenuItemNames($name) {
$lang_supported = Context::get('lang_supported');
$source_name = $name;
$name = unserialize($name);
// unserialize한 값이 없으면, 즉 beta 0.2.3 이전 버전이라면 정해진 값을 모든 언어에 맞게 처리
if(!$name) {
$name = array();
foreach($lang_supported as $key => $val) {
$name[$key] = $source_name;
}
// 값이 있다면 혹시나 빠진 부분의 언어가 있는지 체크
} else {
$values = array_values($name);
$title_name = '';
for($i=0;$i<count($values);$i++) {
$title_name = trim($values[$i]);
if($title_name) break;;
}
foreach($lang_supported as $key => $val) {
if(!$name[$key]) $name[$key] = $title_name;
}
function getMenuItemNames($source_name, $site_srl = null) {
if(!$site_srl) {
$site_module_info = Context::get('site_module_info');
$site_srl = (int)$site_module_info->site_srl;
}
return $name;
// 언어코드 구함
$oModuleAdminModel = &getAdminModel('module');
return $oModuleAdminModel->getLangCode($site_srl, $source_name);
}
/**
@ -144,15 +141,12 @@
$item_info->menu_item_srl = getNextSequence();
}
}
Context::set('item_info', $item_info);
// template 파일을 직접 컴파일한후 tpl변수에 담아서 return한다.
$oTemplate = &TemplateHandler::getInstance();
$tpl = $oTemplate->compile($this->module_path.'tpl', 'menu_item_info');
// return 할 변수 설정
$this->add('tpl', str_replace("\n"," ",$tpl));
}

View file

@ -11,12 +11,6 @@
* @brief 설치시 추가 작업이 필요할시 구현
**/
function moduleInstall() {
// action forward에 등록 (관리자 모드에서 사용하기 위함)
$oModuleController = &getController('module');
$oModuleController->insertActionForward('menu', 'view', 'dispMenuAdminContent');
$oModuleController->insertActionForward('menu', 'view', 'dispMenuAdminInsert');
$oModuleController->insertActionForward('menu', 'view', 'dispMenuAdminManagement');
// 메뉴 사용할 디렉토리 생성
FileHandler::makeDir('./files/cache/menu');
@ -27,6 +21,11 @@
* @brief 설치가 이상이 없는지 체크하는 method
**/
function checkUpdate() {
$oDB = &DB::getInstance();
// 2009. 02. 11 menu 테이블에 site_srl 추가
if(!$oDB->isColumnExists('menu', 'site_srl')) return true;
return false;
}
@ -34,7 +33,14 @@
* @brief 업데이트 실행
**/
function moduleUpdate() {
return new Object();
$oDB = &DB::getInstance();
// 2009. 02. 11 menu 테이블에 site_srl 추가
if(!$oDB->isColumnExists('menu', 'site_srl')) {
$oDB->addColumn('menu','site_srl','number',11,0,true);
}
return new Object(0, 'success_updated');
}
/**

View file

@ -5,6 +5,9 @@
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="site_srl" var="site_srl" filter="number" default="0" notnull="notnull" />
</conditions>
<navigation>
<index var="sort_index" default="listorder" order="asc" />
<list_count var="list_count" default="20" />

View file

@ -5,6 +5,9 @@
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="site_srl" var="site_srl" filter="number" default="0" notnull="notnull" />
</conditions>
<navigation>
<index var="sort_index" default="listorder" order="asc" />
</navigation>

View file

@ -4,6 +4,7 @@
</tables>
<columns>
<column name="menu_srl" var="menu_srl" filter="number" notnull="notnull" />
<column name="site_srl" var="site_srl" filter="number" default="0" notnull="notnull" />
<column name="title" var="title" notnull="notnull" />
<column name="listorder" var="listorder" notnull="notnull" />
<column name="regdate" var="regdate" default="curdate()" />

View file

@ -1,6 +1,7 @@
<table name="menu">
<column name="menu_srl" type="number" size="12" notnull="notnull" primary_key="primary_key" />
<column name="site_srl" type="number" size="11" notnull="notnull" default="0" index="menu_site_srl" />
<column name="title" type="varchar" size="250" />
<column name="listorder" type="number" size="11" default="0" inex="idx_listorder" />
<column name="listorder" type="number" size="11" default="0" index="idx_listorder" />
<column name="regdate" type="date" index="idx_regdate" />
</table>

View file

@ -10,6 +10,6 @@
<column name="hover_btn" type="varchar" size="255" />
<column name="active_btn" type="varchar" size="255" />
<column name="group_srls" type="text" />
<column name="listorder" type="number" size="11" default="0" inex="idx_listorder" />
<column name="listorder" type="number" size="11" default="0" index="idx_listorder" />
<column name="regdate" type="date" index="idx_regdate" />
</table>

View file

@ -9,5 +9,4 @@ h3 { margin:0 20px 0 20px; }
.menuListZone td.category_zone { padding-right:10px; }
#category_list { padding:.5em 0 .5em 0; margin-bottom:2em; width:250px; overflow:hidden; float:left; position:absolute; left:10px;}
#menu_zone_info { margin-left:10px; width:550px; _width:530px; float:left; position:absolute; right:10px;}
*:first-child+html #category_info { width:540px; }
#menu_zone_info { width:560px; position:absolute; margin:0 auto; left:0; right:0; z-index:9999;}

View file

@ -1,5 +1,5 @@
<!--%import("js/board_admin.js")-->
<h3>{$lang->menu} <span class="gray">{$lang->cmd_management}</span></h3>
<h3 class="xeAdmin">{$lang->menu} <span class="gray">{$lang->cmd_management}</span></h3>
<div class="infoText">{nl2br($lang->about_menu)}</div>

View file

@ -3,39 +3,36 @@
<!--#include("header.html")-->
<!-- 정보 -->
<div class="summary">
<strong>Total</strong> <em>{number_format($total_count)}</em>, Page <strong>{number_format($page)}</strong>/{number_format($total_page)}
</div>
<!-- 삭제를 위한 임시 form -->
<form id="fo_menu" action="./" method="get">
<input type="hidden" name="menu_srl" value="" />
</form>
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="crossTable">
<caption>Total {number_format($total_count)}, Page {number_format($page)}/{number_format($total_page)}</caption>
<thead>
<tr>
<th scope="col"><div>{$lang->no}</div></th>
<th scope="col" class="wide"><div>{$lang->title}</div></th>
<th scope="col"><div>{$lang->regdate}</div></th>
<th scope="col"><div>{$lang->cmd_delete}</div></th>
<th scope="col" colspan="2"><div>&nbsp;</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($menu_list as $no => $val)-->
<tr class="row{$cycle_idx}">
<td class="number center">{$no}</td>
<td><a href="{getUrl('act','dispMenuAdminManagement','menu_srl',$val->menu_srl)}">{htmlspecialchars($val->title)}</a></td>
<td class="date center nowrap">{zdate($val->regdate,"Y-m-d")}</td>
<td class="delete center"><a href="#" onclick="doDeleteMenu('{$val->menu_srl}');return false;">{$lang->cmd_delete}</a></td>
<td class="wide">{htmlspecialchars($val->title)}</td>
<td class="nowrap">{zdate($val->regdate,"Y-m-d")}</td>
<td><a href="{getUrl('act','dispMenuAdminManagement','menu_srl',$val->menu_srl)}" class="buttonSet buttonSetting"><span>{$lang->cmd_setup}</span></a></td>
<td><a href="#" onclick="doDeleteMenu('{$val->menu_srl}');return false;" title="{htmlspecialchars($lang->cmd_delete)}" class="buttonSet buttonDelete"><span>{$lang->cmd_delete}</span></a></td>
</tr>
<!--@end-->
<tr>
<td colspan="4" class="right">
<a href="{getUrl('act','dispMenuAdminInsert','module_srl','')}" class="button"><span>{$lang->cmd_make}</span></a>
</td>
<th colspan="5" class="button">
<a href="{getUrl('act','dispMenuAdminInsert','module_srl','')}" class="button black strong"><span>{$lang->cmd_make}</span></a>
</th>
</tr>
</tbody>
</table>

View file

@ -234,4 +234,4 @@ function completeInsertMenu(ret_obj) {
//var url = current_url.setQuery('act','dispMenuAdminManagement').setQuery('menu_srl',menu_srl);
//window.open(url);
}
}

View file

@ -2,7 +2,7 @@ function Tree(url){
// clear tree;
jQuery('#menu > ul > li > ul').remove();
if(jQuery("ul.simpleTree > li > a").size() ==0)jQuery('<a href="#" class="add"><img src="./common/js/plugins/ui.tree/images/iconAdd.gif" /></a>').bind("click",function(e){addNode(0,e);}).appendTo("ul.simpleTree > li");
if(jQuery("ul.simpleTree > li > a").size() ==0)jQuery('<a href="#" class="add"><img src="./common/js/plugins/ui.tree/images/iconAdd.gif" alt="'+lang_cmd_insert+'" title="'+lang_cmd_insert+'" /></a>').bind("click",function(e){addNode(0,e);}).appendTo("ul.simpleTree > li");
//ajax get data and transeform ul il
jQuery.get(url,function(data){
@ -16,17 +16,17 @@ function Tree(url){
var node = jQuery('<li id="tree_'+node_srl+'"><span>'+text+'</span></li>');
// button
jQuery('<a href="#" class="add"><img src="./common/js/plugins/ui.tree/images/iconAdd.gif" /></a>').bind("click",function(e){
jQuery('<a href="#" class="add"><img src="./common/js/plugins/ui.tree/images/iconAdd.gif" alt="'+lang_cmd_insert+'" title="'+lang_cmd_insert+'" /></a>').bind("click",function(e){
addNode(node_srl,e);
return false;
}).appendTo(node);
jQuery('<a href="#" class="modify"><img src="./common/js/plugins/ui.tree/images/iconModify.gif" /></a>').bind("click",function(e){
jQuery('<a href="#" class="modify"><img src="./common/js/plugins/ui.tree/images/iconModify.gif" alt="'+lang_cmd_modify+'" title="'+lang_cmd_modify+'" /></a>').bind("click",function(e){
modifyNode(node_srl,e);
return false;
}).appendTo(node);
jQuery('<a href="#" class="delete"><img src="./common/js/plugins/ui.tree/images/iconDel.gif" /></a>').bind("click",function(e){
jQuery('<a href="#" class="delete"><img src="./common/js/plugins/ui.tree/images/iconDel.gif" alt="'+lang_cmd_delete+'" title="'+lang_cmd_delete+'" /></a>').bind("click",function(e){
deleteNode(node_srl);
return false;
}).appendTo(node);
@ -128,8 +128,7 @@ function modifyNode(node_srl,e){
};
jQuery.exec_json('menu.getMenuAdminTplInfo', params, function(data){
jQuery('#menu_zone_info').html(data.tpl);
jQuery('#menu_zone_info').html(data.tpl).css("margin-top",e.pageY-400);
jQuery('#menu_zone_info').html(data.tpl).css('position','absolute').css("left",e.pageX).css("top",e.pageY).css('display','block');
});
}
@ -144,7 +143,7 @@ function addNode(node_srl,e){
};
jQuery.exec_json('menu.getMenuAdminTplInfo', params, function(data){
jQuery('#menu_zone_info').html(data.tpl).css("margin-top",e.pageY-400);
jQuery('#menu_zone_info').html(data.tpl).css('position','absolute').css("left",e.pageX).css("top",e.pageY).css('display','block');
});
}
@ -168,3 +167,7 @@ function completeInsertMenuItem(ret_obj) {
jQuery('#menu_zone_info').html('');
Tree(xml_url);
}
function doMoveMenuInfo() {
xAddEventListener(window,'load', function() { window.document.body.appendChild(xGetElementById('fo_menu')); xGetElementById('menu_zone_info').style.width = '550px'; } );
}

View file

@ -4,7 +4,7 @@
<form action="./" method="get" onsubmit="return procFilter(this, insert_menu)">
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<tr>
<th scope="col"><div>{$lang->cmd_menu_insert}</div></th>
<td>{nl2br($lang->about_menu_management)}</td>
@ -17,9 +17,9 @@
</td>
</tr>
<tr>
<td colspan="2" class="right">
<span class="button"><input type="submit" value="{$lang->cmd_submit}" accesskey="s" /></span>
</td>
<th colspan="2" class="button">
<span class="button black strong"><input type="submit" value="{$lang->cmd_submit}" accesskey="s" /></span>
</th>
</tr>
</table>

View file

@ -4,120 +4,113 @@
<input type="hidden" name="hover_btn" value="{$item_info->hover_btn}" />
<input type="hidden" name="active_btn" value="{$item_info->active_btn}" />
<table cellspacing="0" class="adminTable">
<tr>
<th scope="row" colspan="3" class="button"><div>
<div class="layer" style="display:block;">
<h4 class="xeAdmin">{$lang->menu}</h4>
<button class="xButton" type="button" onclick="hideCategoryInfo();return false" ><span>{$lang->cmd_close}</span></button>
<span class="button green"><input type="submit" value="{$lang->cmd_save}" /></span>
<span class="button red"><input type="button" onclick="hideCategoryInfo();return false" value="{$lang->cmd_close}" /></span>
<div class="layerBody">
</div></th>
</tr>
<!--@if($item_info->parent_menu_name)-->
<tr class="row{$cycle_idx}">
<th scope="row" colspan="2"><div>{$lang->parent_menu_name}</div></th>
<td>{$item_info->parent_menu_name[$lang_type]}</td>
</tr>
<!--@end-->
{@ $_row = 0;}
<!--@foreach($lang_supported as $key => $val)-->
<tr>
<!--@if($_row==0)--><th scope="row" rowspan="{count($lang_supported)}"><div>{$lang->menu_name}</div></th><!--@end-->
<th><div>{$val}</div></th>
<td><input type="checkbox" name="ck_menu_name_{$key}" /><input type="text" name="menu_name_{$key}" value="{htmlspecialchars($item_info->name[$key])}" class="inputTypeText"/></td>
{@ $_row ++ }
</tr>
<!--@end-->
<tr>
<th scope="row" colspan="2"><div>{$lang->menu_url}</div></th>
<td>
<input type="text" name="menu_url" value="{htmlspecialchars($item_info->url)}" class="inputTypeText" />
<a href="{getUrl('module','menu','act','dispMenuAdminMidList')}" onclick="popopen(this.href);return false;" class="button"><span>{$lang->cmd_search_mid}</span> </a>
<p class="clear">{$lang->about_menu_url}</p>
</td>
</tr>
<tr>
<th scope="row" colspan="2"><div>{$lang->menu_open_window}</div></th>
<td>
<input type="checkbox" name="menu_open_window" value="Y" <!--@if($item_info->open_window=="Y")-->checked="checked"<!--@end--> />
<p>{$lang->about_menu_open_window}</p>
</td>
</tr>
<tr>
<th scope="row" colspan="2"><div>{$lang->menu_expand}</div></th>
<td>
<input type="checkbox" name="menu_expand" value="Y" <!--@if($item_info->expand=="Y")-->checked="checked"<!--@end--> />
<p>{$lang->about_menu_expand}</p>
</td>
</tr>
<tr>
<th scope="row" colspan="2"><div>{$lang->menu_img_btn}</div></th>
<td><p>{$lang->about_menu_img_btn}</p></td>
</tr>
<tr>
<th scope="row" colspan="2"><div>{$lang->menu_normal_btn}</div></th>
<td>
<div id="menu_normal_btn_zone" <!--@if(!$item_info->normal_btn)-->style="display:none;"<!--@end-->>
<img src="{$item_info->normal_btn}" alt="" id="menu_normal_btn_img" /><br />
<a href="#" onclick="doDeleteButton('menu_normal_btn');return false;" class="button"><span>{$lang->cmd_delete}</span></a>
</div>
<input type="file" name="menu_normal_btn" value="" class="inputTypeText" onchange="doMenuUploadButton(this); return false;"/>
</td>
</tr>
<tr>
<th scope="row" colspan="2"><div>{$lang->menu_hover_btn}</div></th>
<td>
<div id="menu_hover_btn_zone") <!--@if(!$item_info->hover_btn)-->style="display:none;"<!--@end-->>
<img src="{$item_info->hover_btn}" alt="" id="menu_hover_btn_img" /><br />
<a href="#" onclick="doDeleteButton('menu_hover_btn');return false;" class="button"><span>{$lang->cmd_delete}</span></a>
</div>
<input type="file" name="menu_hover_btn" value="" class="inputTypeText" onchange="doMenuUploadButton(this); return false;"/>
</td>
</tr>
<tr>
<th scope="row" colspan="2"><div>{$lang->menu_active_btn}</div></th>
<td>
<div id="menu_active_btn_zone" <!--@if(!$item_info->active_btn)-->style="display:none;"<!--@end-->>
<img src="{$item_info->active_btn}" alt="" id="menu_active_btn_img" /><br />
<a href="#" onclick="doDeleteButton('menu_active_btn');return false;" class="button"><span>{$lang->cmd_delete}</span></a>
</div>
<input type="file" name="menu_active_btn" value="" class="inputTypeText" onchange="doMenuUploadButton(this); return false;"/>
</td>
</tr>
<tr>
<th scope="row" colspan="2"><div>{$lang->menu_group_srls}</div></th>
<td>
<!--@foreach($group_list as $key=>$val)-->
<input type="checkbox" name="group_srls" value="{$key}" id="group_{$key}" <!--@if(is_array($item_info->group_srls)&&in_array($key, $item_info->group_srls))-->checked="checked"<!--@end-->/>
<label for="group_{$key}">{$val->title}</label>
<table cellspacing="0" class="rowTable">
<!--@if($item_info->parent_menu_name)-->
<tr class="row{$cycle_idx}">
<th scope="row"><div>{$lang->parent_menu_name}</div></th>
<td>{$item_info->parent_menu_name}</td>
</tr>
<!--@end-->
<p>{$lang->about_menu_group_srls}</p>
</td>
</tr>
<tr>
<th scope="row" colspan="3" class="button"><div>
<tr>
<th scope="row"><div>{$lang->menu_name}</div></th>
<td>
<input type="text" name="menu_name" id="menu_name" value="{htmlspecialchars($item_info->name)}" class="inputTypeText w300"/>
<a href="{getUrl('','module','module','act','dispModuleAdminLangcode','target','menu_name')}" onclick="popopen(this.href);return false;" class="buttonSet buttonSetting"><span>{$lang->cmd_find_langcode}</span></a>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->menu_url}</div></th>
<td>
<input type="text" name="menu_url" value="{htmlspecialchars($item_info->url)}" class="inputTypeText" />
<a href="{getUrl('module','menu','act','dispMenuAdminMidList')}" onclick="popopen(this.href);return false;" class="button black"><span>{$lang->cmd_search_mid}</span> </a>
<p class="clear">{$lang->about_menu_url}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->menu_open_window}</div></th>
<td>
<input type="checkbox" name="menu_open_window" value="Y" <!--@if($item_info->open_window=="Y")-->checked="checked"<!--@end--> />
<p>{$lang->about_menu_open_window}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->menu_expand}</div></th>
<td>
<input type="checkbox" name="menu_expand" value="Y" <!--@if($item_info->expand=="Y")-->checked="checked"<!--@end--> />
<p>{$lang->about_menu_expand}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->menu_img_btn}</div></th>
<td><p>{$lang->about_menu_img_btn}</p></td>
</tr>
<tr>
<th scope="row"><div>{$lang->menu_normal_btn}</div></th>
<td>
<div id="menu_normal_btn_zone" <!--@if(!$item_info->normal_btn)-->style="display:none;"<!--@end-->>
<img src="{$item_info->normal_btn}" alt="" id="menu_normal_btn_img" /><br />
<a href="#" onclick="doDeleteButton('menu_normal_btn');return false;" class="button"><span>{$lang->cmd_delete}</span></a>
</div>
<input type="file" name="menu_normal_btn" value="" class="inputTypeText" onchange="doMenuUploadButton(this); return false;"/>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->menu_hover_btn}</div></th>
<td>
<div id="menu_hover_btn_zone") <!--@if(!$item_info->hover_btn)-->style="display:none;"<!--@end-->>
<img src="{$item_info->hover_btn}" alt="" id="menu_hover_btn_img" /><br />
<a href="#" onclick="doDeleteButton('menu_hover_btn');return false;" class="button"><span>{$lang->cmd_delete}</span></a>
</div>
<input type="file" name="menu_hover_btn" value="" class="inputTypeText" onchange="doMenuUploadButton(this); return false;"/>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->menu_active_btn}</div></th>
<td>
<div id="menu_active_btn_zone" <!--@if(!$item_info->active_btn)-->style="display:none;"<!--@end-->>
<img src="{$item_info->active_btn}" alt="" id="menu_active_btn_img" /><br />
<a href="#" onclick="doDeleteButton('menu_active_btn');return false;" class="button"><span>{$lang->cmd_delete}</span></a>
</div>
<input type="file" name="menu_active_btn" value="" class="inputTypeText" onchange="doMenuUploadButton(this); return false;"/>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->menu_group_srls}</div></th>
<td>
<!--@foreach($group_list as $key=>$val)-->
<input type="checkbox" name="group_srls" value="{$key}" id="group_{$key}" <!--@if(is_array($item_info->group_srls)&&in_array($key, $item_info->group_srls))-->checked="checked"<!--@end-->/>
<label for="group_{$key}">{$val->title}</label>
<!--@end-->
<p>{$lang->about_menu_group_srls}</p>
</td>
</tr>
<tr>
<th scope="row" colspan="3" class="button"><div>
<span class="button black strong"><input type="submit" value="{$lang->cmd_save}" /></span>
</div></th>
</tr>
</table>
<span class="button green"><input type="submit" value="{$lang->cmd_save}" /></span>
<span class="button red"><input type="button" onclick="hideCategoryInfo();return false" value="{$lang->cmd_close}" /></span>
<script type="text/javascript">
(function($){
$("[name^=menu_name_]").bind("blur",function(e){
if($("[name=ck_"+$(this).attr("name")+"]:checked").size()>0){
$("[name^=ck_menu_name_]:checked").each(function(i){
$("[name="+$(this).attr("name").substring(3)+"]").val(e.target.value);
});
}
});
})(jQuery);
</script>
</div></th>
</tr>
</table>
<script type="text/javascript">
(function($){
$("[name^=menu_name_]").bind("blur",function(e){
if($("[name=ck_"+$(this).attr("name")+"]:checked").size()>0){
$("[name^=ck_menu_name_]:checked").each(function(i){
$("[name="+$(this).attr("name").substring(3)+"]").val(e.target.value);
});
}
});
})(jQuery);
</script>
</div>
</div>

View file

@ -18,8 +18,8 @@
<!--@if($module == 'admin')-->
<form action="./" method="get" onsubmit="return procFilter(this, update_menu_title)">
<input type="hidden" name="menu_srl" value="{$menu_info->menu_srl}" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->menu} {$lang->cmd_management}</caption>
<h4 class="xeAdmin">{$lang->menu} {$lang->cmd_management}</h4>
<table cellspacing="0" class="rowTable">
<tr>
<th scope="col"><div>{$lang->title}</div></th>
<td>
@ -41,7 +41,7 @@
</form>
<!--@else-->
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="rowTable">
<tr>
<th scope="col"><div>{$lang->title}</div></th>
<td class="left">
@ -65,24 +65,30 @@
<input type="hidden" name="module" value="menu" />
<input type="hidden" name="act" value="" />
<input type="hidden" name="target" value="" />
<div id="menu">
<ul class="simpleTree">
<li class="root" id='tree_0'><span>{$lang->menu}</span></li>
</ul>
</div>
<div id="menu_zone_info" style="position:absolute;top:200px; width:70%; right:20px"></div>
<div id="menu_zone_info"></div>
</form>
<div id="menu">
<ul class="simpleTree">
<li class="root" id='tree_0'><span>{$lang->menu}</span></li>
</ul>
</div>
</div>
</div>
<iframe id='tmp_upload_iframe' name='tmp_upload_iframe' style='display:none;width:1px;height:1px;position:absolute;top:-10px;left:-10px'></iframe>
<script type="text/javascript">
<script type="text/javascript">//<![CDATA[
//언어파일 로드용
var lang_cmd_insert = "{htmlspecialchars($lang->cmd_insert)}";
var lang_cmd_delete = "{htmlspecialchars($lang->cmd_delete)}";
var lang_cmd_modify = "{htmlspecialchars($lang->cmd_modify)}";
var simpleTreeCollection;
var max_menu_depth = 999;
var xml_url = "{$menu_info->xml_file}";
var lang_confirm_delete = "{$lang->confirm_delete}";
doMoveMenuInfo();
Tree(xml_url);
//]]>
</script>

View file

@ -1,9 +1,9 @@
<!--%import("js/menu_admin.js")-->
<div id="popHeadder" class="w700">
<h3>{$lang->cmd_search_mid}</h3>
<div id="popHeader" class="wide">
<h3 class="xeAdmin">{$lang->cmd_search_mid}</h3>
</div>
<div id="popBody" class="w700">
<div id="popBody">
<form action="./" method="get">
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
@ -21,7 +21,7 @@
<!--@end-->
</select>
<input type="submit" name="go_button" id="go_button" value="GO" class="buttonTypeGo" />
<table cellspacing="0" class="adminTable topGap">
<table cellspacing="0" class="rowTable topGap">
<thead>
<tr>
<th scope="row"><div>{$lang->module_category}</div></th>
@ -50,9 +50,3 @@
</form>
</div>
<div id="popFooter" class="w700">
<div class="tCenter gap1">
<a href="#" onclick="window.close(); return false;" class="button"><span>{$lang->cmd_close}</span></a>
</div>
</div>