웹마스터 팁
댓글 삭제/수정/답글 시 팝업창으로 띄우기
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-->
-->
댓글 22
-
kity1221
2009.10.25 22:25
-
고진감래
2009.10.26 19:24
답글은 정상적으로 되는데 수정할 때 홈피레이아웃까지 다 뜬다면 위의 [댓글 수정/답글] 1번에서 function dispBoardModifyComment() 수정이 제대로 안된 게 아닌가 싶습니다. -
kity1221
2009.10.27 15:57
* @brief 댓글의 답글 화면 출력 함수 function dispBoardReplyComment()
이부분은 수정을 안시켜줬더군요..
전 둘중 하나만 수정하는 건 줄알고 ㅎㅎㅎ
-
kity1221
2009.10.25 22:38
방금 시험해보니까 댓글달거나 삭제할때 새로고침해야 답글달거나 지워진거로 나오네요..
자칫 모르는 사람이 보면 댓글 삭제해도 안된걸로 보여 착각할 수 도 있을거 같네요...
-
고진감래
2009.10.26 19:32
새로고침 되어야 정상입니다. 우선 소스보기 해서 <HEAD> 부분에 <script type="text/javascript" src="/modules/board/tpl/js/board.js"></script>이 나오는지 확인하시고요. 위에서 [댓글삭제] 2번과 [댓글 수정/답글] 2번의 modules/board/tpl/js/board.js 수정이 제대로 되어있는지 확인해보세요.
-
kity1221
2009.10.27 15:32
팝업창에서 수정하거나 삭제하면 원래 페이지에선 자동으로 새로고침되야 정상이란 말씀이신가요???
-
kity1221
2009.10.27 15:55
<script type="text/javascript" src="/modules/board/tpl/js/board.js"></script>
이란건 없는데요???
-
kity1221
2009.10.27 22:19
지인의 도움으로 해결했습니다.
<script type="text/javascript" src="/modules/board/tpl/js/board.js"></script>
이란게 없어서
추가했더니 되네요.팁 감사드리고 수고하세요^^
-
kity1221
2009.10.27 23:41
아 문제가 생겼네요....
테스트할땐 예전에 썻던글에 달린 댓글로 테스트해봤는데
방금 새글에 달린 댓글에 답글달고 수정, 삭제 해봤더니 새로고침이 안되네요..
전에 작성한글에만 새로고침이되고 새로 올라온 글에 달린 댓글은 새로고침이 안됩니다;;
이건 무슨 시츄에이션인지;;;;;;;;;
머리 어지럽네요.ㅜㅜㅜ 이거 어찌해야할지 부탁드립니다...
-
고진감래
2009.10.28 18:54
동일게시판에 똑같은 스크립트가 적용되었는데 다른 현상이 나타난다는 게 저도 잘 이해가 안 가는군요. 일단 위에서 빠진 과정이 있는지 다시 한번 살펴보시기 바랍니다. 사이트 주소를 알려주시면 한번 확인을 해보겠습니다. -
kity1221
2009.10.28 19:40
-
고진감래
2009.10.28 20:24
복구를 해놓으셔서 그런지 알 수가 없군요. 스크립트를 어떻게 수정하셨는지 모르겠습니다만 새글과 옛글의 차이는 DB에 담긴 data의 차이일 뿐, 이를 구현하는 구문이나 스크립트는 동일하므로 스크립트 적용이 옛글이라 되고 새글이라 안되는 경우는 없다고 보시면 됩니다. 위에서 스크립트 적용을 해결하셨다고 하셨는데 아마 그 방식에 문제가 있었던 게 아닌가 싶습니다만 어떤 방식으로 해결하셨는지요? -
kity1221
2009.10.29 15:31
레이아웃 설정에서
head부분 스크립트 넣는칸에 입력하였습니다.
-
시니시즘
2009.10.27 14:15
페이지 상에서 삭제 버튼만 누르면 그냥 삭제되는 법은 없을까요? 싸이월드 댓글처럼.
-
고진감래
2009.10.28 19:06
어떤 방식을 말씀하시는 건지 잘 모르겠습니다만 새로고침 없이 바로 삭제되는 식이라면 XE에서는 아마 어렵지 않나 싶습니다. -
시니시즘
2009.10.29 03:16
비동기 호출을 통한 ajax를 사용하면 충분히 가능할거 같은데요.
-
김창균
2009.12.03 16:08
약간의 버그가 있네요.
위에 말씀하신 것 처럼 댓글을 달고 목록으로 갔다가(다른 곳으로 갔다가) 다시 본문으로 이동후 댓글을 삭제하면 새로고침이 정상적으로 됩니다.
하지만 댓글을 달고 바로 댓글을 삭제하면 새로고침이 안되네요.(안된것 처럼 보인다가 맞는건가요?^^)
즉 삭제후 리프레쉬되는 주소가 삭제되기 전에 #리플로 되어있기 때문에 이런 현상이 생기는 것 같습니다.
위 설명중 board.js 파일
opener.location.href = opener.location.href ; 이부분을
opener.location.href = url; 이처럼 바꿔주시면 정상적으로 새로고침됩니다.^^
-
위크니
2010.03.11 16:39
팁 감사합니다. 잘 적용되네요 :)
김창균님께서 말씀하신 방법 쓰니까 새로고침도 잘 작동하구요.
-
물비늘
2011.03.04 21:51
[댓글 수정/답글]
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'+ ');
그대로 소스 붙혔더니 500 에러뜸
그래서 제일 아랫줄에 +' 삭제해주고 소스 붙여넣으니 정상작동합니다.
안되시는 분들은 저처럼 해주세요. -
KS
2013.07.23 01:53
감사합니다. 이 팁으로 댓글삭제시 새로고침 없이 삭제가능하게 했습니다. 댓글수정,대댓글창은 제가 새로고침없이 처리했지만 삭제에서 잠시 막혔는데...풀렸습니다. 감사합니다.
-
asher
2014.09.13 20:18
http://www.yebhi.com" Year 2012 has been quite eventful. SRSG also witnessed events and evolved in terms of business verticals, technologies, people and processes."
-
asher
2014.10.07 19:01
Most of the link builders Comment Find the DIFFICULTY of Removal or deletion for the fact that the Comment May not be Required of Quality. All you need is to check wither you have written for the point.http://www.artsupply.com
수정하는건 새창에 홈페이지 레이아웃까지 다떠서 불편하네요...
전 그래서 수정은 새창으로 안했습니다...
암튼 좋은 정보 감사합니다~