이런 글이 안개 골목 > 개발이야기 게시판에 어울리는지 모르겠습니다.
안개 골목은 처음인지라 무섭..ㅎㅎ
- 이 글과 관련된 문제의식은 여기( https://www.xetown.com/square/582193 )를 참조!
- 스케치북 게시판 스킨 기준이에요~
- 개인적으로 '새로고침 없는 댓글'과 '대댓글 ajax 호출'을 적용한 상태여서, 일반 스케치북 게시판 스킨에서도 제대로 작동할지는 좀 더 봐야겠구요;;;
1. _comment.html 맨 위에 스크립트 구문을 넣어줌
jQuery(function($){
var target_id = location.hash.replace(/#comment_/,''),
container = '#cmtPosition';
if(target_id != '') {
$.cookie('target_id',target_id);
if(target_id != '{$_COOKIE["target_id"]}') {
setCookieNReload();
}
} else {
$.cookie('target_id','');
'{@ if(isset($_COOKIE["target_id"])) '+setCookieNReload()+'; }';
}
function setCookieNReload() {
$.ajax({
global: false,
cache: false,
url: location.href,
dataType: 'html',
success: function(data) {
var content = $(data),
selectedContent = content.find(container).html();
$(container).html(selectedContent);
},
complete: function() {
if(location.href.indexOf('#comment_')!=-1) $(document).scrollTop($(location.hash).offset().top);
}
});
};
});
2. 스크립트 구문이 끝나면 이어지는 곳에 다음과 같이 php 구문의 xe 템플릿 문법을 적용함
{@
if(isset($_COOKIE['target_id'])):
$oModuleModel = getModel('module');
$comment_config = $oModuleModel->getModulePartConfig('comment',$module_info->module_srl);
$cmt_lst_count = $comment_config->comment_count;
$args = new stdClass();
$args->document_srl = $oDocument->document_srl;
$cl = executeQuery('comment.getCommentList', $args);
foreach($cl->data as $key => $val):
if($val->comment_srl == $_COOKIE['target_id']):
$cpage = ceil(($oDocument->getCommentcount()-$key)/$cmt_lst_count);
break;
endif;
endforeach;
endif;
if(Context::get('cpage')) $cpage = Context::get('cpage');
}
아직 손봐야 할 것이 적지 않은 것 같지만, 대강 이런 식으로 하면 되는 듯합니다.
암튼, 그래도 cpage 자동 감지의 단초를 찾은 거 같아요.
테스트는 여기: http://bit.ly/2pF5a8V
(주소 링크의 파라미터에 cpage는 없지만, 댓글번호를 보고 자동으로 cpage를 감지해서 해당 댓글 페이지로 넘어갈 거예요)
3. 덧붙여, _comment.html을 include하고 있는 _read.html에 다음과 같은 hashchange 이벤트를 붙여주면 더 완벽한 작동이 가능합니다.
(function($) {
if(location.href.indexOf('#comment_')!=-1) {
var container = '#cmtPosition';
$(window).on('hashchange',function(){
$.ajax({
global: false,
cache: false,
url: location.href,
dataType: 'html',
success: function(data) {
var content = $(data),
selectedContent = content.find(container).html();
$(container).html(selectedContent);
}
});
});
}
})(jQuery);