포럼
document 모듈의 tpl 중 document_category.js 에 대한 문제..
2013.01.08 14:36
언제부터인지 모르겠으나 게시판의 관리자 기능중 분류관리 부분에 오류가 있어 문의드립니다.
xe 버전은 1.4.4.2 사용중입니다.
가능하면 코어를 업그레이드 하고 싶지만 주요 모듈에 수정된 부분들이 있어 못하고 있네요;;
여튼 이 버전을 유지하면서 아래 문제를 해결해 보려고 하는데요;
발생한 문제는 게시판 관리에 [분류 관리] 탭에서 분류를 추가, 수정하려고 하면
"서버에 요청중입니다. 잠시만 기다려주세요." 메세지만 나오고 더 진행이 되지 않는 것입니다.
추가, 수정에 대한 팝업 레이어가 출력되지 않습니다.
수정을 위해 소스를 보고 있는데...
일단 분류생성을 위한 카테고리의 xml 캐시파일 생성에는 문제가 없고요.
document_category.js를 import 하는
modules\document\tpl\category_list.html 파일에서 Tree(xml_url) 스크립트도 잘 작동해서 트리를 생성하고 있습니다.
결국 문제는 Add, Modify 버튼을 클릭했을 때 팝업 레이어가 안뜨는건데
버튼 클릭 시 서버요청에서 무한루프를 도는 것으로 보아..
document_category.js 에서
addNode, modifyNode 펑션이 작동하지 않는다고 생각됩니다.
*삭제와 이동은 잘 작동합니다.
예를 들어서 분류관리에서 노드를 추가 한다고 할 때..
document_category.js에 노드 추가 팝업 레이어 펑션의 내용은 아래와 같습니다.
function addNode(node,e){
var params ={
"category_srl":0
,"parent_srl":node
,"module_srl":jQuery("#fo_category [name=module_srl]").val()
};
jQuery.exec_json('document.getDocumentCategoryTplInfo', params, function(data){
jQuery('#category_info').html(data.tpl).css('left',e.pageX).css('top',e.pageY);
});
}
이 펑션은 노드값을 받아서 document.model.php의 getDocumentCategoryTplInfo으로 카테고리 상세를 받아
category_info.html (노드 추가,수정에 사용하는 팝업 레이어) 파일에 뿌려주는겁니다.
function getDocumentCategoryTplInfo() {
$oModuleModel = &getModel('module');
$oMemberModel = &getModel('member');
// 해당 메뉴의 정보를 가져오기 위한 변수 설정
$module_srl = Context::get('module_srl');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
// 권한 체크
$grant = $oModuleModel->getGrant($module_info, Context::get('logged_info'));
if(!$grant->manager) return new Object(-1,'msg_not_permitted');
$category_srl = Context::get('category_srl');
$parent_srl = Context::get('parent_srl');
// 회원 그룹의 목록을 가져옴
$group_list = $oMemberModel->getGroups($module_info->site_srl);
Context::set('group_list', $group_list);
// parent_srl이 있고 category_srl 이 없으면 하부 메뉴 추가임
if(!$category_srl && $parent_srl) {
// 상위 메뉴의 정보를 가져옴
$parent_info = $this->getCategory($parent_srl);
// 추가하려는 메뉴의 기본 변수 설정
$category_info->category_srl = getNextSequence();
$category_info->parent_srl = $parent_srl;
$category_info->parent_category_title = $parent_info->title;
// root에 메뉴 추가하거나 기존 메뉴의 수정일 경우
} else {
// category_srl 이 있으면 해당 메뉴의 정보를 가져온다
if($category_srl) $category_info = $this->getCategory($category_srl);
// 찾아진 값이 없다면 신규 메뉴 추가로 보고 category_srl값만 구해줌
if(!$category_info->category_srl) {
$category_info->category_srl = getNextSequence();
}
}
$category_info->title = htmlspecialchars($category_info->title);
Context::set('category_info', $category_info);
// template 파일을 직접 컴파일한후 tpl변수에 담아서 return한다.
$oTemplate = &TemplateHandler::getInstance();
$tpl = $oTemplate->compile('./modules/document/tpl', 'category_info');
$tpl = str_replace("\n",'',$tpl);
// 사용자 정의 언어 변경
$oModuleController = &getController('module');
$oModuleController->replaceDefinedLangCode($tpl);
// return 할 변수 설정
$this->add('tpl', $tpl);
}
서버요청에서 무한루프를 도는 것으로 보아 결국 이 두 펑션의 어딘가에서 문제가 발생하는거 같은데
*사실 이동과 삭제가 작동하는걸로 봐서는 document_category.js의 addNode 펑션 문제는 아닌거 같습니다만..
어디가 문제인지를 알 수가 없습니다;;
xe의 수정은 에디터로 하고 있는데 의심되는 부분에 얼럿이나 echo를 찍어봐도 안나오네요;
어디에서 값이 잘못전달되는지 모르니 수정도 못하고 있습니다;;
버그 추적할 방법이라던가.. 아니면 어디가 문제일지 아시는분 도움 부탁드립니다.
댓글 6
-
KANTSOFT
2013.01.08 15:04
-
마리모
2013.01.08 15:15
여러모로 테스트해본 결과 js 파일의 문제는 아닌걸로 보입니다.
결국 document.model.php 에서 getDocumentCategoryTplInfo() 펑션 문제인데요..
xe 디버깅 방법은 잘 몰라서.. debugPrint() 셋팅이나 사용법 좀 더 자세히 알 수 있을까요?
-
마리모
2013.01.08 16:02
이런 디버깅 옵션이 있는줄 몰랐네요ㅠ
xe 디버깅 방법을 검색해보고 설정해서 결과를 출력해 봤습니다.
document.model.php의 getDocumentCategoryTplInfo() 마지막에
출력하는 부분인 tpl\category_info.html 파일 결과가 어떤지 debugPrint($tpl);로 출력해봤는데요.
디버깅 메세지를 열어 $tpl에 담긴 내용을 보니 category_html을 잘 출력하고 있습니다.
여기까지는 아무 이상없이 아주 정상적입니다.
결국 팝업레이어도 정상적으로 만들어주고 있다는건데..
어째서 "서버에 요청중입니다. 잠시만 기다려주세요..." 메세지만 나오고
팝업 레이어가 뜨지는 않는걸까요;;;
-
마리모
2013.01.08 16:38
해결되었습니다^^;
무엇이 문제인지 원인을 정확히 찾지는 못했으나 1.4.4.2 버전의 원본 document 모듈에tpl 부분을 덮어 씌웠더니 문제가 발생하지 않네요.
tpl 하위의 파일들이 완전히 같은 소스임에도 불구하고 원본의 것을 덮어씌워 해결되는게 이해가 되지 않지만;;
여튼 그렇게 해결되었습니다.
-
KANTSOFT
2013.01.08 17:47
해결하셨다니 다행이네요.g
-
마리모
2013.01.08 19:01
도움 감사합니다^^;
debugPrint();랑 js에서 중단점 찍어 확인하지 않고선 소스만 봐선 모르겠네요.