위젯 검출 정규 표현식을 수정

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@2892 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2007-11-01 10:28:42 +00:00
parent f9896fe51a
commit 90aa62a6ac
993 changed files with 9190 additions and 10457 deletions

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1">
<module version="0.1" category="manager">
<title xml:lang="ko">메뉴</title>
<title xml:lang="zh-CN">菜单</title>
<title xml:lang="jp">メニュー</title>

View file

@ -85,13 +85,19 @@
$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');
foreach($lang_supported as $key => $val) {
$menu_name[$key] = $source_args->{"menu_name_".strtolower($key )};
}
// 변수를 다시 정리 (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 = $source_args->menu_name;
$args->name = serialize($menu_name);
$args->url = trim($source_args->menu_url);
$args->open_window = $source_args->menu_open_window;
$args->expand = $source_args->menu_expand;
@ -298,7 +304,7 @@
// php 캐시 파일 생성
$php_output = $this->getPhpCacheCode($tree[0], $tree);
$php_buff = sprintf('<?php if(!defined("__ZBXE__")) exit(); $menu->list = array(%s); ?>', $php_output['buff']);
$php_buff = sprintf('<?php if(!defined("__ZBXE__")) exit(); $lang_type = Context::getLangType(); %s; $menu->list = array(%s); ?>', $php_output['name'], $php_output['buff']);
// 파일 저장
FileHandler::writeFile($xml_file, $xml_buff);
@ -313,6 +319,9 @@
**/
function getXmlTree($source_node, $tree) {
if(!$source_node) return;
$oMenuAdminModel = &getAdminModel('menu');
foreach($source_node as $menu_item_srl => $node) {
$child_buff = "";
@ -320,7 +329,12 @@
if($menu_item_srl&&$tree[$menu_item_srl]) $child_buff = $this->getXmlTree($tree[$menu_item_srl], $tree);
// 변수 정리
$name = str_replace(array('&','"','<','>'),array('&amp;','&quot;','&lt;','&gt;'),$node->name);
$names = $oMenuAdminModel->getMenuItemNames($node->name);
foreach($names as $key => $val) {
$name_arr_str .= sprintf('"%s"=>"%s",',$key, htmlspecialchars($val));
}
$name_str = sprintf('$_names = array(%s); print $_names[$_SESSION["lang_type"]];', $name_arr_str);
$url = str_replace(array('&','"','<','>'),array('&amp;','&quot;','&lt;','&gt;'),$node->url);
if(eregi('^([0-9a-zA-Z\_\-]+)$', $node->url)) $href = getUrl('','mid',$node->url);
else $href = $url;
@ -335,10 +349,10 @@
if($group_srls) $group_check_code = sprintf('($_SESSION["is_admin"]==true||(is_array($_SESSION["group_srls"])&&count(array_intersect($_SESSION["group_srls"], array(%s)))))',$group_srls);
else $group_check_code = "true";
$attribute = sprintf(
'node_srl="%s" text="<?=(%s?"%s":"")?>" url="<?=(%s?"%s":"")?>" href="<?=(%s?"%s":"")?>" open_window="%s" expand="%s" normal_btn="%s" hover_btn="%s" active_btn="%s" ',
'node_srl="%s" text="<?php if(%s) { %s }?>" url="<?php print(%s?"%s":"")?>" href="<?php print(%s?"%s":"")?>" open_window="%s" expand="%s" normal_btn="%s" hover_btn="%s" active_btn="%s" ',
$menu_item_srl,
$group_check_code,
$name,
$name_str,
$group_check_code,
$url,
$group_check_code,
@ -366,11 +380,20 @@
$output = array("buff"=>"", "url_list"=>array());
if(!$source_node) return $output;
$oMenuAdminModel = &getAdminModel('menu');
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);
else $child_output = array("buff"=>"", "url_list"=>array());
// 변수 정리
$names = $oMenuAdminModel->getMenuItemNames($node->name);
foreach($names as $key => $val) {
$name_arr_str .= sprintf('"%s"=>"%s",',$key, htmlspecialchars($val));
}
$name_str = sprintf('$_menu_names[%d] = array(%s); %s', $node->menu_item_srl, $name_arr_str, $child_output['name']);
// 현재 노드의 url값이 공란이 아니라면 url_list 배열값에 입력
if($node->url) $child_output['url_list'][] = $node->url;
$output['url_list'] = array_merge($output['url_list'], $child_output['url_list']);
@ -380,7 +403,6 @@
else $group_check_code = "true";
// 변수 정리
$name = str_replace(array('&','"','<','>'),array('&amp;','&quot;','&lt;','&gt;'),$node->name);
$href = str_replace(array('&','"','<','>'),array('&amp;','&quot;','&lt;','&gt;'),$node->href);
$url = str_replace(array('&','"','<','>'),array('&amp;','&quot;','&lt;','&gt;'),$node->url);
if(eregi('^([0-9a-zA-Z\_\-]+)$', $node->url)) $href = getUrl('','mid',$node->url);
@ -395,10 +417,10 @@
// 속성을 생성한다 ( url_list를 이용해서 선택된 메뉴의 노드에 속하는지를 검사한다. 꽁수지만 빠르고 강력하다고 생각;;)
$attribute = sprintf(
'"node_srl"=>"%s","text"=>(%s?"%s":""),"href"=>(%s?"%s":""),"url"=>(%s?"%s":""),"open_window"=>"%s","normal_btn"=>"%s","hover_btn"=>"%s","active_btn"=>"%s","selected"=>(array(%s)&&in_array(Context::get("mid"),array(%s))?1:0),"expand"=>"%s", "list"=>array(%s)',
'"node_srl"=>"%s","text"=>(%s?$_menu_names[%d][$lang_type]:""),"href"=>(%s?"%s":""),"url"=>(%s?"%s":""),"open_window"=>"%s","normal_btn"=>"%s","hover_btn"=>"%s","active_btn"=>"%s","selected"=>(array(%s)&&in_array(Context::get("mid"),array(%s))?1:0),"expand"=>"%s", "list"=>array(%s)',
$node->menu_item_srl,
$group_check_code,
$name,
$node->menu_item_srl,
$group_check_code,
$href,
$group_check_code,
@ -415,6 +437,7 @@
// buff 데이터를 생성한다
$output['buff'] .= sprintf('%s=>array(%s),', $node->menu_item_srl, $attribute);
$output['name'] .= $name_str;
}
return $output;
}

View file

@ -73,9 +73,43 @@
$node = $output->data;
if($node->group_srls) $node->group_srls = explode(',',$node->group_srls);
else $node->group_srls = array();
$node->name = $this->getMenuItemNames($node->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;
}
}
return $name;
}
/**
* @brief 특정 menu_srl의 정보를 이용하여 템플릿을 구한후 return
* 관리자 페이지에서 특정 메뉴의 정보를 추가하기 위해 서버에서 tpl을 컴파일 한후 컴파일 html을 직접 return

View file

@ -1,12 +1,13 @@
@charset "utf-8";
body { margin:10px; }
h3 { margin:0 20px 0 20px; }
.menuManagement { margin:20px; }
.menuListZone { table-layout:fixed; }
.menuListZone td { vertical-align:top; }
.menuListZone td.category_zone { padding-right:10px; }
#category_list { padding:.5em 0 .5em 0; margin-bottom:2em; }
#category_list .checkbox { margin-top:1em; border:0px; }
#menu_zone_info { background-color:#FFFFFF; z-index:999; display:none; overflow:hidden; padding-left:10px; border-left:1px dashed #CCCCCC; }
#category_info { background-color:#FFFFFF; z-index:999; display:none; overflow:hidden; padding-left:10px; border-left:1px dashed #CCCCCC; }
#category_list { padding:.5em 0 .5em 0; margin-bottom:2em; width:250px; overflow:hidden; float:left; }
#menu_zone_info { margin-left:10px; width:550px; _width:530px; float:left; }
*:first-child+html #category_info { width:540px; }

View file

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

View file

@ -2,8 +2,6 @@
<!--%import("js/menu_admin.js")-->
<!--#include("header.html")-->
<div class="infoText">{nl2br($lang->about_menu)}</div>
<!-- 정보 -->
<div class="tableSummaryType1">
Total <strong>{number_format($total_count)}</strong>, Page <strong>{number_format($page)}</strong>/{number_format($total_page)}
@ -15,7 +13,11 @@
</form>
<!-- 목록 -->
<table cellspacing="0" class="tableType1">
<table cellspacing="0" class="adminTable">
<col width="50" />
<col />
<col width="100" />
<col width="100" />
<thead>
<tr>
<th scope="col">{$lang->no}</th>

View file

@ -77,14 +77,17 @@ function hideCategoryInfo() {
function completeGetMenuItemTplInfo(ret_obj, response_tags) {
var obj = xGetElementById('menu_zone_info');
obj.style.marginTop = xScrollTop()+'px';
if(xScrollTop()>200) {
obj.style.marginTop = xScrollTop()+'px';
} else {
obj.style.marginTop = '0px';
}
var tpl = ret_obj['tpl'];
xInnerHtml(obj, tpl);
obj.style.display = 'block';
var fo_obj = xGetElementById("fo_menu");
fo_obj.menu_name.focus();
/*
var x = _xPos + 50;

View file

@ -4,7 +4,9 @@
<form action="./" method="get" onsubmit="return procFilter(this, insert_menu)">
<table cellspacing="0" class="tableType2 gap1">
<table cellspacing="0" class="adminTable">
<col width="150" />
<col />
<tr>
<th scope="col">{$lang->cmd_menu_insert}</th>
<td>{nl2br($lang->about_menu_management)}</td>
@ -12,15 +14,15 @@
<tr>
<th scope="col">{$lang->title}</th>
<td>
<input type="text" name="title" value="{$menu_info->title}" class="inputTypeText" />
<input type="text" name="title" value="{$menu_info->title}" class="inputTypeText w400" />
<p>{$lang->about_title}</p>
</td>
</tr>
<tr>
<th scope="col" colspan="2" class="button">
<span class="button"><input type="submit" value="{$lang->cmd_submit}" accesskey="s" /></span>
</th>
</tr>
</table>
<!-- 버튼 -->
<div class="tRight gap1">
<span class="button"><input type="submit" value="{$lang->cmd_submit}" accesskey="s" /></span>
</div>
</form>

View file

@ -1,24 +1,28 @@
<input type="hidden" name="menu_item_srl" value="{$item_info->menu_item_srl}" />
<input type="hidden" name="parent_srl" value="{$item_info->parent_srl}" />
<table cellspacing="0" class="tableType2">
<col width="140" />
<table cellspacing="0" class="adminTable">
<col width="80" />
<col width="80" />
<col width="*" />
<!--@if($item_info->parent_menu_name)-->
<tr>
<th scope="row">{$lang->parent_menu_name}</th>
<td>{$item_info->parent_menu_name}</td>
<th scope="row" colspan="2">{$lang->parent_menu_name}</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" scope="row" rowspan="{count($lang_supported)}">{$lang->menu_name}</th><!--@end-->
<th>{$val}</th>
<td><input type="text" name="menu_name_{$key}" value="{htmlspecialchars($item_info->name[$key])}" class="inputTypeText"/></td>
{@ $_row ++ }
</tr>
<!--@end-->
<tr>
<th scope="row" scope="row">{$lang->menu_name}</th>
<td>
<input type="text" name="menu_name" value="{htmlspecialchars($item_info->name)}" class="inputTypeText"/>
<p>{$lang->about_menu_name}</p>
</td>
</tr>
<tr>
<th scope="row">{$lang->menu_url}</th>
<th scope="row" colspan="2">{$lang->menu_url}</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>
@ -26,37 +30,37 @@
</td>
</tr>
<tr>
<th scope="row">{$lang->menu_open_window}</th>
<th scope="row" colspan="2">{$lang->menu_open_window}</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">{$lang->menu_expand}</th>
<th scope="row" colspan="2">{$lang->menu_expand}</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">{$lang->menu_img_btn}</th>
<th scope="row" colspan="2">{$lang->menu_img_btn}</th>
<td>{$lang->about_menu_img_btn}</td>
</tr>
<tr>
<th scope="row">{$lang->menu_normal_btn}</th>
<th scope="row" colspan="2">{$lang->menu_normal_btn}</th>
<td><input type="text" name="menu_normal_btn" value="{htmlspecialchars($item_info->normal_btn)}" class="inputTypeText" /></td>
</tr>
<tr>
<th scope="row">{$lang->menu_hover_btn}</th>
<th scope="row" colspan="2">{$lang->menu_hover_btn}</th>
<td><input type="text" name="menu_hover_btn" value="{htmlspecialchars($item_info->hover_btn)}" class="inputTypeText" /></td>
</tr>
<tr>
<th scope="row">{$lang->menu_active_btn}</th>
<th scope="row" colspan="2">{$lang->menu_active_btn}</th>
<td><input type="text" name="menu_active_btn" value="{htmlspecialchars($item_info->active_btn)}" class="inputTypeText" /></td>
</tr>
<tr>
<th scope="row">{$lang->menu_group_srls}</th>
<th scope="row" colspan="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(is_array($item_info->group_srls)&&in_array($key, $item_info->group_srls))-->checked="checked"<!--@end-->/>
@ -65,18 +69,17 @@
<p>{$lang->about_menu_group_srls}</p>
</td>
</tr>
<tr>
<th scope="row" colspan="3" class="button">
<!--@if($item_info->name)-->
<a href="#" onclick="doDeleteMenuItem('{$menu_item_srl}');return false" class="button"><span>{$lang->cmd_delete}</span></a>
<!--@end-->
<a href="#" onclick="hideCategoryInfo();return false" class="button"><span>{$lang->cmd_close}</span></a>
<span class="button"><input type="submit" value="{$lang->cmd_save}" /></span>
<!--@if($item_info->name)-->
<a href="#" onclick="doInsertMenuItem('{$item_info->menu_item_srl}');return false" class="button"><span>{$lang->cmd_make_child}</span></a>
<!--@end-->
</th>
</tr>
</table>
<div class="fl gap1">
<!--@if($item_info->name)-->
<a href="#" onclick="doDeleteMenuItem('{$menu_item_srl}');return false" class="button"><span>{$lang->cmd_delete}</span></a>
<!--@end-->
<a href="#" onclick="hideCategoryInfo();return false" class="button"><span>{$lang->cmd_close}</span></a>
</div>
<div class="fr gap1">
<span class="button"><input type="submit" value="{$lang->cmd_save}" /></span>
<!--@if($item_info->name)-->
<a href="#" onclick="doInsertMenuItem('{$item_info->menu_item_srl}');return false" class="button"><span>{$lang->cmd_make_child}</span></a>
<!--@end-->
</div>

View file

@ -4,7 +4,6 @@
<!--%import("filter/move_menu_item.xml")-->
<!--%import("css/menu.css")-->
<!--%import("js/menu_admin.js")-->
<!--#include("header.html")-->
<div class="menuManagement">
@ -18,7 +17,10 @@
<!--@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="tableType3">
<table cellspacing="0" class="adminTable">
<col width="150" />
<col />
<caption>{$lang->menu} {$lang->cmd_management}</caption>
<tr>
<th scope="col">{$lang->title}</th>
<td>
@ -39,7 +41,7 @@
</form>
<!--@else-->
<table cellspacing="0" class="tableType3">
<table cellspacing="0" class="adminTable">
<tr>
<th scope="col">{$lang->title}</th>
<td class="left">
@ -53,6 +55,15 @@
</table>
<!--@end-->
<div class="gap1">
<a href="#" onclick="doInsertMenuItem(0);return false;" class="button"><span>{$lang->cmd_insert}</span></a>
<a href="#" onclick="doReloadTreeMenu('{$menu_info->menu_srl}');return false;" class="button"><span>{$lang->cmd_remake_cache}</span></a>
<a href="#" onclick="openAllTreeMenu('menu');return false;" class="button"><span>{$lang->cmd_open_all}</span></a>
<a href="#" onclick="closeAllTreeMenu('menu');return false;" class="button"><span>{$lang->cmd_close_all}</span></a>
</div>
<p class="gap1"><input type="checkbox" id="menu_enable_move" class="checkbox" /> <label for="menu_enable_move">{$lang->cmd_enable_move_menu}</label></p>
<div class="gap1">
<form id="fo_menu" action="./" method="get" onsubmit="return procFilter(this, insert_menu_item)" class="clear">
<input type="hidden" name="title" value="{$menu_info->title}" />
@ -60,26 +71,12 @@
<input type="hidden" name="xml_file" value="{$menu_info->xml_file}" />
<input type="hidden" name="php_file" value="{$menu_info->php_file}" />
<table class="menuListZone">
<tr>
<td class="category_zone">
<div id="category_list">
<div id="menu_zone_menu"></div>
<p><input type="checkbox" id="menu_enable_move" class="checkbox" /> <label for="menu_enable_move">{$lang->cmd_enable_move_menu}</label></p>
</div>
</td>
<td class="menu_zone">
<div id="menu_zone_info"></div>
</td>
</tr>
</table>
<div class="fl gap1">
<a href="#" onclick="doInsertMenuItem(0);return false;" class="button"><span>{$lang->cmd_insert}</span></a>
<a href="#" onclick="openAllTreeMenu('menu');return false;" class="button"><span>{$lang->cmd_open_all}</span></a>
<a href="#" onclick="closeAllTreeMenu('menu');return false;" class="button"><span>{$lang->cmd_close_all}</span></a>
<a href="#" onclick="doReloadTreeMenu('{$menu_info->menu_srl}');return false;" class="button"><span>{$lang->cmd_remake_cache}</span></a>
<div id="category_list">
<div id="menu_zone_menu"></div>
</div>
<div id="menu_zone_info"></div>
</form>

View file

@ -8,7 +8,11 @@
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<table cellspacing="0" class="tableType5">
<table cellspacing="0" class="adminTable">
<col />
<col />
<col />
<col width="50" />
<thead>
<tr>
<th scope="row" colspan="2" class="nowrap">
@ -24,7 +28,7 @@
<option value="{$val->module}" <!--@if($target_module ==$val->module)-->selected="selected"<!--@end-->>{$val->module}</option>
<!--@end-->
</select>
<span class="button"><input type="submit" name="go_button" value="GO" /></span>
<input type="submit" name="go_button" id="go_button" value="GO" class="buttonTypeGo" />
</th>
<th scope="row">{$lang->mid}</th>
<th scope="row">{$lang->cmd_select}</th>
@ -42,7 +46,7 @@
</td>
<td class="tahoma">{$val->module}</td>
<td class="tahoma">{$val->browser_title} ({$key})</td>
<td class="blue tCenter"><a href="#" onclick="doInsertMid('{$key}','{$menu_id}'); return false;">{$lang->cmd_select}</a></td>
<td class="blue"><a href="#" onclick="doInsertMid('{$key}','{$menu_id}'); return false;">{$lang->cmd_select}</a></td>
</tr>
<!--@end-->
</tbody>