웹마스터 팁
댓글 삭제/수정/답글 시 팝업창으로 띄우기
2009.10.21 11:52
소스 코드를 수정하는 것이므로 반드시 백업을 해두실 것을 권합니다.
일반적인 댓글 삭제/수정/답글 시 바로 팝업창을 띄워 처리하는 팁입니다.
아래 댓글 새창보기에서 삭제/수정/답글 기능도 넣고자 하시는 분은 이 팁을 적용하시면 됩니다.
우선 첨부 파일을 아래의 경로에 맞추어 풀어줍니다.
popup_etc_layout.html => common/tpl/popup_etc_layout.html
popup_comment_form.html => modules/board/tpl/popup_comment_form.html
popup_delete_comment_form.html => modules/board/tpl/popup_delete_comment_form.html
filter/insert_pop_comment.xml => modules/board/tpl/filter/insert_pop_comment.xml
아래 댓글 새창보기 팁을 적용하지 않으신 분은 common/js/common.js 에서 popopen 함수를 찾아 그 밑에 popopen2 함수를 추가합니다. 이미 추가하셨으면 안 하셔도 됩니다.
function popopen2(url, target, pop_width, pop_height) {
if(typeof(target) == "undefined") target = "_blank";
if(typeof(xeVid)!='undefined' && url.indexOf(request_uri)>-1 && !url.getQuery('vid'+ '+ ')) url = url.setQuery('vid',xeVid);
if(typeof(pop_width) == "undefined") pop_width = "350";
if(typeof(pop_height) == "undefined") pop_height = "120";
winopen(url, target, "left=10,top=10,width="+pop_width+",height="+pop_height+",scrollbars=yes,resizable=yes,toolbars=no");
}
이후 설명의 편의를 위해 댓글 삭제 부분과 댓글 수정/답글 부분을 나누어 설명 드리겠습니다.
또 게시판 스킨 수정은 전과 마찬가지로 xe_official 게시판 스킨을 기준으로 합니다.
[댓글 삭제]
1. modules/board/board.view.php 약 550라인쯤에 '* @brief 댓글 삭제 화면 출력' 부분을 찾아 다음과 같이 수정합니다.
$this->setTemplateFile('delete_comment_form');
=>
// 팝업 레이아웃 선택
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_etc_layout');
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('popup_delete_comment_form');
2. modules/board/tpl/js/board.js 약 84라인 /* 댓글 삭제 */ 부분을 찾아 var url 이하를 아래처럼 수정합니다.
//var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl);
if(page) url = url.setQuery('page',page);
//alert(message);
opener.location.href = opener.location.href;
window.close();
}
3. 이제 게시판 스킨을 수정합니다.
modules/board/skins/xe_official/comment.html 에서 댓글 삭제 링크를 찾아 아래처럼 onclick 이하를 추가합니다.
<li><a href="{getUrl("act','dispBoardDeleteComment','comment_srl',$comment->comment_srl)}">{$lang->cmd_delete}</a></li>
=>
<li><a href="{getUrl("act','dispBoardDeleteComment','comment_srl',$comment->comment_srl)}" onclick="popopen2(this.href,'CommDel',360,120); return false;">{$lang->cmd_delete}</a></li>
다른 스킨에 적용 시에도 comment.html에서 댓글 삭제 링크에 onclick 이하 부분을 추가해주시면 됩니다.
[댓글 수정/답글]
1. modules/board/board.view.php 에서
* @brief 댓글의 답글 화면 출력 함수 function dispBoardReplyComment() 와
* @brief 댓글 수정 폼 출력 함수 function dispBoardModifyComment() 를 찾아 각각 아래와 같이 수정합니다.
/**
* 사용되는 javascript 필터 추가
**/
Context::addJsFilter($this->module_path.'tpl/filter', 'insert_comment.xml');
$this->setTemplateFile('comment_form');
=>
/**
* 사용되는 javascript 필터 추가
**/
Context::addJsFilter($this->module_path.'tpl/filter', 'insert_pop_comment.xml');
// 팝업 레이아웃 선택
$this->setLayoutPath('./common/tpl');
$this->setLayoutFile('popup_etc_layout');
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('popup_comment_form'+ ');
2. modules/board/tpl/js/board.js 에서 '/*댓글 작성 후 함수*/' 다음에 아래 함수를 추가합니다.
/* 댓글 새창 답글, 수정 작성후 */
function completePopInsertComment(ret_obj) {
var error = ret_obj['error'];
var message = ret_obj['message'];
var mid = ret_obj['mid'];
var document_srl = ret_obj['document_srl'];
var comment_srl = ret_obj['comment_srl'];
opener.location.href = opener.location.href;
window.close();
}
3. 이제 게시판 스킨을 수정합니다.
modules/board/skins/xe_official/comment.html 에서 댓글 수정/답글 링크를 찾아 다음과 같이 onclick 이하를 추가합니다.
<li><a href="{getUrl("act','dispBoardReplyComment','comment_srl',$comment->comment_srl)}">{$lang->cmd_reply}</a></li>
<!--@if($comment->isGranted() || !$comment->get('member_srl') || $grant->manager)-->
<li><a href="{getUrl("act','dispBoardModifyComment','comment_srl',$comment->comment_srl)}">{$lang->cmd_modify}</a></li>
=>
<li><a href="{getUrl("act','dispBoardReplyComment','comment_srl',$comment->comment_srl)}"onclick="popopen2(this.href,'CommReply',600,300); return false;">{$lang->cmd_reply}</a></li>
<!--@if($comment->isGranted() || !$comment->get('member_srl') || $grant->manager)-->
<li><a href="{getUrl("act','dispBoardModifyComment','+ 'comment_srl',$comment->comment_srl)}"onclick="popopen2(this.href,'CommModify',600,300); return false;">{$lang->cmd_modify}</a></li>
다른 스킨에서도 comment.html에서 댓글 수정/답글 링크에 'onclick=~' 부분을 추가해주시면 됩니다.
[댓글 새창보기에 적용]
modules/board/tpl/comment_pop.html 에서 아래 부분을 찾아 '<!--//봉인 ' 과 ' -->'을 삭제만 하면 됩니다.
<!--//봉인
<li><a href="{getUrl("act'+
','dispBoardReplyComment','comment_srl',$comment->comment_srl)}" onclick="popopen2(this.href,'CommReply',600,300); return false;">{$lang->cmd_reply}</a></li>
<!--@if($comment->isGranted() || !$comment->get('member_srl') || $grant->manager)-->
<li><a href="{getUrl("act','dispBoardModifyComment','comment_srl',$comment->comment_srl)}" onclick="popopen2(this.href,'CommModify',600,300); return false;">{$lang->cmd_modify}</a></li>
<li><a href="{getUrl("act','dispBoardDeleteComment','+
'comment_srl',$comment->comment_srl)}" onclick="popopen2(this.href,'CommDel',300,120); return false;">{$lang->cmd_delete}</a></li>
<!--@end-->
-->