라이믹스/XE | 라이믹스 |
---|
이런 글이 안개 골목 > 개발이야기 게시판에 어울리는지 모르겠습니다.
안개 골목은 처음인지라 무섭..ㅎㅎ
- 이 글과 관련된 문제의식은 여기( 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);
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
9 | 후원회원 가입 받을 때 서명(싸인, 사인) 받는 법 [1] | 아포리아 | 2015.03.25 | 370 |
8 | 후원회원 가입 받을 때 서명(싸인, 사인) 받는 법 2 - 복수의 패드 및 해당 확장변수가 필수/선택일 경우를 모두 고려함 | 아포리아 | 2016.01.25 | 176 |
7 | 후원회원 가입 받을 때 후원금액 선택 받는 법 | 아포리아 | 2016.08.27 | 301 |
6 | 코어 수정 없이, 시조 댓글의 리스트만 출력하고, 자손 댓글의 리스트는 로드하지 않았다가 클릭 이벤트로 ajax 호출하기 | 아포리아 | 2017.04.18 | 1826 |
» | 스킨에서 댓글 cpage 자동 감지 | 아포리아 | 2017.05.06 | 502 |
4 | 게시판 본문의 분류를 출력할 때 상위 카테고리도 같이 출력하기 [1] | 아포리아 | 2017.05.08 | 249 |
3 | 스크립트파일(js)을 하단부에서 불러오게 하기 | 아포리아 | 2016.08.30 | 112 |
2 | 년월일별 아카이브 리스트 만들기 | 아포리아 | 2016.08.30 | 261 |
1 | 게시판 "본문"에서 확장변수(단일/다중선택) 기본값의 다국어 출력 방법 [1] | 아포리아 | 2016.08.30 | 305 |