tree javascript change : 메뉴, 게시판분류, 홈페이지
git-svn-id: http://xe-core.googlecode.com/svn/sandbox@5055 201d5d3c-b55e-5fd7-737f-ddc643e51545
|
|
@ -98,6 +98,8 @@
|
|||
**/
|
||||
function _toJSON(&$oModule) {
|
||||
$variables = $oModule->getVariables();
|
||||
$variables['error'] = $oModule->getError();
|
||||
$variables['message'] = $oModule->getMessage();
|
||||
//if(function_exists('json_encode')) return json_encode($variables);
|
||||
//else return json_encode2($variables);
|
||||
$json = str_replace("\r\n",'\n',json_encode2($variables));
|
||||
|
|
|
|||
|
|
@ -358,12 +358,19 @@
|
|||
}
|
||||
|
||||
// view action이고 결과 출력이 XMLRPC일 경우 해당 모듈의 api method를 실행
|
||||
if((Context::getResponseMethod() == 'XMLRPC' || Context::getResponseMethod() == 'JSON') && $this->module_info->module_type == 'view') {
|
||||
if($this->module_info->module_type == 'view'){
|
||||
if(Context::getResponseMethod() == 'XMLRPC' || Context::getResponseMethod() == 'JSON') {
|
||||
$oAPI = getAPI($this->module_info->module, 'api');
|
||||
if(method_exists($oAPI, $this->act)) {
|
||||
$oAPI->{$this->act}($this);
|
||||
}
|
||||
}
|
||||
}else if($this->module_info->module_type == 'controller'){
|
||||
if(Context::getResponseMethod() == 'JSON'){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
186
common/css/jquery.simple.tree.css
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
|
||||
.simpleTree
|
||||
{
|
||||
|
||||
margin:0;
|
||||
padding:0;
|
||||
/*
|
||||
overflow:auto;
|
||||
width: 250px;
|
||||
height:350px;
|
||||
overflow:auto;
|
||||
border: 1px solid #444444;
|
||||
*/
|
||||
}
|
||||
.simpleTree li
|
||||
{
|
||||
white-space: nowrap;
|
||||
list-style: none;
|
||||
margin:0;
|
||||
padding:0 0 0 34px;
|
||||
line-height: 14px;
|
||||
}
|
||||
.simpleTree li span
|
||||
{
|
||||
display:inline;
|
||||
clear: left;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.simpleTree li a img
|
||||
{
|
||||
padding:0 1px 0px 3px;
|
||||
}
|
||||
|
||||
.simpleTree ul
|
||||
{
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
.simpleTree .root
|
||||
{
|
||||
margin-left:-16px;
|
||||
background: url(./common/tpl/images/tree/root.gif) no-repeat 16px 0 #ffffff;
|
||||
}
|
||||
.simpleTree .line
|
||||
{
|
||||
margin:0 0 0 -16px;
|
||||
padding:0;
|
||||
line-height: 3px;
|
||||
height:3px;
|
||||
font-size:3px;
|
||||
background: url(./common/tpl/images/tree/line_bg.gif) 0 0 no-repeat transparent;
|
||||
}
|
||||
.simpleTree .line-last
|
||||
{
|
||||
margin:0 0 0 -16px;
|
||||
padding:0;
|
||||
line-height: 3px;
|
||||
height:3px;
|
||||
font-size:3px;
|
||||
background: url(./common/tpl/images/tree/spacer.gif) 0 0 no-repeat transparent;
|
||||
}
|
||||
.simpleTree .line-over
|
||||
{
|
||||
margin:0 0 0 -16px;
|
||||
padding:0;
|
||||
line-height: 3px;
|
||||
height:3px;
|
||||
font-size:3px;
|
||||
background: url(./common/tpl/images/tree/line_bg_over.gif) 0 0 no-repeat transparent;
|
||||
}
|
||||
.simpleTree .line-over-last
|
||||
{
|
||||
margin:0 0 0 -16px;
|
||||
padding:0;
|
||||
line-height: 3px;
|
||||
height:3px;
|
||||
font-size:3px;
|
||||
background: url(./common/tpl/images/tree/line_bg_over_last.gif) 0 0 no-repeat transparent;
|
||||
}
|
||||
.simpleTree .folder-open
|
||||
{
|
||||
margin-left:-16px;
|
||||
background: url(./common/tpl/images/tree/collapsable.gif) 0 -2px no-repeat #fff;
|
||||
}
|
||||
.simpleTree .folder-open-last
|
||||
{
|
||||
margin-left:-16px;
|
||||
background: url(./common/tpl/images/tree/collapsable-last.gif) 0 -2px no-repeat #fff;
|
||||
}
|
||||
.simpleTree .folder-close
|
||||
{
|
||||
margin-left:-16px;
|
||||
background: url(./common/tpl/images/tree/expandable.gif) 0 -2px no-repeat #fff;
|
||||
}
|
||||
.simpleTree .folder-close-last
|
||||
{
|
||||
margin-left:-16px;
|
||||
background: url(./common/tpl/images/tree/expandable-last.gif) 0 -2px no-repeat #fff;
|
||||
}
|
||||
.simpleTree .doc
|
||||
{
|
||||
margin-left:-16px;
|
||||
background: url(./common/tpl/images/tree/leaf.gif) 0 -1px no-repeat #fff;
|
||||
}
|
||||
.simpleTree .doc-last
|
||||
{
|
||||
margin-left:-16px;
|
||||
background: url(./common/tpl/images/tree/leaf-last.gif) 0 -1px no-repeat #fff;
|
||||
}
|
||||
.simpleTree .ajax
|
||||
{
|
||||
background: url(./common/tpl/images/tree/spinner.gif) no-repeat 0 0 #ffffff;
|
||||
height: 16px;
|
||||
display:none;
|
||||
}
|
||||
.simpleTree .ajax li
|
||||
{
|
||||
display:none;
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
.simpleTree .trigger
|
||||
{
|
||||
display:inline;
|
||||
margin-left:-32px;
|
||||
width: 28px;
|
||||
height: 11px;
|
||||
cursor:pointer;
|
||||
}
|
||||
.simpleTree .text
|
||||
{
|
||||
cursor: default;
|
||||
}
|
||||
.simpleTree .active
|
||||
{
|
||||
cursor: default;
|
||||
background-color:#F7BE77;
|
||||
padding:0px 2px;
|
||||
border: 1px dashed #444;
|
||||
}
|
||||
#drag_container
|
||||
{
|
||||
background:#ffffff;
|
||||
color:#000;
|
||||
font: normal 11px arial, tahoma, helvetica, sans-serif;
|
||||
border: 1px dashed #767676;
|
||||
}
|
||||
#drag_container ul
|
||||
{
|
||||
list-style: none;
|
||||
padding:0;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
#drag_container li
|
||||
{
|
||||
list-style: none;
|
||||
background-color:#ffffff;
|
||||
line-height:18px;
|
||||
white-space: nowrap;
|
||||
padding:1px 1px 0px 16px;
|
||||
margin:0;
|
||||
}
|
||||
#drag_container li span
|
||||
{
|
||||
padding:0;
|
||||
}
|
||||
|
||||
#drag_container li.doc, #drag_container li.doc-last
|
||||
{
|
||||
background: url(./common/tpl/images/tree/leaf.gif) no-repeat -17px 0 #ffffff;
|
||||
}
|
||||
#drag_container .folder-close, #drag_container .folder-close-last
|
||||
{
|
||||
background: url(./common/tpl/images/tree/expandable.gif) no-repeat -17px 0 #ffffff;
|
||||
}
|
||||
|
||||
#drag_container .folder-open, #drag_container .folder-open-last
|
||||
{
|
||||
background: url(./common/tpl/images/tree/collapsable.gif) no-repeat -17px 0 #ffffff;
|
||||
}
|
||||
.contextMenu
|
||||
{
|
||||
display:none;
|
||||
}
|
||||
468
common/js/jquery.simple.tree.js
Normal file
|
|
@ -0,0 +1,468 @@
|
|||
/*
|
||||
* jQuery SimpleTree Drag&Drop plugin
|
||||
* Update on 22th May 2008
|
||||
* Version 0.3
|
||||
*
|
||||
* Licensed under BSD <http://en.wikipedia.org/wiki/BSD_License>
|
||||
* Copyright (c) 2008, Peter Panov <panov@elcat.kg>, IKEEN Group http://www.ikeen.com
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the Peter Panov, IKEEN Group nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY Peter Panov, IKEEN Group ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL Peter Panov, IKEEN Group BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
(function($){
|
||||
$.fn.simpleTree = function(opt){
|
||||
return this.each(function(){
|
||||
var TREE = this;
|
||||
var ROOT = $('.root',this);
|
||||
var mousePressed = false;
|
||||
var mouseMoved = false;
|
||||
var dragMoveType = false;
|
||||
var dragNode_destination = false;
|
||||
var dragNode_source = false;
|
||||
var dragDropTimer = false;
|
||||
var ajaxCache = Array();
|
||||
|
||||
TREE.option = {
|
||||
drag: true,
|
||||
animate: false,
|
||||
autoclose: false,
|
||||
speed: 'fast',
|
||||
afterAjax: false,
|
||||
afterMove: false,
|
||||
beforeMovedToLine: false,
|
||||
beforeMovedToFolder: false,
|
||||
afterClick: false,
|
||||
afterDblClick: false,
|
||||
// added by Erik Dohmen (2BinBusiness.nl) to make context menu cliks available
|
||||
afterContextMenu: false,
|
||||
docToFolderConvert:false
|
||||
};
|
||||
TREE.option = $.extend(TREE.option,opt);
|
||||
$.extend(this, {getSelected: function(){
|
||||
return $('span.active', this).parent();
|
||||
}});
|
||||
TREE.closeNearby = function(obj)
|
||||
{
|
||||
$(obj).siblings().filter('.folder-open, .folder-open-last').each(function(){
|
||||
var childUl = $('>ul',this);
|
||||
var className = this.className;
|
||||
this.className = className.replace('open','close');
|
||||
if(TREE.option.animate)
|
||||
{
|
||||
childUl.animate({height:"toggle"},TREE.option.speed);
|
||||
}else{
|
||||
childUl.hide();
|
||||
}
|
||||
});
|
||||
};
|
||||
TREE.nodeToggle = function(obj)
|
||||
{
|
||||
var childUl = $('>ul',obj);
|
||||
if(childUl.is(':visible')){
|
||||
obj.className = obj.className.replace('open','close');
|
||||
|
||||
if(TREE.option.animate)
|
||||
{
|
||||
childUl.animate({height:"toggle"},TREE.option.speed);
|
||||
}else{
|
||||
childUl.hide();
|
||||
}
|
||||
}else{
|
||||
obj.className = obj.className.replace('close','open');
|
||||
if(TREE.option.animate)
|
||||
{
|
||||
childUl.animate({height:"toggle"},TREE.option.speed, function(){
|
||||
if(TREE.option.autoclose)TREE.closeNearby(obj);
|
||||
if(childUl.is('.ajax'))TREE.setAjaxNodes(childUl, obj.id);
|
||||
});
|
||||
}else{
|
||||
childUl.show();
|
||||
if(TREE.option.autoclose)TREE.closeNearby(obj);
|
||||
if(childUl.is('.ajax'))TREE.setAjaxNodes(childUl, obj.id);
|
||||
}
|
||||
}
|
||||
};
|
||||
TREE.setAjaxNodes = function(node, parentId, callback)
|
||||
{
|
||||
if($.inArray(parentId,ajaxCache) == -1){
|
||||
ajaxCache[ajaxCache.length]=parentId;
|
||||
var url = $.trim($('>li', node).text());
|
||||
if(url && url.indexOf('url:'))
|
||||
{
|
||||
url=$.trim(url.replace(/.*\{url:(.*)\}/i ,'$1'));
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: url,
|
||||
contentType:'html',
|
||||
cache:false,
|
||||
success: function(responce){
|
||||
node.removeAttr('class');
|
||||
node.html(responce);
|
||||
$.extend(node,{url:url});
|
||||
TREE.setTreeNodes(node, true);
|
||||
if(typeof TREE.option.afterAjax == 'function')
|
||||
{
|
||||
TREE.option.afterAjax(node);
|
||||
}
|
||||
if(typeof callback == 'function')
|
||||
{
|
||||
callback(node);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
TREE.setTreeNodes = function(obj, useParent){
|
||||
obj = useParent? obj.parent():obj;
|
||||
$('li>span', obj).addClass('text')
|
||||
.bind('selectstart', function() {
|
||||
return false;
|
||||
}).click(function(){
|
||||
$('.active',TREE).attr('class','text');
|
||||
if(this.className=='text')
|
||||
{
|
||||
this.className='active';
|
||||
}
|
||||
if(typeof TREE.option.afterClick == 'function')
|
||||
{
|
||||
TREE.option.afterClick($(this).parent());
|
||||
}
|
||||
return false;
|
||||
}).dblclick(function(){
|
||||
mousePressed = false;
|
||||
TREE.nodeToggle($(this).parent().get(0));
|
||||
if(typeof TREE.option.afterDblClick == 'function')
|
||||
{
|
||||
TREE.option.afterDblClick($(this).parent());
|
||||
}
|
||||
return false;
|
||||
// added by Erik Dohmen (2BinBusiness.nl) to make context menu actions
|
||||
// available
|
||||
}).bind("contextmenu",function(){
|
||||
$('.active',TREE).attr('class','text');
|
||||
if(this.className=='text')
|
||||
{
|
||||
this.className='active';
|
||||
}
|
||||
if(typeof TREE.option.afterContextMenu == 'function')
|
||||
{
|
||||
TREE.option.afterContextMenu($(this).parent());
|
||||
}
|
||||
return false;
|
||||
}).mousedown(function(event){
|
||||
mousePressed = true;
|
||||
cloneNode = $(this).parent().clone();
|
||||
var LI = $(this).parent();
|
||||
if(TREE.option.drag)
|
||||
{
|
||||
$('>ul', cloneNode).hide();
|
||||
$('body').append('<div id="drag_container"><ul></ul></div>');
|
||||
$('#drag_container').hide().css({opacity:'0.8'});
|
||||
$('#drag_container >ul').append(cloneNode);
|
||||
$("<img>").attr({id : "tree_plus",src : "./common/tpl/images/tree/plus.gif"}).css({width: "7px",display: "block",position: "absolute",left : "5px",top: "5px", display:'none'}).appendTo("body");
|
||||
$(document).bind("mousemove", {LI:LI}, TREE.dragStart).bind("mouseup",TREE.dragEnd);
|
||||
}
|
||||
return false;
|
||||
}).mouseup(function(){
|
||||
if(mousePressed && mouseMoved && dragNode_source)
|
||||
{
|
||||
TREE.moveNodeToFolder($(this).parent());
|
||||
}
|
||||
TREE.eventDestroy();
|
||||
});
|
||||
$('li', obj).each(function(i){
|
||||
var className = this.className;
|
||||
var open = false;
|
||||
var cloneNode=false;
|
||||
var LI = this;
|
||||
var childNode = $('>ul',this);
|
||||
if(childNode.size()>0){
|
||||
var setClassName = 'folder-';
|
||||
if(className && className.indexOf('open')>=0){
|
||||
setClassName=setClassName+'open';
|
||||
open=true;
|
||||
}else{
|
||||
setClassName=setClassName+'close';
|
||||
}
|
||||
this.className = setClassName + ($(this).is(':last-child')? '-last':'');
|
||||
|
||||
if(!open || className.indexOf('ajax')>=0)childNode.hide();
|
||||
|
||||
TREE.setTrigger(this);
|
||||
}else{
|
||||
var setClassName = 'doc';
|
||||
this.className = setClassName + ($(this).is(':last-child')? '-last':'');
|
||||
}
|
||||
}).before('<li class="line"></li>')
|
||||
.filter(':last-child').after('<li class="line-last"></li>');
|
||||
TREE.setEventLine($('.line, .line-last', obj));
|
||||
};
|
||||
TREE.setTrigger = function(node){
|
||||
$('>span',node).before('<img class="trigger" src="./common/tpl/images/tree/spacer.gif" border=0>');
|
||||
var trigger = $('>.trigger', node);
|
||||
trigger.click(function(event){
|
||||
TREE.nodeToggle(node);
|
||||
});
|
||||
if(!$.browser.msie)
|
||||
{
|
||||
trigger.css('float','left');
|
||||
}
|
||||
};
|
||||
TREE.dragStart = function(event){
|
||||
var LI = $(event.data.LI);
|
||||
if(mousePressed)
|
||||
{
|
||||
mouseMoved = true;
|
||||
if(dragDropTimer) clearTimeout(dragDropTimer);
|
||||
if($('#drag_container:not(:visible)')){
|
||||
$('#drag_container').show();
|
||||
LI.prev('.line').hide();
|
||||
dragNode_source = LI;
|
||||
}
|
||||
$('#drag_container').css({position:'absolute', "left" : (event.pageX + 5), "top": (event.pageY + 15) });
|
||||
if(LI.is(':visible'))LI.hide();
|
||||
var temp_move = false;
|
||||
if(event.target.tagName.toLowerCase()=='span' && $.inArray(event.target.className, Array('text','active','trigger'))!= -1)
|
||||
{
|
||||
var parent = event.target.parentNode;
|
||||
var offs = $(parent).offset({scroll:false});
|
||||
var screenScroll = {x : (offs.left - 3),y : event.pageY - offs.top};
|
||||
var isrc = $("#tree_plus").attr('src');
|
||||
var ajaxChildSize = $('>ul.ajax',parent).size();
|
||||
var ajaxChild = $('>ul.ajax',parent);
|
||||
screenScroll.x += 19;
|
||||
screenScroll.y = event.pageY - screenScroll.y + 5;
|
||||
|
||||
if(parent.className.indexOf('folder-close')>=0 && ajaxChildSize==0)
|
||||
{
|
||||
if(isrc.indexOf('minus')!=-1)$("#tree_plus").attr('src','./common/tpl/images/tree/plus.gif');
|
||||
$("#tree_plus").css({"left": screenScroll.x, "top": screenScroll.y}).show();
|
||||
dragDropTimer = setTimeout(function(){
|
||||
parent.className = parent.className.replace('close','open');
|
||||
$('>ul',parent).show();
|
||||
}, 700);
|
||||
}else if(parent.className.indexOf('folder')>=0 && ajaxChildSize==0){
|
||||
if(isrc.indexOf('minus')!=-1)$("#tree_plus").attr('src','./common/tpl/images/tree/plus.gif');
|
||||
$("#tree_plus").css({"left": screenScroll.x, "top": screenScroll.y}).show();
|
||||
}else if(parent.className.indexOf('folder-close')>=0 && ajaxChildSize>0)
|
||||
{
|
||||
mouseMoved = false;
|
||||
$("#tree_plus").attr('src','./common/tpl/images/tree/minus.gif');
|
||||
$("#tree_plus").css({"left": screenScroll.x, "top": screenScroll.y}).show();
|
||||
|
||||
$('>ul',parent).show();
|
||||
/*
|
||||
Thanks for the idea of Erik Dohmen
|
||||
*/
|
||||
TREE.setAjaxNodes(ajaxChild,parent.id, function(){
|
||||
parent.className = parent.className.replace('close','open');
|
||||
mouseMoved = true;
|
||||
$("#tree_plus").attr('src','./common/tpl/images/tree/plus.gif');
|
||||
$("#tree_plus").css({"left": screenScroll.x, "top": screenScroll.y}).show();
|
||||
});
|
||||
|
||||
}else{
|
||||
if(TREE.option.docToFolderConvert)
|
||||
{
|
||||
$("#tree_plus").css({"left": screenScroll.x, "top": screenScroll.y}).show();
|
||||
}else{
|
||||
$("#tree_plus").hide();
|
||||
}
|
||||
}
|
||||
}else{
|
||||
$("#tree_plus").hide();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
TREE.dragEnd = function(){
|
||||
if(dragDropTimer) clearTimeout(dragDropTimer);
|
||||
TREE.eventDestroy();
|
||||
};
|
||||
TREE.setEventLine = function(obj){
|
||||
obj.mouseover(function(){
|
||||
if(this.className.indexOf('over')<0 && mousePressed && mouseMoved)
|
||||
{
|
||||
this.className = this.className.replace('line','line-over');
|
||||
}
|
||||
}).mouseout(function(){
|
||||
if(this.className.indexOf('over')>=0)
|
||||
{
|
||||
this.className = this.className.replace('-over','');
|
||||
}
|
||||
}).mouseup(function(){
|
||||
if(mousePressed && dragNode_source && mouseMoved)
|
||||
{
|
||||
dragNode_destination = $(this).parents('li:first');
|
||||
TREE.moveNodeToLine(this);
|
||||
TREE.eventDestroy();
|
||||
}
|
||||
});
|
||||
};
|
||||
TREE.checkNodeIsLast = function(node)
|
||||
{
|
||||
if(node.className.indexOf('last')>=0)
|
||||
{
|
||||
var prev_source = dragNode_source.prev().prev();
|
||||
if(prev_source.size()>0)
|
||||
{
|
||||
prev_source[0].className+='-last';
|
||||
}
|
||||
node.className = node.className.replace('-last','');
|
||||
}
|
||||
};
|
||||
TREE.checkLineIsLast = function(line)
|
||||
{
|
||||
if(line.className.indexOf('last')>=0)
|
||||
{
|
||||
var prev = $(line).prev();
|
||||
if(prev.size()>0)
|
||||
{
|
||||
prev[0].className = prev[0].className.replace('-last','');
|
||||
}
|
||||
dragNode_source[0].className+='-last';
|
||||
}
|
||||
};
|
||||
TREE.eventDestroy = function()
|
||||
{
|
||||
// added by Erik Dohmen (2BinBusiness.nl), the unbind mousemove TREE.dragStart action
|
||||
// like this other mousemove actions binded through other actions ain't removed (use it myself
|
||||
// to determine location for context menu)
|
||||
$(document).unbind('mousemove',TREE.dragStart).unbind('mouseup').unbind('mousedown');
|
||||
$('#drag_container, #tree_plus').remove();
|
||||
if(dragNode_source)
|
||||
{
|
||||
$(dragNode_source).show().prev('.line').show();
|
||||
}
|
||||
dragNode_destination = dragNode_source = mousePressed = mouseMoved = false;
|
||||
//ajaxCache = Array();
|
||||
};
|
||||
TREE.convertToFolder = function(node){
|
||||
node[0].className = node[0].className.replace('doc','folder-open');
|
||||
node.append('<ul><li class="line-last"></li></ul>');
|
||||
TREE.setTrigger(node[0]);
|
||||
TREE.setEventLine($('.line, .line-last', node));
|
||||
};
|
||||
TREE.convertToDoc = function(node){
|
||||
$('>ul', node).remove();
|
||||
$('img', node).remove();
|
||||
node[0].className = node[0].className.replace(/folder-(open|close)/gi , 'doc');
|
||||
};
|
||||
TREE.moveNodeToFolder = function(node)
|
||||
{
|
||||
if(typeof(TREE.option.beforeMovedToFolder) == 'function')
|
||||
{
|
||||
var pos = $(dragNode_source).prevAll(':not(.line)').size();
|
||||
if(!TREE.option.beforeMovedToFolder($(node).parents('li:first'), $(dragNode_source), pos)) return false;
|
||||
}
|
||||
|
||||
if(!TREE.option.docToFolderConvert && node[0].className.indexOf('doc')!=-1)
|
||||
{
|
||||
return true;
|
||||
}else if(TREE.option.docToFolderConvert && node[0].className.indexOf('doc')!=-1){
|
||||
TREE.convertToFolder(node);
|
||||
}
|
||||
TREE.checkNodeIsLast(dragNode_source[0]);
|
||||
var lastLine = $('>ul >.line-last', node);
|
||||
if(lastLine.size()>0)
|
||||
{
|
||||
TREE.moveNodeToLine(lastLine[0]);
|
||||
}
|
||||
};
|
||||
TREE.moveNodeToLine = function(node){
|
||||
|
||||
if(typeof(TREE.option.beforeMovedToLine) == 'function')
|
||||
{
|
||||
var pos = $(dragNode_source).prevAll(':not(.line)').size();
|
||||
if(!TREE.option.beforeMovedToLine($(node).parents('li:first'), $(dragNode_source), pos)) return false;
|
||||
}
|
||||
|
||||
TREE.checkNodeIsLast(dragNode_source[0]);
|
||||
TREE.checkLineIsLast(node);
|
||||
var parent = $(dragNode_source).parents('li:first');
|
||||
var line = $(dragNode_source).prev('.line');
|
||||
$(node).before(dragNode_source);
|
||||
$(dragNode_source).before(line);
|
||||
node.className = node.className.replace('-over','');
|
||||
var nodeSize = $('>ul >li', parent).not('.line, .line-last').filter(':visible').size();
|
||||
if(TREE.option.docToFolderConvert && nodeSize==0)
|
||||
{
|
||||
TREE.convertToDoc(parent);
|
||||
}else if(nodeSize==0)
|
||||
{
|
||||
parent[0].className=parent[0].className.replace('open','close');
|
||||
$('>ul',parent).hide();
|
||||
}
|
||||
|
||||
// added by Erik Dohmen (2BinBusiness.nl) select node
|
||||
if($('span:first',dragNode_source).attr('class')=='text')
|
||||
{
|
||||
$('.active',TREE).attr('class','text');
|
||||
$('span:first',dragNode_source).attr('class','active');
|
||||
}
|
||||
|
||||
if(typeof(TREE.option.afterMove) == 'function')
|
||||
{
|
||||
var pos = $(dragNode_source).prevAll(':not(.line)').size();
|
||||
TREE.option.afterMove($(node).parents('li:first'), $(dragNode_source), pos);
|
||||
}
|
||||
};
|
||||
|
||||
TREE.addNode = function(id, text, callback)
|
||||
{
|
||||
var temp_node = $('<li><ul><li id="'+id+'"><span>'+text+'</span></li></ul></li>');
|
||||
TREE.setTreeNodes(temp_node);
|
||||
dragNode_destination = TREE.getSelected();
|
||||
dragNode_source = $('.doc-last',temp_node);
|
||||
TREE.moveNodeToFolder(dragNode_destination);
|
||||
temp_node.remove();
|
||||
if(typeof(callback) == 'function')
|
||||
{
|
||||
callback(dragNode_destination, dragNode_source);
|
||||
}
|
||||
};
|
||||
TREE.delNode = function(callback)
|
||||
{
|
||||
dragNode_source = TREE.getSelected();
|
||||
TREE.checkNodeIsLast(dragNode_source[0]);
|
||||
dragNode_source.prev().remove();
|
||||
dragNode_source.remove();
|
||||
if(typeof(callback) == 'function')
|
||||
{
|
||||
callback(dragNode_destination);
|
||||
}
|
||||
};
|
||||
|
||||
TREE.init = function(obj)
|
||||
{
|
||||
TREE.setTreeNodes(obj, false);
|
||||
};
|
||||
TREE.init(ROOT);
|
||||
});
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
|
|
@ -386,3 +386,59 @@ function xml2json(xml, tab, ignoreAttrib) {
|
|||
var json = X.toJson(X.toObj(X.removeWhite(xml)), xml.nodeName, "");
|
||||
return "{" + (tab ? json.replace(/\t/g, tab) : json.replace(/\t|\n/g, "")) + "}";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief exec_json (exec_xml와 같은 용도)
|
||||
**/
|
||||
(function($){
|
||||
$.exec_json = function(action,data,func){
|
||||
if(typeof(data) == 'undefined') data = {};
|
||||
action = action.split(".");
|
||||
if(action.length == 2){
|
||||
|
||||
if(show_waiting_message) {
|
||||
$("#waitingforserverresponse").html(waiting_message).css('top',$(document).scrollTop()+20).css('left',$(document).scrollLeft()+20).css('visibility','visible');
|
||||
}
|
||||
|
||||
$.extend(data,{module:action[0],act:action[1]});
|
||||
$.ajax({
|
||||
type:"POST"
|
||||
,dataType:"json"
|
||||
,url:request_uri
|
||||
,contentType:"application/json"
|
||||
,data:$.param(data)
|
||||
,success : function(data){
|
||||
$("#waitingforserverresponse").css('visibility','hidden');
|
||||
if(data.error > 0) alert(data.message);
|
||||
if($.isFunction(func)) func(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.exec_html = function(action,data,type){
|
||||
if(typeof(data) == 'undefined') data = {};
|
||||
if(!$.inArray(type, ['html','append','prepend'])) type = 'html';
|
||||
|
||||
var self = $(this);
|
||||
action = action.split(".");
|
||||
if(action.length == 2){
|
||||
if(show_waiting_message) {
|
||||
$("#waitingforserverresponse").html(waiting_message).css('top',$(document).scrollTop()+20).css('left',$(document).scrollLeft()+20).css('visibility','visible');
|
||||
}
|
||||
|
||||
$.extend(data,{module:action[0],act:action[1]});
|
||||
$.ajax({
|
||||
type:"POST"
|
||||
,dataType:"html"
|
||||
,url:request_uri
|
||||
,data:$.param(data)
|
||||
,success : function(html){
|
||||
$("#waitingforserverresponse").css('visibility','hidden');
|
||||
self[type](html);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
})(jQuery);
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@
|
|||
$lang->disable = 'Disable';
|
||||
|
||||
// Essential Words
|
||||
$lang->menu = 'Menu';
|
||||
$lang->no = 'No.';
|
||||
$lang->notice = 'Notice';
|
||||
$lang->secret = 'Secret';
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@
|
|||
$lang->disable = 'Desactivar'; //Desactivado
|
||||
|
||||
// Palabras Esenciales
|
||||
$lang->menu = 'Menu';
|
||||
$lang->no = 'Nº';
|
||||
$lang->notice = 'Aviso'; //boletín, noticia
|
||||
$lang->secret = 'Secreto';
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@
|
|||
$lang->disable = 'Invalide';
|
||||
|
||||
// Mots essentiels
|
||||
$lang->menu = 'Menu';
|
||||
$lang->no = 'No';
|
||||
$lang->notice = 'Notice';
|
||||
$lang->secret = 'Secret';
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@
|
|||
$lang->deaktivieren = 'Deaktivieren';
|
||||
|
||||
// Essential Words
|
||||
$lang->menu = 'Menu';
|
||||
$lang->no = 'Nein';
|
||||
$lang->notice = 'Hinweis';
|
||||
$lang->secret = 'Geheim';
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@
|
|||
$lang->disable = '不可';
|
||||
|
||||
// 基本用語
|
||||
$lang->menu = 'Menu';
|
||||
$lang->no = '番号';
|
||||
$lang->notice = 'お知らせ';
|
||||
$lang->secret = '非公開';
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@
|
|||
$lang->disable = '불가능';
|
||||
|
||||
// 기본 단어
|
||||
$lang->menu = '메뉴';
|
||||
$lang->no = '번호';
|
||||
$lang->notice = '공지';
|
||||
$lang->secret = '비밀';
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@
|
|||
$lang->disable = 'Выключено';
|
||||
|
||||
// Существенные слова
|
||||
$lang->menu = 'Menu';
|
||||
$lang->no = 'No.';
|
||||
$lang->notice = 'Уведомление';
|
||||
$lang->secret = 'Секрет';
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@
|
|||
$lang->disable = '禁用';
|
||||
|
||||
// 基本词语
|
||||
$lang->menu = 'Menu';
|
||||
$lang->no = '编号';
|
||||
$lang->notice = '公告';
|
||||
$lang->secret = '密帖';
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@
|
|||
$lang->disable = '禁用';
|
||||
|
||||
// 基本詞語
|
||||
$lang->menu = 'Menu';
|
||||
$lang->no = '編號';
|
||||
$lang->notice = '公告';
|
||||
$lang->secret = '秘密';
|
||||
|
|
|
|||
BIN
common/tpl/images/tree/Thumbs.db
Normal file
BIN
common/tpl/images/tree/arrow_refresh.png
Normal file
|
After Width: | Height: | Size: 685 B |
BIN
common/tpl/images/tree/collapsable-last.gif
Normal file
|
After Width: | Height: | Size: 655 B |
BIN
common/tpl/images/tree/collapsable.gif
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
common/tpl/images/tree/cross.png
Normal file
|
After Width: | Height: | Size: 655 B |
BIN
common/tpl/images/tree/disk.png
Normal file
|
After Width: | Height: | Size: 620 B |
BIN
common/tpl/images/tree/expandable-last.gif
Normal file
|
After Width: | Height: | Size: 670 B |
BIN
common/tpl/images/tree/expandable.gif
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
common/tpl/images/tree/folder_add.png
Normal file
|
After Width: | Height: | Size: 668 B |
BIN
common/tpl/images/tree/folder_delete.png
Normal file
|
After Width: | Height: | Size: 666 B |
BIN
common/tpl/images/tree/folder_edit.png
Normal file
|
After Width: | Height: | Size: 733 B |
BIN
common/tpl/images/tree/iconAdd.gif
Normal file
|
After Width: | Height: | Size: 190 B |
BIN
common/tpl/images/tree/iconDel.gif
Normal file
|
After Width: | Height: | Size: 116 B |
BIN
common/tpl/images/tree/iconModify.gif
Normal file
|
After Width: | Height: | Size: 196 B |
BIN
common/tpl/images/tree/leaf-last.gif
Normal file
|
After Width: | Height: | Size: 615 B |
BIN
common/tpl/images/tree/leaf.gif
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
common/tpl/images/tree/line_bg.gif
Normal file
|
After Width: | Height: | Size: 93 B |
BIN
common/tpl/images/tree/line_bg_over.gif
Normal file
|
After Width: | Height: | Size: 251 B |
BIN
common/tpl/images/tree/line_bg_over_last.gif
Normal file
|
After Width: | Height: | Size: 235 B |
BIN
common/tpl/images/tree/minus.gif
Normal file
|
After Width: | Height: | Size: 267 B |
BIN
common/tpl/images/tree/page_add.png
Normal file
|
After Width: | Height: | Size: 739 B |
BIN
common/tpl/images/tree/page_delete.png
Normal file
|
After Width: | Height: | Size: 740 B |
BIN
common/tpl/images/tree/page_edit.png
Normal file
|
After Width: | Height: | Size: 807 B |
BIN
common/tpl/images/tree/plus.gif
Normal file
|
After Width: | Height: | Size: 167 B |
BIN
common/tpl/images/tree/root.gif
Normal file
|
After Width: | Height: | Size: 1,004 B |
BIN
common/tpl/images/tree/spacer.gif
Normal file
|
After Width: | Height: | Size: 43 B |
BIN
common/tpl/images/tree/spinner.gif
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
common/tpl/images/tree/tree_line.gif
Normal file
|
After Width: | Height: | Size: 197 B |
|
|
@ -352,6 +352,7 @@
|
|||
/**
|
||||
* @brief 카테고리 이동
|
||||
**/
|
||||
/*
|
||||
function procBoardAdminMoveCategory() {
|
||||
$source_category_srl = Context::get('source_category_srl');
|
||||
$target_category_srl = Context::get('target_category_srl');
|
||||
|
|
@ -380,6 +381,71 @@
|
|||
$this->add('xml_file', $xml_file);
|
||||
$this->add('source_category_srl', $source_category_srl);
|
||||
}
|
||||
*/
|
||||
|
||||
function procBoardAdminMoveCategory() {
|
||||
$source_category_srl = Context::get('source_srl');
|
||||
|
||||
// parent_srl 이 있으면 첫 자식으로 들어간다
|
||||
$parent_category_srl = Context::get('parent_srl');
|
||||
|
||||
// target_srl 이 있으면 target_srl 아래로 형제로 들어간다
|
||||
$target_category_srl = Context::get('target_srl');
|
||||
|
||||
$oDocumentModel = &getModel('document');
|
||||
$oDocumentController = &getController('document');
|
||||
$source_category = $oDocumentModel->getCategory($source_category_srl);
|
||||
|
||||
|
||||
//parent_category_srl 의 첫 자식으로 넣자
|
||||
if($parent_category_srl > 0 || ($parent_category_srl == 0 && $target_category_srl == 0)){
|
||||
$parent_category = $oDocumentModel->getCategory($parent_category_srl);
|
||||
|
||||
$args->module_srl = $source_category->module_srl;
|
||||
$args->parent_srl = $parent_category_srl;
|
||||
$output = executeQuery('document.getChildCategoryMinListOrder', $args);
|
||||
|
||||
if(!$output->toBool()) return $output;
|
||||
$args->list_order = (int)$output->data->list_order;
|
||||
if(!$args->list_order) $args->list_order = 0;
|
||||
$args->list_order--;
|
||||
|
||||
|
||||
$source_args->category_srl = $source_category_srl;
|
||||
$source_args->parent_srl = $parent_category_srl;
|
||||
$source_args->list_order = $args->list_order;
|
||||
$output = $oDocumentController->updateCategory($source_args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
|
||||
// $target_category_srl의 아래동생으로
|
||||
}else if($target_category_srl > 0){
|
||||
$target_category = $oDocumentModel->getCategory($target_category_srl);
|
||||
|
||||
//$target_category의 아래 동생을 모두 내린다
|
||||
$output = $oDocumentController->updateCategoryListOrder($target_category->module_srl, $target_category->list_order+1);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
|
||||
$source_args->category_srl = $source_category_srl;
|
||||
$source_args->parent_srl = $target_category->parent_srl;
|
||||
$source_args->list_order = $target_category->list_order+1;
|
||||
$output = $oDocumentController->updateCategory($source_args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// xml파일 재생성
|
||||
$xml_file = $oDocumentController->makeCategoryFile($source_category->module_srl);
|
||||
|
||||
// return 변수 설정
|
||||
$this->add('xml_file', $xml_file);
|
||||
$this->add('source_category_srl', $source_category_srl);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief xml 파일을 갱신
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@
|
|||
// template 파일을 직접 컴파일한후 tpl변수에 담아서 return한다.
|
||||
$oTemplate = &TemplateHandler::getInstance();
|
||||
$tpl = $oTemplate->compile($this->module_path.'tpl', 'category_info');
|
||||
|
||||
$tpl = str_replace("\n",'',$tpl);
|
||||
// return 할 변수 설정
|
||||
$this->add('tpl', $tpl);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@
|
|||
Context::set('category_xml_file', $category_xml_file);
|
||||
Context::addJsFile('./common/js/tree_menu.js');
|
||||
|
||||
Context::set('layout','none');
|
||||
// Context::set('layout','none');
|
||||
$this->setTemplateFile('category_list');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<!--%import("filter/insert.xml")-->
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<form action="./" method="post" onsubmit="return procFilter(this, window.insert)" id="fo_write">
|
||||
<form action="./" method="post" onsubmit="return procFilter(this, insert)" id="fo_write">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="content" value="{$oDocument->getContentText()}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
|
|
|
|||
|
|
@ -15,15 +15,8 @@
|
|||
<p>{$lang->about_category_title}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="row2">
|
||||
<th scope="row"><div>{$lang->expand}</div></th>
|
||||
<td>
|
||||
<input type="checkbox" name="expand" value="Y" <!--@if($category_info->expand=="Y")-->checked="checked"<!--@end--> class="checkbox" />
|
||||
{$lang->about_expand}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><div>{$lang->category_group_srls} <input type="checkbox" onclick="XE.checkboxToggleAll('group_srls'); return false;" /></div></th>
|
||||
<tr >
|
||||
<th scope="row2"><div>{$lang->category_group_srls} <input type="checkbox" onclick="XE.checkboxToggleAll('group_srls'); return false;" /></div></th>
|
||||
<td>
|
||||
<!--@foreach($group_list as $key=>$val)-->
|
||||
<div><input type="checkbox" name="group_srls" value="{$key}" id="group_{$key}" <!--@if(is_array($category_info->group_srls)&&in_array($key, $category_info->group_srls))-->checked="checked"<!--@end--> class="checkbox" /> <label for="group_{$key}">{$val->title}</label></div>
|
||||
|
|
@ -33,14 +26,8 @@
|
|||
</tr>
|
||||
<tr class="row2">
|
||||
<td scope="row" colspan="2" class="right">
|
||||
<!--@if($category_info->title)-->
|
||||
<a href="#" onclick="doDeleteCategory('{$category_srl->category_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($category_info->title)-->
|
||||
<a href="#" onclick="doInsertCategory('{$category_info->category_srl}');return false" class="button"><span>{$lang->cmd_make_child}</span></a>
|
||||
<!--@end-->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -1,46 +1,39 @@
|
|||
<!--#include("./header.html")-->
|
||||
<!--%import("filter/insert_category.xml")-->
|
||||
<!--%import("filter/delete_category.xml")-->
|
||||
<!--%import("filter/move_category.xml")-->
|
||||
<!--%import("css/board.css")-->
|
||||
<!--%import("js/board_admin.js")-->
|
||||
|
||||
<!--%import("../../common/js/jquery.simple.tree.js",optimized=false)-->
|
||||
<!--%import("../../common/css/jquery.simple.tree.css",optimized=false)-->
|
||||
<!--%import("js/board_admin.js")-->
|
||||
<script type="text/javascript">
|
||||
var category_title = "{$lang->category}";
|
||||
</script>
|
||||
|
||||
<h3>{$lang->board} <span class="gray">{$lang->cmd_management}</span></h3>
|
||||
<div class="infoText">{nl2br($lang->about_board_category)}</div>
|
||||
|
||||
<div class="gap">
|
||||
<a href="#" onclick="doInsertCategory(0);return false;" class="button"><span>{$lang->cmd_insert}</span></a>
|
||||
<a href="#" onclick="doReloadTreeCategory('{$module_info->module_srl}');return false;" class="button"><span>{$lang->cmd_remake_cache}</span></a>
|
||||
<a href="#" onclick="openAllTreeMenu('category');return false;" class="button"><span>{$lang->cmd_open_all}</span></a>
|
||||
<a href="#" onclick="closeAllTreeMenu('category');return false;" class="button"><span>{$lang->cmd_close_all}</span></a>
|
||||
<a href="#" onclick="window.close();return false;" class="button"><span>{$lang->cmd_close}</span></a>
|
||||
<div class="infoText">{nl2br($lang->about_board_category)}
|
||||
</div>
|
||||
|
||||
<p class="gap1"><input type="checkbox" class="checkbox" id="category_enable_move" onclick="hideCategoryInfo()" /> <label for="category_enable_move">{$lang->cmd_enable_move_category}</label></p>
|
||||
|
||||
|
||||
<!-- 카테고리의 위/아래, 삭제와 관련된 form -->
|
||||
<form id="fo_move_category" action="./" method="get">
|
||||
<input type="hidden" name="module_srl" />
|
||||
<input type="hidden" name="source_category_srl" />
|
||||
<input type="hidden" name="target_category_srl" />
|
||||
</form>
|
||||
<span style="float:right"><a href="#" onclick="doReloadTreeCategory('{$module_info->module_srl}');return false;" class="button"><span>{$lang->cmd_remake_cache}</span></a></span>
|
||||
|
||||
<div class="gap1">
|
||||
<form id="fo_category" action="./" method="get" onsubmit="return procFilter(this, insert_category)">
|
||||
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
|
||||
<input type="hidden" name="xml_file" value="{$category_xml_file}" />
|
||||
|
||||
<div id="category_list">
|
||||
<div id="zone_category"></div>
|
||||
<div id="menu">
|
||||
<ul class="simpleTree">
|
||||
<li class="root" id='tree_0'><span>{$lang->category}</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="category_info"></div>
|
||||
<div id="category_info" style="position:absolute;top:300px; width:70%; right:20px"></div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
loadTreeMenu("{$category_xml_file}", "category", "zone_category", category_title, '', doGetCategoryInfo, 0, doMoveTree);
|
||||
var simpleTreeCollection;
|
||||
var max_menu_depth = 999;
|
||||
var lang_confirm_delete = "{$lang->confirm_delete}";
|
||||
var xml_url = "{$category_xml_file}";
|
||||
Tree(xml_url);
|
||||
</script>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
<!--@end-->
|
||||
<li <!--@if($act=='dispBoardAdminBoardInfo'||$act=='dispBoardAdminInsertBoard')-->class="on"<!--@end-->><a href="{getUrl('act','dispBoardAdminBoardInfo')}">{$lang->cmd_view_info}</a></li>
|
||||
<li <!--@if($act=='dispBoardAdminBoardAdditionSetup')-->class="on"<!--@end-->><a href="{getUrl('act','dispBoardAdminBoardAdditionSetup')}">{$lang->cmd_addition_setup}</a></li>
|
||||
<li <!--@if($act=='dispBoardAdminCategoryInfo')-->class="on"<!--@end-->><a href="{getUrl('act','dispBoardAdminCategoryInfo')}" onclick="winopen(this.href,'BoardMenu','width=850,height=800,resizable=yes,scrollbars=yes,toolbars=no');return false;">{$lang->cmd_manage_category}</a></li>
|
||||
<li <!--@if($act=='dispBoardAdminCategoryInfo')-->class="on"<!--@end-->><a href="{getUrl('act','dispBoardAdminCategoryInfo')}">{$lang->cmd_manage_category}</a></li>
|
||||
<li <!--@if($act=='dispBoardAdminGrantInfo')-->class="on"<!--@end-->><a href="{getUrl('act','dispBoardAdminGrantInfo')}">{$lang->cmd_manage_grant}</a></li>
|
||||
<li <!--@if($act=='dispBoardAdminSkinInfo')-->class="on"<!--@end-->><a href="{getUrl('act','dispBoardAdminSkinInfo')}">{$lang->cmd_manage_skin}</a></li>
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -4,6 +4,169 @@
|
|||
* @brief board 모듈의 관리자용 javascript
|
||||
**/
|
||||
|
||||
|
||||
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/tpl/images/tree/iconAdd.gif" /></a>').bind("click",function(e){addNode(0,e);}).appendTo("ul.simpleTree > li");
|
||||
|
||||
//ajax get data and transeform ul il
|
||||
jQuery.get(url,function(data){
|
||||
jQuery(data).find("node").each(function(i){
|
||||
var text = jQuery(this).attr("text");
|
||||
var node_srl = jQuery(this).attr("node_srl");
|
||||
var parent_srl = jQuery(this).attr("parent_srl");
|
||||
var url = jQuery(this).attr("url");
|
||||
|
||||
// node
|
||||
var node = jQuery('<li id="tree_'+node_srl+'"><span>'+text+'</span></li>');
|
||||
|
||||
// button
|
||||
jQuery('<a href="#" class="add"><img src="./common/tpl/images/tree/iconAdd.gif" /></a>').bind("click",function(e){addNode(node_srl,e);}).appendTo(node);
|
||||
|
||||
jQuery('<a href="#" class="modify"><img src="./common/tpl/images/tree/iconModify.gif" /></a>').bind("click",function(e){
|
||||
modifyNode(node_srl,e);
|
||||
}).appendTo(node);
|
||||
|
||||
jQuery('<a href="#" class="delete"><img src="./common/tpl/images/tree/iconDel.gif" /></a>').bind("click",function(e){
|
||||
deleteNode(node_srl);
|
||||
}).appendTo(node);
|
||||
|
||||
// insert parent child
|
||||
if(parent_srl>0){
|
||||
if(jQuery('#tree_'+parent_srl+'>ul').length==0) jQuery('#tree_'+parent_srl).append(jQuery('<ul>'));
|
||||
jQuery('#tree_'+parent_srl+'> ul').append(node);
|
||||
}else{
|
||||
if(jQuery('#menu ul.simpleTree > li > ul').length==0) jQuery("<ul>").appendTo('#menu ul.simpleTree > li');
|
||||
jQuery('#menu ul.simpleTree > li > ul').append(node);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
//button show hide
|
||||
jQuery("#menu li").each(function(){
|
||||
if(jQuery(this).parents('ul').size() > max_menu_depth) jQuery("a.add",this).hide();
|
||||
if(jQuery(">ul",this).size()>0) jQuery(">a.delete",this).hide();
|
||||
});
|
||||
|
||||
|
||||
// draw tree
|
||||
simpleTreeCollection = jQuery('.simpleTree').simpleTree({
|
||||
autoclose: false,
|
||||
afterClick:function(node){
|
||||
//alert("text-"+jQuery('span:first',node).text());
|
||||
},
|
||||
afterDblClick:function(node){
|
||||
//alert("text-"+jQuery('span:first',node).text());
|
||||
},
|
||||
afterMove:function(destination, source, pos){
|
||||
var module_srl = jQuery("#fo_category input[name=module_srl]").val();
|
||||
var parent_srl = destination.attr('id').replace(/.*_/g,'');
|
||||
var source_srl = source.attr('id').replace(/.*_/g,'');
|
||||
|
||||
var target = source.prevAll("li:not([class^=line])");
|
||||
var target_srl = 0;
|
||||
if(target.length >0){
|
||||
target_srl = source.prevAll("li:not([class^=line])").get(0).id.replace(/.*_/g,'');
|
||||
parent_srl = 0;
|
||||
}
|
||||
|
||||
jQuery.exec_json("board.procBoardAdminMoveCategory",{ "module_srl":module_srl,"parent_srl":parent_srl,"target_srl":target_srl,"source_srl":source_srl},
|
||||
function(data){
|
||||
if(data.error > 0) Tree(xml_url);
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
// i want you !! made by sol
|
||||
beforeMovedToLine : function(destination, source, pos){
|
||||
return (jQuery(destination).parents('ul').size() + jQuery('ul',source).size() <= max_menu_depth);
|
||||
},
|
||||
|
||||
// i want you !! made by sol
|
||||
beforeMovedToFolder : function(destination, source, pos){
|
||||
return (jQuery(destination).parents('ul').size() + jQuery('ul',source).size() <= max_menu_depth-1);
|
||||
},
|
||||
afterAjax:function()
|
||||
{
|
||||
//alert('Loaded');
|
||||
},
|
||||
animate:true
|
||||
,docToFolderConvert:true
|
||||
});
|
||||
|
||||
|
||||
|
||||
// open all node
|
||||
nodeToggleAll();
|
||||
},"xml");
|
||||
}
|
||||
function addNode(node,e){
|
||||
var params ={
|
||||
"category_srl":0
|
||||
,"parent_srl":node
|
||||
,"module_srl":jQuery("#fo_category [name=module_srl]").val()
|
||||
};
|
||||
|
||||
jQuery.exec_json('board.getBoardAdminCategoryTplInfo', params, function(data){
|
||||
jQuery('#category_info').html(data.tpl);
|
||||
});
|
||||
}
|
||||
|
||||
function modifyNode(node,e){
|
||||
var params ={
|
||||
"category_srl":node
|
||||
,"parent_srl":0
|
||||
,"module_srl":jQuery("#fo_category [name=module_srl]").val()
|
||||
};
|
||||
|
||||
jQuery.exec_json('board.getBoardAdminCategoryTplInfo', params, function(data){
|
||||
jQuery('#category_info').html(data.tpl);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function nodeToggleAll(){
|
||||
jQuery("[class*=close]", simpleTreeCollection[0]).each(function(){
|
||||
simpleTreeCollection[0].nodeToggle(this);
|
||||
});
|
||||
}
|
||||
|
||||
function deleteNode(node){
|
||||
if(confirm(lang_confirm_delete){
|
||||
var params ={
|
||||
"category_srl":node
|
||||
,"parent_srl":0
|
||||
,"module_srl":jQuery("#fo_category [name=module_srl]").val()
|
||||
};
|
||||
|
||||
jQuery.exec_json('board.procBoardAdminDeleteCategory', params, function(data){
|
||||
if(data.error==0) Tree(xml_url);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/* 카테고리 아이템 입력후 */
|
||||
function completeInsertCategory(ret_obj) {
|
||||
jQuery('#category_info').html("");
|
||||
Tree(xml_url);
|
||||
}
|
||||
|
||||
function hideCategoryInfo() {
|
||||
jQuery('#category_info').html("");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* 모듈 생성 후 */
|
||||
function completeInsertBoard(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
|
|
@ -98,40 +261,9 @@ function doCartSetup(act_type) {
|
|||
* 카테고리 관리
|
||||
**/
|
||||
|
||||
/* 빈 카테고리 아이템 추가 */
|
||||
function doInsertCategory(parent_srl) {
|
||||
if(typeof(parent_srl)=='undefined') parent_srl = 0;
|
||||
var params = {node_srl:0, parent_srl:parent_srl}
|
||||
doGetCategoryInfo(null, params);
|
||||
deSelectNode();
|
||||
}
|
||||
|
||||
/* 카테고리 클릭시 적용할 함수 */
|
||||
function doGetCategoryInfo(category_id, obj) {
|
||||
// category, category_id, node_srl을 추출
|
||||
var fo_obj = xGetElementById("fo_category");
|
||||
var module_srl = fo_obj.module_srl.value;
|
||||
var node_srl = 0;
|
||||
var parent_srl = 0;
|
||||
|
||||
if(typeof(obj)!="undefined") {
|
||||
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["category_srl"] = node_srl;
|
||||
params["parent_srl"] = parent_srl;
|
||||
params["module_srl"] = module_srl;
|
||||
|
||||
// 서버에 요청하여 해당 노드의 정보를 수정할 수 있도록 한다.
|
||||
var response_tags = new Array('error','message','tpl');
|
||||
exec_xml('board', 'getBoardAdminCategoryTplInfo', params, completeGetCategoryTplInfo, response_tags, params);
|
||||
}
|
||||
|
||||
/* 서버로부터 받아온 카테고리 정보를 출력 */
|
||||
xAddEventListener(document,'mousedown',checkMousePosition);
|
||||
|
|
@ -143,10 +275,7 @@ function checkMousePosition(e) {
|
|||
_yPos = evt.pageY;
|
||||
}
|
||||
|
||||
function hideCategoryInfo() {
|
||||
var obj = xGetElementById('category_info');
|
||||
obj.style.display = "none";
|
||||
}
|
||||
|
||||
|
||||
function completeGetCategoryTplInfo(ret_obj, response_tags) {
|
||||
var obj = xGetElementById('category_info');
|
||||
|
|
@ -164,26 +293,7 @@ function completeGetCategoryTplInfo(ret_obj, response_tags) {
|
|||
fo_obj.category_title.focus();
|
||||
}
|
||||
|
||||
/* 카테고리 아이템 입력후 */
|
||||
function completeInsertCategory(ret_obj) {
|
||||
var xml_file = ret_obj['xml_file'];
|
||||
var category_srl = ret_obj['category_srl'];
|
||||
var module_srl = ret_obj['module_srl'];
|
||||
var parent_srl = ret_obj['parent_srl'];
|
||||
|
||||
if(!xml_file) return;
|
||||
|
||||
loadTreeMenu(xml_file, 'category', 'zone_category', category_title, '',doGetCategoryInfo, category_srl, doMoveTree);
|
||||
|
||||
if(!category_srl) {
|
||||
xInnerHtml("category_info", "");
|
||||
} else {
|
||||
var params = {node_srl:category_srl, parent_srl:parent_srl}
|
||||
doGetCategoryInfo(null, params)
|
||||
}
|
||||
|
||||
if(typeof('fixAdminLayoutFooter')=="function") fixAdminLayoutFooter();
|
||||
}
|
||||
|
||||
|
||||
/* 카테고리를 드래그하여 이동한 후 실행할 함수 , 이동하는 category_srl과 대상 category_srl을 받음 */
|
||||
|
|
|
|||
|
|
@ -879,16 +879,17 @@
|
|||
$group_srls = $node->group_srls;
|
||||
$mid = $node->mid;
|
||||
$module_srl = $node->module_srl;
|
||||
|
||||
$parent_srl = $node->parent_srl;
|
||||
// node->group_srls값이 있으면
|
||||
if($group_srls) $group_check_code = sprintf('($is_admin==true||(is_array($group_srls)&&count(array_intersect($group_srls, array(%s)))))',$group_srls);
|
||||
else $group_check_code = "true";
|
||||
|
||||
$attribute = sprintf(
|
||||
'mid="%s" module_srl="%d" node_srl="%d" category_srl = "%d" text="<?php echo (%s?"%s":"")?>" url="%s" expand="%s" document_count="%d" ',
|
||||
'mid="%s" module_srl="%d" node_srl="%d" parent_srl="%d" category_srl="%d" text="<?php echo (%s?"%s":"")?>" url="%s" expand="%s" document_count="%d" ',
|
||||
$mid,
|
||||
$module_srl,
|
||||
$category_srl,
|
||||
$parent_srl,
|
||||
$category_srl,
|
||||
$group_check_code,
|
||||
$title,
|
||||
|
|
|
|||
12
modules/document/queries/getChildCategoryMinListOrder.xml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<query id="getChildCategoryMinListOrder" action="select">
|
||||
<tables>
|
||||
<table name="document_categories" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="min(list_order)" alias="list_order" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="parent_srl" var="parent_srl" default="0" filter="number" notnull="notnull" />
|
||||
<condition operation="equal" column="module_srl" var="module_srl" filter="number" notnull="notnull" pipe="and" />
|
||||
</conditions>
|
||||
</query>
|
||||
|
|
@ -237,47 +237,8 @@
|
|||
$target_srl = Context::get('target_srl');
|
||||
|
||||
if(!$menu_srl || !$mode || !$target_srl) return new Object(-1,'msg_invalid_request');
|
||||
|
||||
// 원본 메뉴들을 구함
|
||||
$oMenuAdminModel = &getAdminModel('menu');
|
||||
$oMenuAdminController = &getAdminController('menu');
|
||||
|
||||
$target_item = $oMenuAdminModel->getMenuItemInfo($target_srl);
|
||||
if($target_item->menu_item_srl != $target_srl) return new Object(-1,'msg_invalid_request');
|
||||
|
||||
// 위치 이동 (순서 조절)
|
||||
if($mode == 'move') {
|
||||
$args->parent_srl = $parent_srl;
|
||||
$args->menu_srl = $menu_srl;
|
||||
|
||||
if($source_srl) {
|
||||
$source_item = $oMenuAdminModel->getMenuItemInfo($source_srl);
|
||||
if($source_item->menu_item_srl != $source_srl) return new Object(-1,'msg_invalid_request');
|
||||
$args->listorder = $source_item->listorder-1;
|
||||
} else {
|
||||
$output = executeQuery('menu.getMaxListorder', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
$args->listorder = (int)$output->data->listorder;
|
||||
if(!$args->listorder) $args->listorder= 0;
|
||||
}
|
||||
$args->parent_srl = $parent_srl;
|
||||
$output = executeQuery('menu.updateMenuItemListorder', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$args->parent_srl = $parent_srl;
|
||||
$args->menu_item_srl = $target_srl;
|
||||
$output = executeQuery('menu.updateMenuItemNode', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
// 자식으로 추가
|
||||
} elseif($mode == 'insert') {
|
||||
$args->menu_item_srl = $target_srl;
|
||||
$args->parent_srl = $parent_srl;
|
||||
$args->listorder = -1*getNextSequence();
|
||||
$output = executeQuery('menu.updateMenuItemNode', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
}
|
||||
|
||||
$xml_file = $oMenuAdminController->makeXmlFile($menu_srl);
|
||||
$xml_file = $oMenuAdminController->moveMenuItem($menu_srl,$parent_srl,$source_srl,$target_srl,$mode);
|
||||
$this->add('xml_file', $xml_file);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@
|
|||
$this->setTemplateFile('menu_manage');
|
||||
}
|
||||
|
||||
|
||||
function dispHomepageBottomMenu() {
|
||||
// 메뉴 정보 가져오기
|
||||
$menu_srl = $this->homepage_info->second_menu_srl;
|
||||
|
|
|
|||
|
|
@ -1,8 +1,5 @@
|
|||
@charset "utf-8";
|
||||
|
||||
#menu ul { margin-top:10px; }
|
||||
#menu li { padding-bottom:10px; }
|
||||
|
||||
#menuItem { visibility:hidden; position:absolute; left:0; top:0; background-color:#FFFFFF; z-index:1000; border:2px solid #DDDDDD; padding:10px;}
|
||||
#menu_normal_btn_zone { display:none; }
|
||||
#menu_hover_btn_zone { display:none; }
|
||||
|
|
|
|||
|
|
@ -1,206 +1,107 @@
|
|||
var max_menu_depth = 1;
|
||||
var menuList = new Array();
|
||||
var mousePos = {x:0,y:0}
|
||||
|
||||
function chkMousePosition(evt) {
|
||||
var e = new xEvent(evt);
|
||||
mousePos = {x:e.pageX, y:e.pageY};
|
||||
function homepageLoadMenuInfo(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/tpl/images/tree/iconAdd.gif" /></a>').bind("click",function(e){homepageAddMenu(0,e);}).appendTo("ul.simpleTree > li");
|
||||
|
||||
var pobj = e.target;
|
||||
while(pobj) {
|
||||
pobj = pobj.parentNode;
|
||||
if(pobj && pobj.id == 'menuItem') return;
|
||||
//ajax get data and transeform ul il
|
||||
jQuery.get(url,function(data){
|
||||
jQuery(data).find("node").each(function(i){
|
||||
var text = jQuery(this).attr("text");
|
||||
var node_srl = jQuery(this).attr("node_srl");
|
||||
var parent_srl = jQuery(this).attr("parent_srl");
|
||||
var url = jQuery(this).attr("url");
|
||||
|
||||
// node
|
||||
var node = jQuery('<li id="tree_'+node_srl+'"><span>'+text+'</span></li>');
|
||||
|
||||
// button
|
||||
jQuery('<a href="#" class="add"><img src="./common/tpl/images/tree/iconAdd.gif" /></a>').bind("click",function(e){homepageAddMenu(node_srl,e);}).appendTo(node);
|
||||
|
||||
jQuery('<a href="#" class="modify"><img src="./common/tpl/images/tree/iconModify.gif" /></a>').bind("click",function(e){
|
||||
jQuery.exec_json("homepage.getHomepageMenuItem",{ "node_srl":node_srl},function(data){
|
||||
data.menu_info['mode'] = 'update';
|
||||
menuFormInsert(data.menu_info);
|
||||
jQuery("#menuItem").css('position','absolute').css('visibility','visible').css('top',e.pageY - jQuery("#header").height() - 70).css('left',e.pageX - jQuery("#navigation").width() -40);
|
||||
jQuery('#itemAttr4').css("display",'block');
|
||||
});
|
||||
|
||||
}).appendTo(node);
|
||||
|
||||
jQuery('<a href="#" class="delete"><img src="./common/tpl/images/tree/iconDel.gif" /></a>').bind("click",function(e){homepageDeleteMenu(node_srl);}).appendTo(node);
|
||||
|
||||
// insert parent child
|
||||
if(parent_srl>0){
|
||||
if(jQuery('#tree_'+parent_srl+'>ul').length==0) jQuery('#tree_'+parent_srl).append(jQuery('<ul>'));
|
||||
jQuery('#tree_'+parent_srl+'> ul').append(node);
|
||||
}else{
|
||||
if(jQuery('#menu ul.simpleTree > li > ul').length==0) jQuery("<ul>").appendTo('#menu ul.simpleTree > li');
|
||||
jQuery('#menu ul.simpleTree > li > ul').append(node);
|
||||
}
|
||||
|
||||
hideMenuItem();
|
||||
}
|
||||
});
|
||||
|
||||
function homepageLoadMenuInfo(xml_file) {
|
||||
var oXml = new xml_handler();
|
||||
oXml.reset();
|
||||
oXml.xml_path = xml_file;
|
||||
oXml.request(completeHomepageLoadMenuInfo, oXml);
|
||||
}
|
||||
//button show hide
|
||||
jQuery("#menu li").each(function(){
|
||||
if(jQuery(this).parents('ul').size() > max_menu_depth) jQuery("a.add",this).hide();
|
||||
if(jQuery(">ul",this).size()>0) jQuery(">a.delete",this).hide();
|
||||
});
|
||||
|
||||
function completeHomepageLoadMenuInfo(oXml) {
|
||||
var waiting_obj = xGetElementById("waitingforserverresponse");
|
||||
if(waiting_obj) waiting_obj.style.visibility = "hidden";
|
||||
|
||||
var xmlDoc = oXml.getResponseXml();
|
||||
if(!xmlDoc) return null;
|
||||
// draw tree
|
||||
simpleTreeCollection = jQuery('.simpleTree').simpleTree({
|
||||
autoclose: false,
|
||||
afterClick:function(node){
|
||||
//alert("text-"+jQuery('span:first',node).text());
|
||||
},
|
||||
afterDblClick:function(node){
|
||||
//alert("text-"+jQuery('span:first',node).text());
|
||||
},
|
||||
afterMove:function(destination, source, pos){
|
||||
jQuery('#menuItem').css("visibility",'hidden');
|
||||
|
||||
// node 태그에 해당하는 값들을 가져와서 html을 작성
|
||||
var node_list = xmlDoc.getElementsByTagName("node");
|
||||
if(node_list.length<1) return;
|
||||
var menu_srl = jQuery("#fo_menu input[name=menu_srl]").val();
|
||||
var parent_srl = destination.attr('id').replace(/.*_/g,'');
|
||||
var target_srl = source.attr('id').replace(/.*_/g,'');
|
||||
var brothers = jQuery('#'+destination.attr('id')+' > ul > li:not([class^=line])').length;
|
||||
var mode = brothers >1 ? 'move':'insert';
|
||||
var source_srl = pos == 0 ? 0: source.prevAll("li:not(.line)").get(0).id.replace(/.*_/g,'');
|
||||
|
||||
// select 내용 없앰
|
||||
xInnerHtml('menu','');
|
||||
|
||||
var root = xmlDoc.getElementsByTagName("root")[0];
|
||||
root.setAttribute('node_srl',0);
|
||||
root.setAttribute('parent_srl',0);
|
||||
xGetElementById('menu').appendChild(getGabItem(0,0,0));
|
||||
homepageInsertMenuObject(xGetElementById('menu'), root, 0);
|
||||
|
||||
}
|
||||
|
||||
function getGabItem(parent_srl, up_srl, depth) {
|
||||
if(typeof(parent_srl)=='undefined' || !parent_srl) parent_srl = 0;
|
||||
if(typeof(up_srl)=='undefined' || !up_srl) up_srl = 0;
|
||||
if(typeof(depth)=='undefined' || !depth) depth = 0;
|
||||
|
||||
var gabObj = xCreateElement('div');
|
||||
gabObj.id = 'gab_'+parent_srl+'_'+up_srl;
|
||||
gabObj.style.cursor = "pointer";
|
||||
gabObj.style.width = '100%';
|
||||
gabObj.style.height = '1px';
|
||||
gabObj.style.marign = '5px 0 0 0';
|
||||
gabObj.style.padding = '0 0 5px 0';
|
||||
gabObj.style.overflow = "hidden";
|
||||
gabObj.style.whitespace = "nowrap";
|
||||
return gabObj;
|
||||
}
|
||||
|
||||
// root부터 시작해서 recursive하게 노드를 표혐
|
||||
function homepageInsertMenuObject(drawObj, parent_node, depth) {
|
||||
|
||||
for (var i=0; i< parent_node.childNodes.length; i++) {
|
||||
|
||||
var html = "";
|
||||
|
||||
var node = parent_node.childNodes.item(i);
|
||||
if(node.nodeName!="node") continue;
|
||||
|
||||
var node_srl = node.getAttribute("node_srl");
|
||||
var parent_srl = node.getAttribute("parent_srl");
|
||||
var text = node.getAttribute("text");
|
||||
var url = node.getAttribute("url");
|
||||
|
||||
if(!text) continue;
|
||||
|
||||
var itemObj = xCreateElement('div');
|
||||
itemObj.style.margin = "0 0 0 "+(depth*20)+"px";
|
||||
|
||||
if(parent_srl>0 && i<1) itemObj.appendChild(getGabItem(parent_srl, 0, depth));
|
||||
|
||||
var textObj = xCreateElement('div');
|
||||
textObj.className = "page";
|
||||
textObj.style.cursor = "pointer";
|
||||
textObj.id = "node_"+node_srl;
|
||||
textObj.style.padding = "5px 0 5px 20px";
|
||||
xInnerHtml(textObj, text);
|
||||
|
||||
if(depth < max_menu_depth-1)
|
||||
xInnerHtml(textObj, xInnerHtml(textObj) + '<a href="#" onclick="homepageAddMenu('+node_srl+'); return false;" class="insert"><img src="./common/tpl/images/blank.gif" alt="" /></a> ');
|
||||
|
||||
xInnerHtml(textObj, xInnerHtml(textObj) + '<a href="#" onclick="homepageModifyMenu('+node_srl+'); return false;" class="modify"><img src="./common/tpl/images/blank.gif" alt="" /></a> ');
|
||||
|
||||
if(!node.hasChildNodes()) {
|
||||
xInnerHtml(textObj, xInnerHtml(textObj) + '<a href="#" onclick="homepageDeleteMenu('+node_srl+'); return false;" class="delete"><img src="./common/tpl/images/blank.gif" alt="" /></a> ');
|
||||
jQuery.exec_json("homepage.procHomepageMenuItemMove",{ "menu_srl":menu_srl,"parent_srl":parent_srl,"target_srl":target_srl,"source_srl":source_srl,"mode":mode},
|
||||
function(data){
|
||||
if(data.error>0){
|
||||
homepageLoadMenuInfo(xml_url);
|
||||
}
|
||||
itemObj.appendChild(textObj);
|
||||
});
|
||||
},
|
||||
|
||||
if(node.hasChildNodes()) homepageInsertMenuObject(itemObj, node, depth+1);
|
||||
itemObj.appendChild(getGabItem(parent_srl, node_srl, depth));
|
||||
// i want you !! made by sol
|
||||
beforeMovedToLine : function(destination, source, pos){
|
||||
return (jQuery(destination).parents('ul').size() + jQuery('ul',source).size() <= max_menu_depth);
|
||||
},
|
||||
|
||||
drawObj.appendChild(itemObj);
|
||||
}
|
||||
// i want you !! made by sol
|
||||
beforeMovedToFolder : function(destination, source, pos){
|
||||
return (jQuery(destination).parents('ul').size() + jQuery('ul',source).size() <= max_menu_depth-1);
|
||||
},
|
||||
afterAjax:function()
|
||||
{
|
||||
//alert('Loaded');
|
||||
},
|
||||
animate:true
|
||||
,docToFolderConvert:true
|
||||
});
|
||||
|
||||
// open all node
|
||||
nodeToggleAll();
|
||||
},"xml");
|
||||
}
|
||||
|
||||
function homepageAddMenu(node_srl) {
|
||||
menuFormReset();
|
||||
var obj = new Array();
|
||||
obj['mode'] = 'insert';
|
||||
if(typeof(node_srl)!='undefined' && node_srl > 0) {
|
||||
obj['parent_srl'] = node_srl;
|
||||
}
|
||||
menuFormInsert(obj)
|
||||
showMenuItem();
|
||||
}
|
||||
|
||||
function homepageModifyMenu(node_srl) {
|
||||
var params = new Array();
|
||||
params['node_srl'] = node_srl;
|
||||
var response_tags = new Array('error','message','menu_info');
|
||||
exec_xml('homepage','getHomepageMenuItem', params, completeModifyMenu, response_tags);
|
||||
}
|
||||
|
||||
function completeModifyMenu(ret_obj) {
|
||||
var menu_info = ret_obj['menu_info'];
|
||||
menu_info['mode'] = 'update';
|
||||
menuFormInsert(menu_info)
|
||||
showMenuItem();
|
||||
showMenuButton();
|
||||
}
|
||||
|
||||
function homepageDeleteMenu(node_srl) {
|
||||
var fo_obj = xGetElementById('menu_item_form');
|
||||
fo_obj.menu_item_srl.value = node_srl;
|
||||
|
||||
procFilter(fo_obj, delete_menu_item);
|
||||
}
|
||||
|
||||
function completeChangeLayout(ret_obj) {
|
||||
location.reload();
|
||||
}
|
||||
|
||||
function hideMenuItem() {
|
||||
xGetElementById('menuItem').style.visibility = 'hidden';
|
||||
menuFormReset();
|
||||
}
|
||||
|
||||
function showMenuButton() {
|
||||
xGetElementById('itemAttr4').style.display = 'block';
|
||||
}
|
||||
|
||||
function showMenuItem() {
|
||||
var obj = xGetElementById('menuItem');
|
||||
xLeft(obj, mousePos.x - xWidth('navigation') - 40);
|
||||
xTop(obj, mousePos.y - xHeight('header') - 70 );
|
||||
obj.style.visibility = 'visible';
|
||||
}
|
||||
|
||||
function menuFormReset() {
|
||||
var fo_obj = xGetElementById("fo_menu");
|
||||
|
||||
fo_obj.parent_srl.value = '';
|
||||
fo_obj.menu_item_srl.value = '';
|
||||
fo_obj.mode.value = '';
|
||||
|
||||
var names = xGetElementsByClassName("menu_names");
|
||||
for(var i in names) names[i].value = "";
|
||||
|
||||
fo_obj.browser_title.value = '';
|
||||
|
||||
fo_obj.menu_open_window.checked = false;
|
||||
fo_obj.menu_expand.checked = false;
|
||||
|
||||
for(var i=0; i<fo_obj.group_srls.length;i++) fo_obj.group_srls[i].checked = false;
|
||||
|
||||
fo_obj.module_type.selectedIndex = 0;
|
||||
fo_obj.module_type.disabled = "";
|
||||
|
||||
fo_obj.module_id.value = '';
|
||||
fo_obj.url.value = '';
|
||||
xGetElementById('itemAttr3').style.display = "none";
|
||||
|
||||
xGetElementById("menu_normal_btn_zone").style.display = "none";
|
||||
xGetElementById('menu_normal_btn_img').src = "";
|
||||
xGetElementById("menu_hover_btn_zone").style.display = "none";
|
||||
xGetElementById('menu_hover_btn_img').src = "";
|
||||
xGetElementById("menu_active_btn_zone").style.display = "none";
|
||||
xGetElementById('menu_active_btn_img').src = "";
|
||||
|
||||
xGetElementById('itemAttr4').style.display = 'none';
|
||||
|
||||
fo_obj.reset();
|
||||
}
|
||||
|
||||
function menuFormInsert(obj) {
|
||||
if(typeof(obj)=='undefined') return;
|
||||
|
||||
var fo_obj = xGetElementById("fo_menu");
|
||||
var fo_obj = jQuery("#fo_menu").get(0);
|
||||
|
||||
if(typeof(obj.parent_srl)!='undefined') fo_obj.parent_srl.value = obj.parent_srl;
|
||||
if(typeof(obj.menu_item_srl)!='undefined') fo_obj.menu_item_srl.value = obj.menu_item_srl;
|
||||
|
|
@ -232,324 +133,114 @@ function menuFormInsert(obj) {
|
|||
fo_obj.module_type.selectedIndex = 2;
|
||||
if(typeof(obj.url)!='undefined') fo_obj.url.value = obj.url;
|
||||
fo_obj.module_type.disabled = "disabled";
|
||||
xGetElementById('itemAttr2').style.display = 'none';
|
||||
xGetElementById('itemAttr3').style.display = 'block';
|
||||
jQuery('#itemAttr2').css('display','none');
|
||||
jQuery('#itemAttr3').css('display','block');
|
||||
} else {
|
||||
if(obj.module_type == 'page') fo_obj.module_type.selectedIndex = 1;
|
||||
else fo_obj.module_type.selectedIndex = 1;
|
||||
if(typeof(obj.module_id)!='undefined') fo_obj.module_id.value = obj.module_id;
|
||||
fo_obj.module_type.disabled = "disabled";
|
||||
xGetElementById('itemAttr2').style.display = 'block';
|
||||
xGetElementById('itemAttr3').style.display = 'none';
|
||||
jQuery('#itemAttr2').css('display','block');
|
||||
jQuery('#itemAttr3').css('display','none');
|
||||
}
|
||||
}
|
||||
|
||||
if(typeof(obj.normal_btn)!='undefined' && obj.normal_btn) {
|
||||
xGetElementById('menu_normal_btn_img').src = obj.normal_btn;
|
||||
xGetElementById('menu_normal_btn_zone').style.display = "block";
|
||||
xGetElementById('itemAttr4').style.display = 'block';
|
||||
jQuery('#menu_normal_btn_img').attr("src",obj.normal_btn);
|
||||
jQuery('#menu_normal_btn_zone','#itemAttr4').css("display",'block');
|
||||
fo_obj.normal_btn.value = obj.normal_btn;
|
||||
}
|
||||
if(typeof(obj.hover_btn)!='undefined' && obj.hover_btn) {
|
||||
xGetElementById('menu_hover_btn_img').src = obj.hover_btn;
|
||||
xGetElementById('menu_hover_btn_zone').style.display = "block";
|
||||
xGetElementById('itemAttr4').style.display = 'block';
|
||||
jQuery('#menu_hover_btn_img').attr("src",obj.hover_btn);
|
||||
jQuery('#menu_hover_btn_zone','#itemAttr4').css("display",'block');
|
||||
fo_obj.hover_btn.value = obj.hover_btn;
|
||||
}
|
||||
if(typeof(obj.active_btn)!='undefined' && obj.active_btn) {
|
||||
xGetElementById('menu_active_btn_img').src = obj.active_btn;
|
||||
xGetElementById('menu_active_btn_zone').style.display = "block";
|
||||
xGetElementById('itemAttr4').style.display = 'block';
|
||||
jQuery('#menu_active_btn_img').attr("src",obj.active_btn);
|
||||
jQuery('#menu_active_btn_zone','#itemAttr4').css("display",'block');
|
||||
fo_obj.active_btn.value = obj.active_btn;
|
||||
}
|
||||
}
|
||||
|
||||
function changeMenuType(obj) {
|
||||
if(obj.selectedIndex == 2) {
|
||||
xGetElementById('itemAttr2').style.display = 'none';
|
||||
xGetElementById('itemAttr3').style.display = 'block';
|
||||
return;
|
||||
}
|
||||
|
||||
xGetElementById('itemAttr2').style.display = 'block';
|
||||
xGetElementById('itemAttr3').style.display = 'none';
|
||||
function menuFormReset() {
|
||||
var fo_obj = jQuery("#fo_menu").get(0);
|
||||
|
||||
fo_obj.parent_srl.value = '';
|
||||
fo_obj.menu_item_srl.value = '';
|
||||
fo_obj.mode.value = '';
|
||||
|
||||
jQuery(".menu_names").each(function(){ jQuery(this).val(''); });
|
||||
|
||||
fo_obj.browser_title.value = '';
|
||||
|
||||
fo_obj.menu_open_window.checked = false;
|
||||
fo_obj.menu_expand.checked = false;
|
||||
|
||||
for(var i=0; i<fo_obj.group_srls.length;i++) fo_obj.group_srls[i].checked = false;
|
||||
|
||||
fo_obj.module_type.selectedIndex = 0;
|
||||
fo_obj.module_type.disabled = "";
|
||||
|
||||
fo_obj.module_id.value = '';
|
||||
fo_obj.url.value = '';
|
||||
jQuery('#itemAttr3').css("display","none");
|
||||
jQuery('#menu_normal_btn_zone','#menu_hover_btn_zone','#menu_active_btn_zone').css("display","none");
|
||||
jQuery('#menu_normal_btn_img','#menu_hover_btn_img','#menu_active_btn_img').attr("src","");
|
||||
jQuery('#itemAttr4').css("display","none");
|
||||
fo_obj.reset();
|
||||
}
|
||||
|
||||
function completeInsertMenuItem(ret_obj) {
|
||||
var xml_file = ret_obj['xml_file'];
|
||||
function completeInsertMenuItem(data) {
|
||||
var xml_file = data['xml_file'];
|
||||
if(!xml_file) return;
|
||||
|
||||
hideMenuItem();
|
||||
homepageLoadMenuInfo(xml_file);
|
||||
homepageLoadMenuInfo(xml_url);
|
||||
jQuery('#menuItem').css("visibility",'hidden');
|
||||
menuFormReset();
|
||||
}
|
||||
|
||||
function doHomepageMenuUploadButton(obj) {
|
||||
// 이미지인지 체크
|
||||
if(!/\.(gif|jpg|jpeg|png)$/i.test(obj.value)) return alert(alertImageOnly);
|
||||
|
||||
var fo_obj = xGetElementById("fo_menu");
|
||||
var act = fo_obj.act.value;
|
||||
fo_obj.act.value = "procHomepageMenuUploadButton";
|
||||
fo_obj.target.value = obj.name;
|
||||
fo_obj.submit();
|
||||
fo_obj.act.value = act;
|
||||
fo_obj.target.value = "";
|
||||
function homepageAddMenu(node_srl,e) {
|
||||
menuFormReset();
|
||||
var obj = new Array();
|
||||
obj['mode'] = 'insert';
|
||||
if(typeof(node_srl)!='undefined' && node_srl > 0) {
|
||||
obj['parent_srl'] = node_srl;
|
||||
}
|
||||
|
||||
menuFormInsert(obj);
|
||||
|
||||
jQuery("#menuItem").css('position','absolute').css('visibility','visible').css('top',e.pageY - jQuery("#header").height() - 70).css('left',e.pageX - jQuery("#navigation").width() -40);
|
||||
jQuery('#itemAttr4').css("display",'block');
|
||||
}
|
||||
|
||||
/* 메뉴 이미지 업로드 후처리 */
|
||||
function completeMenuUploadButton(target, filename) {
|
||||
var column_name = target.replace(/^menu_/,'');
|
||||
var fo_obj = xGetElementById("fo_menu");
|
||||
var zone_obj = xGetElementById(target+'_zone');
|
||||
var img_obj = xGetElementById(target+'_img');
|
||||
|
||||
fo_obj[column_name].value = filename;
|
||||
|
||||
var img = new Image();
|
||||
img.src = filename;
|
||||
img_obj.src = img.src;
|
||||
zone_obj.style.display = "block";
|
||||
}
|
||||
|
||||
function doDeleteButton(target) {
|
||||
var fo_obj = xGetElementById("fo_menu");
|
||||
|
||||
var col_name = target.replace(/^menu_/,'');
|
||||
|
||||
var params = new Array();
|
||||
params['target'] = target;
|
||||
params['menu_srl'] = fo_obj.menu_srl.value;
|
||||
params['menu_item_srl'] = fo_obj.menu_item_srl.value;
|
||||
params['filename'] = fo_obj[col_name].value;
|
||||
|
||||
var response_tags = new Array('error','message', 'target');
|
||||
|
||||
exec_xml('homepage','procHomepageDeleteButton', params, completeDeleteButton, response_tags);
|
||||
}
|
||||
|
||||
function completeDeleteButton(ret_obj) {
|
||||
var target = ret_obj['target'];
|
||||
|
||||
var column_name = target.replace(/^menu_/,'');
|
||||
var fo_obj = xGetElementById("fo_menu");
|
||||
var zone_obj = xGetElementById(target+'_zone');
|
||||
var img_obj = xGetElementById(target+'_img');
|
||||
fo_obj[column_name].value = "";
|
||||
img_obj.src = "";
|
||||
zone_obj.style.display = "none";
|
||||
}
|
||||
|
||||
/* drag item */
|
||||
xAddEventListener(document, 'mousedown', dragItem);
|
||||
|
||||
var dragObj = null;
|
||||
var dragTarget = null;
|
||||
var dragTmpObjectect = new Array();
|
||||
var dragDisappear = 0;
|
||||
|
||||
function dragItem(evt) {
|
||||
var e = new xEvent(evt);
|
||||
if(!e.target) return;
|
||||
var obj = e.target;
|
||||
while(obj) {
|
||||
if(obj && obj.nodeName == 'DIV' && typeof(obj.id)!='undefined' && obj.id.indexOf('node_')>-1) {
|
||||
dragEnable(obj, evt);
|
||||
return;
|
||||
}
|
||||
obj = obj.parentNode;
|
||||
}
|
||||
}
|
||||
|
||||
function getDragTmpObject(obj) {
|
||||
if(!dragTmpObjectect[obj.id]) {
|
||||
tmpObj = xCreateElement('div');
|
||||
tmpObj.id = obj.id + '_tmp';
|
||||
tmpObj.style.display = 'none';
|
||||
tmpObj.style.position = 'absolute';
|
||||
tmpObj.style.opacity = 0.5;
|
||||
tmpObj.style.filter = 'alpha(opacity=50)';
|
||||
tmpObj.style.cursor = "pointer";
|
||||
|
||||
xInnerHtml(tmpObj,xInnerHtml(obj));
|
||||
|
||||
document.body.appendChild(tmpObj);
|
||||
dragTmpObjectect[obj.id] = tmpObj;
|
||||
}
|
||||
return dragTmpObjectect[obj.id];
|
||||
}
|
||||
|
||||
function removeDragTmpObject(obj) {
|
||||
if(!dragTmpObjectect[obj.id]) return;
|
||||
dragTmpObjectect[obj.id] = null;
|
||||
}
|
||||
|
||||
function dragEnable(obj, evt) {
|
||||
if(obj.id.indexOf('node_')<0) return;
|
||||
obj.draggable = true;
|
||||
|
||||
dragObj = obj;
|
||||
dragObj.id = obj.id;
|
||||
|
||||
var e = new xEvent(evt);
|
||||
xPreventDefault(evt);
|
||||
obj.xDPX = e.pageX;
|
||||
obj.xDPY = e.pageY;
|
||||
|
||||
xAddEventListener(document, 'mouseup', dragUp, false);
|
||||
xAddEventListener(document, 'mousemove', dragMove, false);
|
||||
|
||||
var tmpObj = getDragTmpObject(obj);
|
||||
xLeft(tmpObj, e.pageX+1);
|
||||
xTop(tmpObj, e.pageY+1);
|
||||
xWidth(tmpObj, xWidth(obj));
|
||||
xHeight(tmpObj, xHeight(obj));
|
||||
xDisplay(tmpObj, 'block');
|
||||
}
|
||||
|
||||
function dragMove(evt) {
|
||||
if(!dragObj) return;
|
||||
|
||||
var e = new xEvent(evt);
|
||||
var target = e.target;
|
||||
var obj = dragObj;
|
||||
var tobj = getDragTmpObject(obj);
|
||||
xLeft(tobj, e.pageX+1);
|
||||
xTop(tobj, e.pageY+1);
|
||||
|
||||
if(target && target.nodeName == "DIV" && typeof(target.id)!='undefined' && (target.id.indexOf('gab_')>-1||target.id.indexOf('node_')>-1)) {
|
||||
var isChilds = false;
|
||||
var pObj = target.parentNode;
|
||||
while(pObj) {
|
||||
if(pObj.firstChild && typeof(pObj.firstChild.id)!='undefined' && pObj.firstChild.id == dragObj.id) {
|
||||
isChilds = true;
|
||||
break;
|
||||
}
|
||||
pObj = pObj.parentNode;
|
||||
}
|
||||
if(dragTarget) {
|
||||
dragTarget.style.backgroundColor = '';
|
||||
dragTarget.style.borderTop = '0px solid #000';
|
||||
dragTarget = null;
|
||||
}
|
||||
|
||||
if(!isChilds) {
|
||||
dragTarget = target;
|
||||
if(target.id.indexOf('gab_')>-1) {
|
||||
dragTarget.style.borderTop = '1px solid #000';
|
||||
} else {
|
||||
dragTarget.style.backgroundColor = '#DDDDDD';
|
||||
}
|
||||
}
|
||||
} else if(dragTarget) {
|
||||
dragTarget.style.backgroundColor = '';
|
||||
dragTarget.style.borderTop = '0px solid #000';
|
||||
dragTarget = null;
|
||||
}
|
||||
|
||||
xPreventDefault(evt);
|
||||
}
|
||||
|
||||
function dragUp(evt) {
|
||||
if(!dragObj) return;
|
||||
|
||||
if(dragTarget && dragTarget.id != dragObj.id && confirm(confirmMenuMove)) {
|
||||
var mode = null;
|
||||
if(dragTarget.id.indexOf('gab_')>-1) mode = 'move';
|
||||
else mode = 'insert';
|
||||
|
||||
var tmpArr = dragTarget.id.split('_');
|
||||
var parent_srl = tmpArr[1];
|
||||
var source_srl = mode=='move'?tmpArr[2]:0;
|
||||
|
||||
var tmpArr = dragObj.id.split('_');
|
||||
var target_srl = tmpArr[1];
|
||||
|
||||
var params = new Array();
|
||||
params['menu_srl'] = xGetElementById('fo_menu').menu_srl.value;
|
||||
params['mode'] = mode;
|
||||
params['parent_srl'] = parent_srl;
|
||||
params['source_srl'] = source_srl;
|
||||
params['target_srl'] = target_srl;
|
||||
var response_tags = new Array('error','message','xml_file');
|
||||
exec_xml('homepage','procHomepageMenuItemMove', params, completeInsertMenuItem, response_tags);
|
||||
}
|
||||
|
||||
var tobj = getDragTmpObject(dragObj);
|
||||
|
||||
xRemoveEventListener(document, 'mouseup', dragUp, false);
|
||||
xRemoveEventListener(document, 'mousemove', dragMove, false);
|
||||
|
||||
dragDisappear = dragDisapearObject(tobj, dragObj);
|
||||
|
||||
var e = new xEvent(evt);
|
||||
xPreventDefault(evt);
|
||||
dragObj = null;
|
||||
|
||||
if(dragTarget) {
|
||||
dragTarget.style.backgroundColor = '';
|
||||
dragTarget.style.borderTop = '0px solid #000';
|
||||
dragTarget = null;
|
||||
function homepageDeleteMenu(node_srl) {
|
||||
if(confirm(lang_confirm_delete)){
|
||||
jQuery('#menuItem').css("visibility",'hidden');
|
||||
var fo_obj = jQuery('#menu_item_form').get(0);
|
||||
fo_obj.menu_item_srl.value = node_srl;
|
||||
procFilter(fo_obj, delete_menu_item);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 스르르 사라지게 함;;
|
||||
function dragDisapearObject(obj, tobj) {
|
||||
var it = 20;
|
||||
var ib = 20;
|
||||
function nodeToggleAll(){
|
||||
jQuery("[class*=close]", simpleTreeCollection[0]).each(function(){
|
||||
simpleTreeCollection[0].nodeToggle(this);
|
||||
});
|
||||
}
|
||||
|
||||
var x = parseInt(xPageX(obj),10);
|
||||
var y = parseInt(xPageY(obj),10);
|
||||
var ldt = (x - parseInt(xPageX(tobj),10)) / ib;
|
||||
var tdt = (y - parseInt(xPageY(tobj),10)) / ib;
|
||||
function doReloadTreeMenu(){
|
||||
var menu_srl = jQuery("#fo_menu input[name=menu_srl]").val();
|
||||
|
||||
return setInterval(function() {
|
||||
if(ib < 1) {
|
||||
clearInterval(dragDisappear);
|
||||
xDisplay(obj, 'none');
|
||||
removeDragTmpObject(tobj);
|
||||
return;
|
||||
jQuery.exec_json("menu.procMenuAdminMakeXmlFile",{ "menu_srl":menu_srl},
|
||||
function(data){
|
||||
homepageLoadMenuInfo(xml_url);
|
||||
}
|
||||
ib -= 3;
|
||||
x-=ldt;
|
||||
y-=tdt;
|
||||
xLeft(obj, x);
|
||||
xTop(obj, y);
|
||||
}, it/ib);
|
||||
);
|
||||
}
|
||||
|
||||
function completeInsertBoard(ret_obj) {
|
||||
alert(ret_obj['message']);
|
||||
location.reload();
|
||||
function closeTreeMenuInfo(){
|
||||
jQuery('#menuItem').css("visibility",'hidden');
|
||||
}
|
||||
|
||||
function completeInsertPage(ret_obj) {
|
||||
alert(ret_obj['message']);
|
||||
location.reload();
|
||||
}
|
||||
|
||||
function doDeleteGroup(group_srl) {
|
||||
var fo_obj = xGetElementById('fo_group');
|
||||
fo_obj.group_srl.value = group_srl;
|
||||
procFilter(fo_obj, delete_group);
|
||||
}
|
||||
|
||||
function completeInsertGroup(ret_obj) {
|
||||
location.href = current_url.setQuery('group_srl','');
|
||||
}
|
||||
|
||||
function completeDeleteGroup(ret_obj) {
|
||||
location.href = current_url.setQuery('group_srl','');
|
||||
|
||||
}
|
||||
|
||||
function completeInsertGrant(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
var page = ret_obj['page'];
|
||||
var module_srl = ret_obj['module_srl'];
|
||||
|
||||
alert(message);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +1,24 @@
|
|||
<!--%import("./filter/insert_menu_item.xml")-->
|
||||
<!--%import("./filter/delete_menu_item.xml")-->
|
||||
<!--%import("./filter/move_up_menu_item.xml")-->
|
||||
<!--%import("./filter/move_down_menu_item.xml")-->
|
||||
|
||||
<!--%import("../../../../common/js/jquery.simple.tree.js",optimized=false)-->
|
||||
<!--%import("../../../../common/css/jquery.simple.tree.css",optimized=false)-->
|
||||
|
||||
<h3 class="title">{$lang->cmd_homepage_menus[$act]}</h3>
|
||||
<p class="infoText">{$lang->about_homepage_act[$act]}</p>
|
||||
|
||||
<span style="float:right"><a href="#" onclick="doReloadTreeMenu('{$menu_info->menu_srl}');return false;" class="button"><span>{$lang->cmd_remake_cache}</span></a></span>
|
||||
<form method="post" action="./" id="menu_item_form">
|
||||
<input type="hidden" name="menu_item_srl" value="" />
|
||||
</form>
|
||||
|
||||
<form method="post" action="./" id="menu_form">
|
||||
<input type="hidden" name="menu_srl" value="{$menu_info->menu_srl}" />
|
||||
<div id="menu"></div>
|
||||
<div id="menu">
|
||||
<ul class="simpleTree">
|
||||
<li class="root" id='tree_0'><span>{$lang->menu}</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<br />
|
||||
<a href="#" onclick="homepageAddMenu(); return false;" class="button blue"><span>{$lang->cmd_add_new_menu}</span></a>
|
||||
</form>
|
||||
|
||||
<div id="menuItem">
|
||||
|
|
@ -144,20 +148,21 @@
|
|||
<tr>
|
||||
<td>
|
||||
<span class="button green"><input type="submit" value="{$lang->cmd_save}" /></span>
|
||||
<a href="#" onclick="hideMenuItem();return false" class="button red"><span>{$lang->cmd_close}</span></a>
|
||||
<a href="#" onclick="closeTreeMenuInfo()" class="button red"><span>{$lang->cmd_close}</span></a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</form>
|
||||
</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">
|
||||
max_menu_depth = {$menu_max_depth};
|
||||
xAddEventListener(window,'load',function() { homepageLoadMenuInfo("{$menu_info->xml_file}"); } );
|
||||
xAddEventListener(document,'mousedown',chkMousePosition);
|
||||
var alertImageOnly = "{$lang->alert_image_only}";
|
||||
var confirmMenuMove = "{$lang->confirm_move}";
|
||||
var max_menu_depth = 999; //{$menu_max_depth};
|
||||
var simpleTreeCollection;
|
||||
var alertImageOnly = "{$lang->alert_image_only}";
|
||||
var confirmMenuMove = "{$lang->confirm_move}";
|
||||
var lang_confirm_delete = "{$lang->confirm_delete}";
|
||||
var xml_url = "{$menu_info->xml_file}";
|
||||
homepageLoadMenuInfo(xml_url);
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -209,6 +209,7 @@
|
|||
/**
|
||||
* @brief 메뉴의 메뉴를 이동
|
||||
**/
|
||||
/*
|
||||
function procMenuAdminMoveItem() {
|
||||
// 변수 설정
|
||||
$menu_id = Context::get('menu_id');
|
||||
|
|
@ -241,6 +242,65 @@
|
|||
$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');
|
||||
$parent_srl = Context::get('parent_srl');
|
||||
$source_srl = Context::get('source_srl');
|
||||
$target_srl = Context::get('target_srl');
|
||||
|
||||
if(!$menu_srl || !$mode || !$target_srl) return new Object(-1,'msg_invalid_request');
|
||||
$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');
|
||||
|
||||
$target_item = $oMenuAdminModel->getMenuItemInfo($target_srl);
|
||||
if($target_item->menu_item_srl != $target_srl) return new Object(-1,'msg_invalid_request');
|
||||
|
||||
// 위치 이동 (순서 조절)
|
||||
if($mode == 'move') {
|
||||
$args->parent_srl = $parent_srl;
|
||||
$args->menu_srl = $menu_srl;
|
||||
|
||||
if($source_srl) {
|
||||
$source_item = $oMenuAdminModel->getMenuItemInfo($source_srl);
|
||||
if($source_item->menu_item_srl != $source_srl) return new Object(-1,'msg_invalid_request');
|
||||
$args->listorder = $source_item->listorder-1;
|
||||
} else {
|
||||
$output = executeQuery('menu.getMaxListorder', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
$args->listorder = (int)$output->data->listorder;
|
||||
if(!$args->listorder) $args->listorder= 0;
|
||||
}
|
||||
$args->parent_srl = $parent_srl;
|
||||
$output = executeQuery('menu.updateMenuItemListorder', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$args->parent_srl = $parent_srl;
|
||||
$args->menu_item_srl = $target_srl;
|
||||
$output = executeQuery('menu.updateMenuItemNode', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
// 자식으로 추가
|
||||
} elseif($mode == 'insert') {
|
||||
$args->menu_item_srl = $target_srl;
|
||||
$args->parent_srl = $parent_srl;
|
||||
$args->listorder = -1*getNextSequence();
|
||||
$output = executeQuery('menu.updateMenuItemNode', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
}
|
||||
|
||||
$xml_file = $this->makeXmlFile($menu_srl);
|
||||
return $xml_file;
|
||||
// $this->add('xml_file', $xml_file);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief xml 파일을 갱신
|
||||
|
|
|
|||
|
|
@ -152,7 +152,8 @@
|
|||
$tpl = $oTemplate->compile($this->module_path.'tpl', 'menu_item_info');
|
||||
|
||||
// return 할 변수 설정
|
||||
$this->add('tpl', $tpl);
|
||||
|
||||
$this->add('tpl', str_replace("\n"," ",$tpl));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,7 +71,6 @@
|
|||
Context::set('menu_info', $menu_info);
|
||||
|
||||
// 레이아웃을 팝업으로 지정
|
||||
Context::set('layout','none');
|
||||
$this->setTemplateFile('menu_management');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
<!--%import("filter/delete_menu.xml")-->
|
||||
<!--%import("js/menu_admin.js")-->
|
||||
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<!-- 정보 -->
|
||||
|
|
@ -26,7 +27,7 @@
|
|||
<!--@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)}" onclick="winopen(this.href,'MenuManage','width=850,height=800,resizable=yes,scrollbars=yes,toolbars=no');return false;">{htmlspecialchars($val->title)}</a></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>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,4 @@
|
|||
/* 메뉴 입력후 */
|
||||
function completeInsertMenu(ret_obj) {
|
||||
var menu_srl = ret_obj['menu_srl'];
|
||||
alert(ret_obj['message']);
|
||||
location.href = current_url.setQuery('act','dispMenuAdminContent');
|
||||
|
||||
//var url = current_url.setQuery('act','dispMenuAdminManagement').setQuery('menu_srl',menu_srl);
|
||||
//window.open(url);
|
||||
}
|
||||
|
||||
/* 메뉴 삭제 */
|
||||
function doDeleteMenu(menu_srl) {
|
||||
|
|
@ -69,9 +61,7 @@ function checkMousePosition(e) {
|
|||
*/
|
||||
|
||||
function hideCategoryInfo() {
|
||||
var obj = xGetElementById('menu_zone_info');
|
||||
xInnerHtml(obj,'');
|
||||
obj.style.display = "none";
|
||||
jQuery("#menu_zone_info").html("");
|
||||
}
|
||||
|
||||
function completeGetMenuItemTplInfo(ret_obj, response_tags) {
|
||||
|
|
@ -104,29 +94,6 @@ function completeGetMenuItemTplInfo(ret_obj, response_tags) {
|
|||
*/
|
||||
}
|
||||
|
||||
/* 메뉴 아이템 입력후 */
|
||||
function completeInsertMenuItem(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_item_srl = ret_obj['menu_item_srl'];
|
||||
var parent_srl = ret_obj['parent_srl'];
|
||||
|
||||
if(!xml_file) return;
|
||||
|
||||
loadTreeMenu(xml_file, 'menu', 'menu_zone_menu', menu_title, '', doGetMenuItemInfo, menu_item_srl, doMoveTree);
|
||||
|
||||
if(!menu_srl) xInnerHtml("menu_zone_info", "");
|
||||
else {
|
||||
var params = {node_srl:menu_item_srl, parent_srl:parent_srl}
|
||||
doGetMenuItemInfo('menu', params)
|
||||
}
|
||||
|
||||
if(typeof('fixAdminLayoutFooter')=="function") fixAdminLayoutFooter();
|
||||
}
|
||||
|
||||
|
||||
/* 메뉴를 드래그하여 이동한 후 실행할 함수 , 이동하는 item_srl과 대상 item_srl을 받음 */
|
||||
function doMoveTree(menu_id, source_item, target_item) {
|
||||
var fo_obj = xGetElementById("fo_move_menu");
|
||||
|
|
|
|||
155
modules/menu/tpl/js/menu_tree.js
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
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/tpl/images/tree/iconAdd.gif" /></a>').bind("click",function(e){addNode(0,e);}).appendTo("ul.simpleTree > li");
|
||||
|
||||
//ajax get data and transeform ul il
|
||||
jQuery.get(url,function(data){
|
||||
jQuery(data).find("node").each(function(i){
|
||||
var text = jQuery(this).attr("text");
|
||||
var node_srl = jQuery(this).attr("node_srl");
|
||||
var parent_srl = jQuery(this).attr("parent_srl");
|
||||
var url = jQuery(this).attr("url");
|
||||
|
||||
// node
|
||||
var node = jQuery('<li id="tree_'+node_srl+'"><span>'+text+'</span></li>');
|
||||
|
||||
// button
|
||||
jQuery('<a href="#" class="add"><img src="./common/tpl/images/tree/iconAdd.gif" /></a>').bind("click",function(e){addNode(node_srl,e);}).appendTo(node);
|
||||
|
||||
jQuery('<a href="#" class="modify"><img src="./common/tpl/images/tree/iconModify.gif" /></a>').bind("click",function(e){
|
||||
modifyNode(node_srl,e);
|
||||
}).appendTo(node);
|
||||
|
||||
jQuery('<a href="#" class="delete"><img src="./common/tpl/images/tree/iconDel.gif" /></a>').bind("click",function(e){
|
||||
deleteNode(node_srl);
|
||||
}).appendTo(node);
|
||||
|
||||
// insert parent child
|
||||
if(parent_srl>0){
|
||||
if(jQuery('#tree_'+parent_srl+'>ul').length==0) jQuery('#tree_'+parent_srl).append(jQuery('<ul>'));
|
||||
jQuery('#tree_'+parent_srl+'> ul').append(node);
|
||||
}else{
|
||||
if(jQuery('#menu ul.simpleTree > li > ul').length==0) jQuery("<ul>").appendTo('#menu ul.simpleTree > li');
|
||||
jQuery('#menu ul.simpleTree > li > ul').append(node);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
//button show hide
|
||||
jQuery("#menu li").each(function(){
|
||||
if(jQuery(this).parents('ul').size() > max_menu_depth) jQuery("a.add",this).hide();
|
||||
if(jQuery(">ul",this).size()>0) jQuery(">a.delete",this).hide();
|
||||
});
|
||||
|
||||
|
||||
// draw tree
|
||||
simpleTreeCollection = jQuery('.simpleTree').simpleTree({
|
||||
autoclose: false,
|
||||
afterClick:function(node){
|
||||
//alert("text-"+jQuery('span:first',node).text());
|
||||
},
|
||||
afterDblClick:function(node){
|
||||
//alert("text-"+jQuery('span:first',node).text());
|
||||
},
|
||||
afterMove:function(destination, source, pos){
|
||||
|
||||
jQuery("#menu_zone_info").html("");
|
||||
var menu_srl = jQuery("#fo_menu input[name=menu_srl]").val();
|
||||
var parent_srl = destination.attr('id').replace(/.*_/g,'');
|
||||
var target_srl = source.attr('id').replace(/.*_/g,'');
|
||||
var brothers = jQuery('#'+destination.attr('id')+' > ul > li:not([class^=line])').length;
|
||||
var mode = brothers >1 ? 'move':'insert';
|
||||
var source_srl = pos == 0 ? 0: source.prevAll("li:not(.line)").get(0).id.replace(/.*_/g,'');
|
||||
|
||||
jQuery.exec_json("menu.procMenuAdminMoveItem",{"menu_srl":menu_srl,"parent_srl":parent_srl,"target_srl":target_srl,"source_srl":source_srl,"mode":mode},
|
||||
function(data){
|
||||
if(data.error>0) Tree(xml_url);
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
// i want you !! made by sol
|
||||
beforeMovedToLine : function(destination, source, pos){
|
||||
// if(typeof(destination.id) == 'undefined') return false;
|
||||
return (jQuery(destination).parents('ul').size() + jQuery('ul',source).size() <= max_menu_depth);
|
||||
},
|
||||
|
||||
// i want you !! made by sol
|
||||
beforeMovedToFolder : function(destination, source, pos){
|
||||
// if(typeof(destination.id) == 'undefined') return false;
|
||||
return (jQuery(destination).parents('ul').size() + jQuery('ul',source).size() <= max_menu_depth-1);
|
||||
},
|
||||
afterAjax:function()
|
||||
{
|
||||
//alert('Loaded');
|
||||
},
|
||||
animate:true
|
||||
,docToFolderConvert:true
|
||||
});
|
||||
|
||||
|
||||
// image url replace
|
||||
// jQuery("#menu ul.simpleTree img").attr("src",function(){ return jQuery(this).attr("src").replace("images/","./common/tpl/images/tree/");});
|
||||
|
||||
|
||||
|
||||
|
||||
// open all node
|
||||
nodeToggleAll();
|
||||
},"xml");
|
||||
}
|
||||
|
||||
function nodeToggleAll(){
|
||||
jQuery("[class*=close]", simpleTreeCollection[0]).each(function(){
|
||||
simpleTreeCollection[0].nodeToggle(this);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
function modifyNode(node_srl,e){
|
||||
jQuery('#menu_zone_info').html('');
|
||||
var params ={
|
||||
"parent_srl":0
|
||||
,"menu_item_srl":node_srl
|
||||
};
|
||||
|
||||
jQuery.exec_json('menu.getMenuAdminTplInfo', params, function(data){
|
||||
jQuery('#menu_zone_info').html(data.tpl);
|
||||
});
|
||||
}
|
||||
|
||||
function addNode(node_srl,e){
|
||||
jQuery('#menu_zone_info').html('');
|
||||
var params ={
|
||||
"menu_item_srl":0
|
||||
,"parent_srl":node_srl
|
||||
};
|
||||
|
||||
jQuery.exec_json('menu.getMenuAdminTplInfo', params, function(data){
|
||||
jQuery('#menu_zone_info').html(data.tpl);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function deleteNode(node_srl){
|
||||
|
||||
if(confirm(lang_confirm_delete)){
|
||||
jQuery('#menu_zone_info').html('');
|
||||
var params ={
|
||||
"menu_item_srl":node_srl
|
||||
,"menu_srl":jQuery("form input[name=menu_srl]").val()
|
||||
};
|
||||
jQuery.exec_json('menu.procMenuAdminDeleteItem', params, function(data){
|
||||
Tree(xml_url);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function completeInsertMenuItem(ret_obj) {
|
||||
jQuery('#menu_zone_info').html('');
|
||||
Tree(xml_url);
|
||||
}
|
||||
|
|
@ -25,7 +25,7 @@
|
|||
<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>
|
||||
<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>
|
||||
|
|
@ -36,13 +36,7 @@
|
|||
<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>
|
||||
|
|
@ -89,14 +83,8 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<th scope="row" colspan="3" class="button"><div>
|
||||
<!--@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-->
|
||||
</div></th>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,10 @@
|
|||
<!--%import("filter/insert_menu_item.xml")-->
|
||||
<!--%import("filter/delete_menu_item.xml")-->
|
||||
<!--%import("filter/move_menu_item.xml")-->
|
||||
<!--%import("css/menu.css")-->
|
||||
|
||||
<!--%import("../../common/js/jquery.simple.tree.js",optimized=false)-->
|
||||
<!--%import("../../common/css/jquery.simple.tree.css",optimized=false)-->
|
||||
<!--%import("js/menu_tree.js")-->
|
||||
<!--%import("js/menu_admin.js")-->
|
||||
|
||||
<script type="text/javascript">
|
||||
|
|
@ -11,13 +14,6 @@
|
|||
|
||||
<div class="menuManagement">
|
||||
|
||||
<!-- 메뉴 이동을 위해 임시로 사용하는 form -->
|
||||
<form id="fo_move_menu" action="./" method="get">
|
||||
<input type="hidden" name="menu_id" />
|
||||
<input type="hidden" name="source_item" />
|
||||
<input type="hidden" name="target_item" />
|
||||
</form>
|
||||
|
||||
<!--@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}" />
|
||||
|
|
@ -31,13 +27,14 @@
|
|||
</div>
|
||||
<div class="fr">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_modify}" /></span>
|
||||
<a href="#" onclick="window.close();return false;" class="button"><span>{$lang->cmd_close}</span></a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="col"><div>{$lang->menu_management}</div></th>
|
||||
<td class="left">{nl2br($lang->about_menu_management)}</td>
|
||||
<td class="left">{nl2br($lang->about_menu_management)}
|
||||
<span style="float:right"><a href="#" onclick="doReloadTreeMenu('{$menu_info->menu_srl}');return false;" class="button"><span>{$lang->cmd_remake_cache}</span></a></span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
|
@ -57,14 +54,6 @@
|
|||
</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="post" onsubmit="return procFilter(this, insert_menu_item)" class="clear" target="tmp_upload_iframe" enctype="multipart/form-data">
|
||||
|
|
@ -76,19 +65,23 @@
|
|||
<input type="hidden" name="act" value="" />
|
||||
<input type="hidden" name="target" value="" />
|
||||
|
||||
<div id="category_list">
|
||||
<div id="menu_zone_menu"></div>
|
||||
<div id="menu">
|
||||
<ul class="simpleTree">
|
||||
<li class="root" id='tree_0'><span>{$lang->menu}</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="menu_zone_info"></div>
|
||||
|
||||
|
||||
<div id="menu_zone_info" style="position:absolute;top:200px; width:70%; right:20px"></div>
|
||||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
loadTreeMenu("{$menu_info->xml_file}", "menu", "menu_zone_menu", "{$menu_info->title}", '', doGetMenuItemInfo, 0, doMoveTree);
|
||||
</script>
|
||||
</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">
|
||||
var simpleTreeCollection;
|
||||
var max_menu_depth = 999;
|
||||
var xml_url = "{$menu_info->xml_file}";
|
||||
var lang_confirm_delete = "{$lang->confirm_delete}";
|
||||
Tree(xml_url);
|
||||
</script>
|
||||